鱼C论坛

 找回密码
 立即注册
查看: 3177|回复: 19

[已解决]单链表的头结点与计数器的关系

[复制链接]
发表于 2018-8-11 22:14:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

j=1??
我怎么觉得计数器应该是从0开始的

1.在 Status ListInsert(LinkList *L,int i,ElemType e) 中的 LinkList *L  是 头指针的地址是吗?
2.若L是头指针的地址,那么P =*L应该是 头结点的地址。
3.那么P不就是指针头结点吗 ,计数器不应该从 0开始吗,又没有到线性表第一个数据呀?


不知道有没有理解错 大佬帮助下下女子
最佳答案
2018-8-12 15:59:32
仅有的倔强 发表于 2018-8-12 15:10
请教下,我这样哪个地方理解错了?

不全对也不全错。j 不是资料的位置,是接线的位置

L-->[HEAD |   ] ---------> [a1|   ] ---------> [a2|   ] ---------> [a3|   ] ---------> .....
           ^              j=1                  j=2                    j=3
           p

目标删除位置 i=2  >> a2
找到 j = i ,但 p 还是指向 a1
临时指针 q = p->next == &a2
p->next = q->next == &a3
free(q)    功成圆满,可以释放 q 了
@IA$AZ~@NSTJ9)[}ET6}@ZD.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-8-11 23:29:01 | 显示全部楼层
姐姐好~

1. LinkList *L 是一个指针结构。*L 是头指针没错
2. p 是一个参考指针,一开始是头结点,但之后就不是了
3. 数据结构是自己定义的,没有规定一定要从 0 开始。这里的计数器是在计算位置,最前面的不是第 0 个,而是第 1 个,所以 j 从 1 开始,这样就比较直,插入第 i 个位置。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-12 08:37:00 | 显示全部楼层
claws0n 发表于 2018-8-11 23:29
姐姐好~

1. LinkList *L 是一个指针结构。*L 是头指针没错

谢谢你为我解答
但我还是有一个问题是
既然p一开始指向头结点的。 头结点也算是第一个结点是吗   那这样的话, 计数器应该从0开始呀 第二个结点才是我们真正的 线性表第一个结点哇?那时候计数器才变成1  我还是对这个地方有点懵
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-12 12:14:08 | 显示全部楼层
仅有的倔强 发表于 2018-8-12 08:37
谢谢你为我解答
但我还是有一个问题是
既然p一开始指向头结点的。 头结点也算是第一个结点是吗   那 ...

j 不是计数器,是位置指标,不需要从 0 开始。
链表的结构是这样的
HEAD(0) -> a1(1) -> a2(2) -> ...

我想插入一个元素在第一个位置
HEAD(0) -> e(1) -> a1(2) -> a2(2) -> ...
需要怎么做?直接插入就好了嘛,因为 HEAD 是指向第一个元素的位置。
找到位置了,while ... if ... 跳过,申请内存,存放资料。
s-> next = p->next;  //新资料指向头结点 p 的下一个位置 a1
p->next = s;            //头结点不动,直接指向新资料的位置

生活化的例子:插队。您想插到第五个位置,那是不是需要先定位到第四个,然后原本排在第五个的人就落后一位了。链表就是插队~ 这4 跟 5,就是您的 0 与 1~

么么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-12 14:16:03 | 显示全部楼层
claws0n 发表于 2018-8-12 12:14
j 不是计数器,是位置指标,不需要从 0 开始。
链表的结构是这样的
HEAD(0) -> a1(1) -> a2(2) -> ...
...

  在有头结点的单链表,若想在 第 i个位置添加数据 ,和 想在第i个位置删除数据  , j 用来判断 有没有到达 i 的位置?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-12 14:39:18 | 显示全部楼层
仅有的倔强 发表于 2018-8-12 14:16
在有头结点的单链表,若想在 第 i个位置添加数据 ,和 想在第i个位置删除数据  , j 用来判断 有没有到 ...

头结点是不变的,p 是动态的指针,一开始是指向头结点而已。但是指针没有计数的功能,所以用 j
标记目前的位置,用 i 标记目标位置。

因为链表就是活动性高的,没有理由让指针附带计数器。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-12 15:10:18 | 显示全部楼层
claws0n 发表于 2018-8-12 14:39
头结点是不变的,p 是动态的指针,一开始是指向头结点而已。但是指针没有计数的功能,所以用 j
标记目 ...




请教下,我这样哪个地方理解错了?
QQ图片20180812150850.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-12 15:36:36 | 显示全部楼层
j是1,指示首节点,L代表头指针,L->next指示的是头节点的指针域,代表首节点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-12 15:59:32 | 显示全部楼层    本楼为最佳答案   
仅有的倔强 发表于 2018-8-12 15:10
请教下,我这样哪个地方理解错了?

不全对也不全错。j 不是资料的位置,是接线的位置

