大家来看一下,高级程序员书到的这段代码是不是有问题

luoqing 2003-08-29 12:42:19
在高级程序员书到的第384页
struct intNode * inNode(void)
{int d;struct intNode *p;
printf("输入插入表元的值");
scanf("%d",&d);
p=(struct intNode *)malloc(sizeof(struct intNode));
p->value=d;
p->next=head;//就是这名话是不是有问题
//应该还有这句head=p;
return p;
}
这是线性表的内容;
还有在383页的
struct intNode * createList()
的这句好像也有问题:else tail=tail->next=p;
不知道我说得对不对,但我在这里看了很久都看不懂
...全文
46 点赞 收藏 14
写回复
14 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
jug 2003-10-10

八皇后没有错
但它的几个工作数组的长度好像为N+1也可以
回复
76ersjy2 2003-08-30
大伙看看八皇后的那题有没错!
回复
luoqing 2003-08-30
else tail=tail->next这一句没有错
回复
chinalin0 2003-08-30
你问的两个问题,原书是没有错的.
第一个,p->next=head;是将p结点插在表表上,此时,p为表头结点.
return p;此句返回表关结点,
从后面的函数调节用就可以看出,(调用语句为head=function();)
在函数调用过程中, 头指针,暂存于p中,执行head=function()后,头指针又保存在head中.
第二个问题:
tail=tail->next=p;
些语句等价于(至少在效果上等价于)
tail->next=p; 将结点阵字库p结点边入链表尾部.
tail=tail->next; tail移到链表最后一个结点.
回复
mare 2003-08-30
本书没有错
回复
doubleC 2003-08-30
支持楼上的问题
p插入前: head(node0)--->node1--->node2--->...-->NULL

p插入后:p-->head--->node1--->node2....--->NULL

如果是象上面的解释的话,当再插入一个新结点的时候,p->next 将会指向P而并非所谓的头结点head,这样是否是只为只能插入一个结点设计呢(后面有一个返回语句return p;)?
第二个问题与楼上意见相同
回复
bobble 2003-08-30
1):

p插入前: head(node0)--->node1--->node2--->...-->NULL

p插入后:p-->head--->node1--->node2....--->NULL

2):

else tail=tail->next=p;//p插入tail->next所指的内存空间,并置p为tail节点
回复
bobble 2003-08-30
如果节点插到头的话,而没有head=p,我想试问,头节点在哪里?是指向谁?
是指向原来的节点还是指向现在这个新加的节点??
-------头节点就是新加的节点p啊,其指向原来的head
回复
luoqing 2003-08-29
else tail=tail->next=p这句话没错,我只觉得它做了无用功,tail=tail->next会影响到本函数以外的程式吗?
回复
luoqing 2003-08-29
如果节点插到头的话,而没有head=p,我想试问,头节点在哪里?是指向谁?
是指向原来的节点还是指向现在这个新加的节点??
回复
sunxuyuan 2003-08-29
是的,没错!!!!!
回复
liushaoyi 2003-08-29
我哇,你西下的
回复
noyah1024 2003-08-29
不好意思,没错,再考虑一下
回复
JAMES001 2003-08-29
1. p->next=head;//就是这名话是不是有问题
//应该还有这句head=p;

我想,你跟我以前一样,犯了个 想当然 的错误

那你说这句错在哪呢?
把该结点插入头结点,何以会错?

2. tail=tail->next=p;
该结点插入尾结点
这又错在哪呢?
回复
相关推荐
发帖
软件水平考试
创建于2007-08-27

2750

社区成员

就计算机等级考试、软件初、中、高级不同级别资格考试相关话题交流经验,共享资源。
申请成为版主
帖子事件
创建了帖子
2003-08-29 12:42
社区公告
暂无公告