W1103168475
2020-09-16 09:18
采纳率: 0%
浏览 72

对指针在数据结构的->含义不明

在双向循环链表里,到底怎么判断一个它->到底是什么意思,比如所下面这段程序里p->prior->next是什么意思

如下:

void Double Elem(Dulinklist *p ,DataTypr *x)
{ *x=p->data;
p->prior->next=p->next; 
p->next->prior=p->prior; 
free(p); }

这里p->prior->next到底指的是什么意思,如果说是p->prior是指前一个指针的话,那么p->next那么这个为啥就又是指回来了

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • threenewbee 2020-09-16 10:18

    如果你的程序正确,符合逻辑,那么prior的next指向p。
    p->prior->next=p->next;
    p->next->prior=p->prior;
    的意思是让p的前驱的后驱指向p的后驱(原先指向p,现在跳过p)
    让p的后驱的前驱指向p的前驱,也是跳过p
    从而可以从双链表中删除p

    评论
    解决 无用
    打赏 举报
  • ChiveFlowers 2020-09-16 10:37

    找个好理解的角度,比如可以这样想:当一个指针后面没有->时,就把他当做单纯的指针,当他后面有->时,就把他当做实体。比如p单独存在,
    他就是个4B的指针,对p->prior,p后面有->,所以把p当做实体并取出它的prior指针,对p->prior->next,把p->prior当做实体,取出实体中的
    next指针,next后面没了,所以,p->prior->next就是前驱结点中的那个next指针变量,并不代表当前结点的实体,p->next就是单纯的当前节点中
    的那个next指针变量,p->prior->next = p->next; 就是把当前结点的next指针变量附给了前驱结点中的next指针变量。

    不知道讲的明白吗。

    评论
    解决 无用
    打赏 举报
  • Yofoo 2020-09-16 19:44

    p->prior->next=p->next;
    主要语法是赋值语句, 所以指回来了的说法是不对的
    比如两个元素A ,B, 假设操作对象是B

    p->prior->next=p->next;
    这个语句可以分解为
    A=p->prior;
    A->next=p->next; 实际是对A的属性赋值

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题