首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2013-04-20 
学习数据结构遇到的几个问题这是《大话数据结构》上获取单链表一个元素的程序:Status GetElem(LinkList L,in

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

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个数据不存在的情况是为了防止传参错误

热点排行