L-->[HEAD |   ] ---------> [a1|   ] ---------> [a2|   ] ---------> [a3|   ] ---------> .....
           ^              j=1                  j=2                    j=3
           p

目标删除位置 i=2  >> a2
找到 j = i ,但 p 还是指向 a1
临时指针 q = p->next == &a2
p->next = q->next == &a3
free(q)    功成圆满,可以释放 q 了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2018-8-12 16:14:51 | 显示全部楼层
claws0n 发表于 2018-8-12 15:59
不全对也不全错。j 不是资料的位置,是接线的位置

L-->[HEAD |   ] ---------> [a1|   ] ---------> [ ...

感谢!!   这样感觉就略懂了 ! 我试着写写代码!  感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-12 16:22:13 | 显示全部楼层
仅有的倔强 发表于 2018-8-12 16:14
感谢!!   这样感觉就略懂了 ! 我试着写写代码!  感谢!

交流学习~欢迎发问~

完成后,请姐姐采纳最佳答案~ 么么~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-12 16:47:58 | 显示全部楼层
claws0n 发表于 2018-8-12 15:59
不全对也不全错。j 不是资料的位置,是接线的位置

L-->[HEAD |   ] ---------> [a1|   ] ---------> [ ...


Status GetFlem(LinkList L,int i,ElemType *e)
{
        int j;
        LinkList P;
        p=L->next;
        j=1;
               

        while(p||j<i)
  {
        p=p->next;
      ++j;
   }
        if(!p||j>i)
   {
     rerutn  ERROR;
    }

        *e=p->data;
        return OK;
}
QQ图片20180812164424.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-12 16:49:53 | 显示全部楼层
claws0n 发表于 2018-8-12 16:22
交流学习~欢迎发问~

完成后,请姐姐采纳最佳答案~ 么么~

又麻烦你拉 ~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-12 17:04:42 | 显示全部楼层
本帖最后由 claws0n 于 2018-8-12 17:12 编辑
仅有的倔强 发表于 2018-8-12 16:47
Status GetFlem(LinkList L,int i,ElemType *e)
{
        int j;


这代码有错字
Status GetElem(LinkList L,int i,ElemType *e)
{
        int j;
        LinkList P;
        p=L->next;
        j=1;
               

        while(p||j<i)
  {
        p=p->next;
      ++j;
   }
        if(!p||j>i)
     return  ERROR;
    }

        *e=p->data;
        return OK;
}

p 不需要指向 a2,因为 j == i == 2,p->next 就保证是 &a2
看回 9 楼吧,比较一下,消化一下
p 不能丢掉,因为 p 接下来得把 &a3 给重新上链
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-12 17:18:49 | 显示全部楼层
claws0n 发表于 2018-8-12 17:04
这代码有错字
Status GetElem(LinkList L,int i,ElemType *e)
{

不不不  ,
我现在问的是 查询第 i个结点的代码

和9楼说的方法有冲突,(可能也是我理解错的原因)

因为最后  有一个  *e=p->data;
按照9楼说的方法, 找到的p并不是指向的第i个结点 ,而p->next 才是 第i个位置。所以 *e=p->data;e并不是 第 i 个结点 的数据
QQ图片20180812164424.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-12 17:39:54 | 显示全部楼层
仅有的倔强 发表于 2018-8-12 17:18
不不不  ,
我现在问的是 查询第 i个结点的代码

等下,现在是要查找第几个元素而已吧?
索取的话,概念不一样~~
序号没有改变~~
因为一开始 p = L-> == &a1 了,此时 p 是在 j 之后
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-12 17:52:12 | 显示全部楼层
claws0n 发表于 2018-8-12 17:39
等下,现在是要查找第几个元素而已吧?
索取的话,概念不一样~~
序号没有改变~~

噢噢噢  ~  略懂略懂了   什么序号没有改变??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-12 18:06:11 | 显示全部楼层
仅有的倔强 发表于 2018-8-12 17:52
噢噢噢  ~  略懂略懂了   什么序号没有改变??

应该说这链表是建立在数组的基础上。如果插队了,插入第 5 个位置,那么原本第 5 个到最后一个元素,要退后一个,让出位置来对吧?

链表是省去了整体移动的动作,但是原本 5:end 的变成 6:end。它们的相对序号是改变的。但是在链表,这个序号从幕前被搬到幕后去,几乎看不到身影

插入的时候,让前面的报数。1,2,3,4;好,到 4 的后面,就会插入在第 5 个元素了。
索取的时候,如果你要第 5 个元素,你一定是算到第五个才拿不是吗?所以指针的指向调整了一格
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-12 20:52:48 | 显示全部楼层
claws0n 发表于 2018-8-12 18:06
应该说这链表是建立在数组的基础上。如果插队了,插入第 5 个位置,那么原本第 5 个到最后一个元素,要退 ...


深奥....
不懂...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-12 21:05:23 | 显示全部楼层

那就消化最后两行吧~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 03:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表