学习 单链表 总结二
来源:互联网 发布:模具erp软件 编辑:程序博客网 时间:2024/04/30 11:39
学习 单链表 总结二
—-单链表的头结点、头指针及单链表的初始化等
头结点与头指针
头结点即第一个结点,头指针是指向第一个结点的指针. 在单链表中,可以没有头结点,但是不能没有头指针.
下面是头结点与头指针的关系:
// 定义结点的结构体typedef struct Node{ int data; struct Node* next;}Node, *LinkList;
那么若定义:
LinkList L;
则L为链表的头指针.
// 创建一个结点L = (LinkList)malloc(sizeof(struct Node));
这时,L返回一个指针,并且赋给了头指针.
单链表的初始化
带头结点初始化
用上面的结构体定义. 直接代码如下:
// 声明头结点Node* head;// 带头结点初始化void InitList(Node** head){ *head = (Node*)malloc(sizeof(Node)); (*head)->next = NULL;}
不带头结点初始化
方法一:
// 声明头结点Node* head;void InitList(Node** head){ *head = NULL;}
方法二:
// 声明头结点Node* head;void InitList(Node* head){ head = NULL;}
为什么带头结点单链表的初始化只有一种方式?
因为不带头结点声明Node *head 时,C编译器将其自动初始化为NULL,于是根本不需要调用InitList(head); 也即不带头结点的初始化是个伪操作。而带头结点的初始化在堆开辟了一段内存,需要修改head指针变量指向的地址(即head的值),所以要修改head的值,必须传保存head变量的地址(即二维指针)。而直接调用CreatList(head);相当于传head变量的值,函数修改的是head的副本,无法真正改变head的值。
这其实本质上还是传值,传址的问题,只不过指针本身保存的地址,让这个过程变得有点纠结。在函数调用需要修改指针变量的指向(value)时,应该传递指针变量的地址(address)。
单链表的创建
带头结点的创建
void CreatList(Node** head){ Node* phead = *head; Node* CurrentNode; int InputValue; while (scanf("%d", &a)) { if (0 != a) { CurrentNode = (Node*)malloc(sizeof(Node)); CurrentNode->value = a; phead->next = CurrentNode; phead = CurrentNode; } }}
不带头结点的创建
不带头结点的初始化,第一个结点与其他结点的处理要分开!
void CreatList(Node** head){ Node* phead; Node* CurrentHead; int InputValue; int i = 1; while(scanf("%d", &a)) { if (0 != a) { CurrentHead = (Node*)malloc(sizeof(Node)); CurrentHead->value = a; // 第一个结点的处理操作 if (1 == i) { *head = CurrentHead; } else { phead->next = CurrentHead; } phead = CurrentHead; } else { phead->next = NULL; break; } i++; } }
参考文档
http://www.nowamagic.net/librarys/veda/detail/1806
0 0
- 学习 单链表 总结二
- oracle学习总结(二)
- oracle学习总结(二)
- oracle学习总结(二)
- oracle学习总结(二)
- 学习OpenGL总结二
- 雅思学习总结(二)
- oracle学习总结(二)
- gstreamer学习总结二
- 暑假学习总结二
- Python学习总结二
- phpcms2008学习总结二
- javasript学习总结二
- 操作系统学习总结二
- 内核学习总结(二)
- 学习总结(二)
- SpringMVC学习总结(二)
- ELCImagePicker 学习总结(二)
- UIView 子界面的处理
- Python学习笔记1--动态类型
- 大文件处理【java以及数据清洗相关】
- XHTML表单学习总结
- android:assets下的文件复制到SD卡
- 学习 单链表 总结二
- Android开发之路之准备
- javascript数组的其他方法
- Linux中的UID,EUID,SUID
- 如何使用C#调用雅虎REST服务
- [HDU 1166]敌兵布阵[树状数组][入门]
- JDBC
- poj1279Art Gallery【半平面交求内核面积】
- 系统调用跟我学之wait, waitpid函数