当前位置: 移动技术网 > IT编程>开发语言>C/C++ > 4-18 易错点 链表的创建和添加

4-18 易错点 链表的创建和添加

2019年04月19日  | 移动技术网IT编程  | 我要评论

里美ゆりあ,金刚力武道,西安都市快报直播

  今天学习了链表内的创建和添加,先总结一下我犯的错误

  1. 二级指针理解不深刻,导致传参之后,实参的值并没有变化;
  2. 符号优先级没有记熟练,导致写完之后会出现很多语法问题;

先上代码

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 
 4 typedef struct node
 5 {
 6     int id;
 7     char *name;
 8     char *tel;
 9     struct node *next;
10 }node;
11 node *getnode(int id,char *name,char *tel);
12 void addnode(node **pphead,node **ppend,node *pnode);
13 int main()
14 {
15     node *phead = null;     //1
16     node *pend = null;
17 
18     addnode(&phead,&pend,getnode(1,"cyc","164864613521"));
19     addnode(&phead,&pend,getnode(2,"xmx","164864613521"));
20     addnode(&phead,&pend,getnode(3,"wdh","164864613521"));
21     addnode(&phead,&pend,getnode(4,"yk","164864613521"));
22 
23     while(phead != null)
24     {
25         printf("%d    %s    %s\n",phead->id,phead->name,phead->tel);
26         phead = phead->next;
27     }
28 
29 
30 
31     return 0;
32 }
33 node *getnode(int id,char *name,char *tel)
34 {
35     node *ptemp = (node *)malloc(sizeof(node));
36     ptemp->id = id;
37     ptemp->name = name;
38     ptemp->tel = tel;
39     ptemp->next = null;
40 
41     return ptemp;
42 }
43 void addnode(node **pphead,node **ppend,node *pnode)   // 2
44 {
45     if(*pphead == null)
46     {
47         *pphead = pnode;
48         *ppend = pnode;
49     }
50     else
51     {
52         (*ppend)->next = pnode;
53         *ppend = pnode;
54     }
55     return;
56 
57 }

代码注释:

  1. 此处设置的头指针和尾指针是便于添加结点;
  2. 函数传参,若想对传入参数的值进行改变的话,应该使用地址传递,反之,使用值传递(在这个练习当中,我想改变指针的值,所以采用地址传递,而二级指针正好是用来存储指针的地址)

思路分析:

  本次练习首先是数据结构中简单链表中单个结点的创建,经过分析可得,若是想要在程序运行的过程当中进行创建添加操作:

  1. 应该在堆区申请空间,因为栈区在程序运行后大小不可变化,并且会随着自定义函数的结束而消亡,造成信息的损失;
  2. 传入参数有多种形式,我采用的是直接传入,也可以采用scanf()即时输入的方式。

 

  链表简单的添加,此处的添加分为两种情况:

  1. 程序中并未有链表出现,那么遍历后 头指针phead = 0就可以判断,那么头指针指向添加的结点,尾指针也指向添加的结点即可;

程序中原先若是有链表已经出现,那么头指针是指向第一个结点可以不变,此时尾指针所指向结点内所存储的 pnext 就可以指向添加的结点,然后继续把尾指针指向最后一个结点。

 

2019-04-18 22:37:16 编程小菜鸟反思,大佬勿喷 谢谢!

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网