求解链表指针问题,如下例所示:

[复制链接]
查看11 | 回复3 | 2011-9-19 01:17:15 | 显示全部楼层 |阅读模式
#includestdio.h#includestdlib.htypedefstructnode{intdata;structnode*next;}NODE……………………{inta[5]={2,4,6,8,10}i;NODE*h,*p,*q;h=NULL;for(i=0;i5;i){q=(NODE*)malloc(sizeof(NODE));q—data=a;q—next=NULL;if(h==NULL)h=p=q;else{p—next=q;p=q;}}}
回复

使用道具 举报

千问 | 2011-9-19 01:17:15 | 显示全部楼层
p是一个指针,即它的值为某个节点的地址值,所以当它的值更新时只是\"它由指向的原节点变成指向一个新节点\",而不代表\"它指向的节点的值变成另外一个节点值了\".在程序中生成新节点都是用malloc申请新空间生成的,所以每次新节点不会覆盖之前的.每次q会指向最新生成的节点(q-data=a;q-next=NULL),p也会指向最新的节点(但在指向之前有个步骤就是把之前次新的节点的指针域next指向新节点)(p-next=q;p=q),当然,如果是第一个节点,那么额外要把h指向这个节点,且没有次新节点的操作,这样所有的节点就连起来了即生成了一个链表.其实只要记住指针的值是地址值,其他的自己多分析下就应该可以搞清了.
回复

使用道具 举报

千问 | 2011-9-19 01:17:15 | 显示全部楼层
PS:链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。相比于线性表顺序结构,链表比较方便插入和删除操作。malloc函数用来申请新结点,特别注意else,是用来将结点链接起来的这就是为什么原本保存的节点不是应该已经被新的节点所覆盖的原因。追问else怎么将节点连接起来呢
回复

使用道具 举报

千问 | 2011-9-19 01:17:15 | 显示全部楼层
786967897697698777776786987
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行