欢迎来到天天文库
浏览记录
ID:20359774
大小:143.00 KB
页数:7页
时间:2018-10-12
《单链表中二级指针》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、先来看C语言创建链表、插入节点和遍历链表的一段代码:C代码 1.#include 2.#include 3. 4.typedef int ElemType; 5. 6.typedef struct Node{ 7. ElemType elem; 8. struct Node *next; 9.}Node, *LinkedList; 10. 11.//void init_linkedlist(LinkedList *lis
2、t) { 12.void init_linkedlist(LinkedList *list) { 13. *list = (LinkedList)malloc(sizeof(Node)); 14. (*list)->next = NULL; 15.} 16. 17.void insert(LinkedList list, ElemType elem) { 18. Node *p, *q; 19. q = list; 20. p = (Node *)
3、malloc(sizeof(Node)); 1. p->elem = elem; 2. p->next = NULL; 3. while(q->next != NULL) q = q->next; 4. q->next = p; 5.} 6. 7.void main() { 8. LinkedList list, p; 9. init_linkedlist(&list); 10. insert(list, 3); 11. in
4、sert(list, 4); 12. insert(list, 5); 13. p = list->next; 14. while(p != NULL) { 15. printf("%4d", p->elem); 16. p = p->next; 17. } 18. printf(""); 19.} 这个小程序完成的功能很简单,创建一个链表,然后插入3,4,5这三个整数,最后遍历链表输出每个节点中的整数。但是大家注
5、意到没有,在main函数中,初始化链表的函数参数的是一个二级指针,为什么要使用一个二级指针作为参数呢?在任何一本C语言的教材上,都会写C语言的函数参数传递是值传递方式,所有的参数都是通过值传递的,使用指针作为参数可以在函数中改变参数的值(此处感觉表达有误,但是想不到更好的表达方式)。可能有人会有疑问了,在上面代码的main函数中初始化链表的调用函数代码Java代码 1.init_linkedlist(&list); list已经是一个指针了,为什么要传递一个指针的地址,直接使用指针不行吗?
6、确实不行。为什么?那么我们来看看不使用二级指针会发生什么情况,先来看看不使用二级指针的代码:C代码 1.#include 2.#include 3. 4.typedef int ElemType; 5. 6.typedef struct Node{ 7. ElemType elem; 8. struct Node *next; 9.}Node, *LinkedList; 10. 11. 12.void init_lin
7、kedlist(Node *list) { 13. list = (LinkedList)malloc(sizeof(Node)); 14. list->next = NULL; 15.} 16. 17.void insert(LinkedList list, ElemType elem) { 1. Node *p, *q; 2. q = list; 3. p = (Node *)malloc(sizeof(Node)); 4. p->ele
8、m = elem; 5. p->next = NULL; 6. while(q->next != NULL) q = q->next; 7. q->next = p; 8.} 9. 10.void main() { 11. LinkedList list, p; 12. printf("%d", list); 13. init_linkedlist(list); 14. printf("%d", list); 15.}
此文档下载收益归作者所有