线性表的链式表示和实现中的问题

「已注销」 2009-06-20 10:16:43
问题在中间的注释中已经写明...


Status GetElem_L(LinkList &L,int i, ElemType &e)
{
// L为带头结点的单链表的头指针,当第i个元素存在时,其值赋给e并返回OK,否则返回ERROR
LinkList p;
p=L->next;
int j = 1; // 初始化,p指向第一个结点,j为计数器
while (p && j<i)
{ // 顺指针向后查找,直到p指向第i个元素或p为空
p = p->next; ++j;
}
if ( !p || j>i )
return ERROR;
//问题就在这???: j怎么会大于i呢?我认为j最多只能等于i,
//绝对不可能大于i,这个条件j>i仿佛是多余,这个条件我觉得应该改为如下:
/*
if(!p)
return ERROR; 不知各位网友如何认识这个问题。
*/
e = p->data; // 取第i个元素
return OK;
} // GetElem_L
...全文
93 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2009-06-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wangtengchao 的回复:]
主要问题是在!p这个条件上,j是不会大于i的

当链表中的元素大于i个时,则while循环回因为p为NULL而 退出,此时if条件的判断是!p导致的返回ERROR
[/Quote]

这句话:当链表中的元素大于i个时,则while循环回因为p为NULL而 退出,此时if条件的判断是!p导致的返回ERROR 什么意思???
「已注销」 2009-06-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 goodname 的回复:]
看来你认为的是正确的。

i的取值范围可以包括0吗?,是0表示第一个元素还是1表示第一个元素?
[/Quote]

当i=1时代表第一个元素,因为i只是链式线性表元素的计数器而已。
超gogo 2009-06-20
  • 打赏
  • 举报
回复
主要问题是在!p这个条件上,j是不会大于i的

当链表中的元素大于i个时,则while循环回因为p为NULL而 退出,此时if条件的判断是!p导致的返回ERROR
goodname 2009-06-20
  • 打赏
  • 举报
回复
看来你认为的是正确的。

i的取值范围可以包括0吗?,是0表示第一个元素还是1表示第一个元素?
「已注销」 2009-06-20
  • 打赏
  • 举报
回复
中间的
[color=#FF0000]


纯属多余,是我不小心要改字体颜色,结果没改成。[/color]
「已注销」 2009-06-20
  • 打赏
  • 举报
回复
上面的为了改字体,把中间的加了颜色,结果颜色还未变,下面这个比较清晰。


Status GetElem_L(LinkList &L,int i, ElemType &e)
{
// L为带头结点的单链表的头指针,当第i个元素存在时,其值赋给e并返回OK,否则返回ERROR
LinkList p;
p=L->next;
int j = 1; // 初始化,p指向第一个结点,j为计数器
while (p && j<i)
{ // 顺指针向后查找,直到p指向第i个元素或p为空
p = p->next; ++j;
}
if ( !p || j>i )
return ERROR;
//问题就在这???: j怎么会大于i呢?我认为j最多只能等于i,
//绝对不可能大于i,这个条件j>i仿佛是多余,这个条件我觉得应该改为如下:
/*
if(!p)
return ERROR; 不知各位网友如何认识这个问题。
*/
e = p->data; // 取第i个元素
return OK;
} // GetElem_L

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