读书人

学习数据结构遇到的几个小问题

发布时间: 2013-04-20 19:43:01 作者: rapoo

学习数据结构遇到的几个问题
这是《大话数据结构》上获取单链表一个元素的程序:

Status GetElem(LinkList L,int i,ElemType *e)
{
int j;
LinkList p;/*声明一个结点*/
p = L->data;/*让p指向链表的第一个结点*/
j = 1;
while(p && j<i)/*p不为空或者计数器j还没有等于i时循环继续*/
{
p = p->next;/*让p指向下一个结点*/
j++;
}
if(!p || j>i)
{
return ERROR;/*第i个元素不存在*/
}
*e = p->data;/*取第i个元素的数据*/
return OK;
}

我不明白的是if(!p || j>i)中的j>i在这儿有意义吗?因为上面这个while(p && j<i)循环中跳出循环的时候j最大和i相等啊,所以if(!p || j>i)中的j>i应该是没有意义的吧??


还是这段程序,我不明白既然书上书的i的初始条件是1<=i<=Listlength(L),那么为什么会出现第i个数据不存在的情况呢?每个节点的数据域不都是有数据的吗?第i个数据不存在是什么情况呢? 数据结构 c
[解决办法]
其实吧j>i确实没必要,但是能有时候加多点条件,可以让程序更安全,比如当i=0但是呢p忘记设置为=NULL了,运行到后面就死了,所以更安全些。
[解决办法]
首先 第一个问题, while的终止条件时(p不为真
[解决办法]
j >= i);;;;也就是说 当程序跳出while循环的时候得再判断它是为什么跳出来的 是因为节点p的不存在呢 还是i 的越界...
第二个问题..出现上面这种情况(你代码没有给全).有可能是你对书上的代码进行移植的时候,指针跑飞了....十有八九是你代码的其他地方出现了问题...
PS.我们这学期也修数据结构 哈哈 .
[解决办法]
1.如果没有if(!p
[解决办法]
j>i)就会return OK啦
2.i是程序写作者传参进去的,并不一定就是1<=i<=Listlength(L),所以判断出现第i个数据不存在的情况是为了防止传参错误

读书人网 >C++

热点推荐