码迷,mamicode.com
首页 > 编程语言 > 详细

c++的引用和c的指针之创建链表,二叉树的烦恼和区别

时间:2017-11-06 18:04:55      阅读:270      评论:0      收藏:0      [点我收藏+]

标签:ext   链表   删除链表   std   value   es2017   删除   htm   sizeof   


/*

**代码功能:创建一个令人头疼的不算头疼的链表,然后把特定的数据删除。

*这次的主题不是在代码上,主要是关于创建链表时候的传参问题,嘿嘿,不相信你没遇到过

*/
#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>//要用到分配空间和释放空间
//定义一个链表结构
typedef struct link{
int value;
struct link *next;
}*LINK,linkInstance;

/**如果要传入参数创建链表的话。如下。
**创建:
**一,
void create(LINK &lt)等价void create(linkInstance *&lt) , 利用引用。 引用“lt”相当于实参的别名,对实参完全操控
调用在main函数中
LINK lt;
create(lt);
二,这种应该很熟悉
void create(linkInstance *lt)
调用在main函数中
linkInstance lt;
create(&lt);

结果是这样的:

技术分享

 


***************************************错误写法***************************************************
**一种错误的写法是
void create(LINK lt)
调用在main函数中:
LINK lt;
create(lt);
为什么是错的,因为lt只是一个拷贝。

这就是你的结果:(哈哈哈哈)

技术分享
**举个例子,
**void test(int a),上面的错误例子中的 lt 就相当于 a,这样上面那个也就明白了吧
**调用在main中
**int a;
**test(a);
**这就是。。。。。。不对滴。
*/

 

 

 


void create(LINK &lt){//初始化链表,注意“&lt”
LINK temp,current;//temp临时空间,用于添加节点
lt = (LINK)malloc(sizeof(struct link));//创建一个头节点
lt->next = NULL;//清空头节点
current = lt;
int value;
printf("输入数据");
//创建节点
for (int i = 0; i < 4; i++){
temp = (LINK)malloc(sizeof(struct link));
if (temp == NULL){
printf("分配空间失败");
exit(0);
}//ifEnd
scanf_s("%d", &value);
temp->value = value;
current->next = temp;
current = current->next;
}//forEnd
temp->next = NULL;//收尾,谁知道你得到的空间里面有什么。
}

void del(LINK &lt,int val){//删除链表元素
LINK forth=lt;//保存前一个元素,要用的滴下面
LINK current=lt->next;
while (current != NULL){
if (current->value == val){
forth->next = current->next;//上一个元素指向下一个元素,跳过中间的forth , current(forth->next) , current->next
free(current);//释放掉当前空间
}
else{
forth = current;
}
current = forth->next;//指向下一个元素,上面替换掉了。
}//whileEnd
}
void printLink(LINK lt){//打印
LINK L = lt->next;
while (L){
printf("%d\t", L->value);
L = L->next;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
LINK lt;
create(lt);//创建,lt是头节点,头节点不保存数据
del(lt,3);//删除所有的3这个元素,从链表。
printLink(lt);//打印
getchar();
return 0;
}

/*
这是一个作者写的关于引用的详细讲解:http://www.cnblogs.com/Mr-xu/archive/2012/08/07/2626973.html
*/

c++的引用和c的指针之创建链表,二叉树的烦恼和区别

标签:ext   链表   删除链表   std   value   es2017   删除   htm   sizeof   

原文地址:http://www.cnblogs.com/zanzg/p/7794175.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!