C语言链表中q->next=p;表示什么意思?

作者&投稿:薛寒 (若有异议请与网页底部的电邮联系)
在C语言链表中,p=q->next和p->next=q->next有什么区别?~

给你普及下指针的真谛:
假设两个链表节点的内存地址分别为AAAA和BBBB,节点内偏移4字节处保存名为next的指针,
p = 0xAAAA,q=0xBBBB,这说明p和q分别指向这两个节点。
p->next是内存AAAE处的内容,q->next是内存BBBF处的内容(假设为CCCC)
那么, p = q->next 即p=0xCCCC
p->next = q->next,即将内存AAAE处的内容改为CCCC
两值意义相差甚远。

q->next = p;的意思是将p存放入q所指向的结点的指针域

q = p;q就指向了p所指的
q=p赋值语句后,q所指向的结点还是存在的,没有q结点这一说法

q->next = p; 表示将节点p加入到节点q之后。

意思:使当前指针指向链表的下一个结点。

一般作用在数据结构中的单链表里由应用,语句中的p一般指向一个结构体类型的数据,此类型的数据通常表示节点;结构体里存放的一些数据和记录下一个节点地址的指针变量next;这个next就好比链条一样,连接着一个个节点。

->是一个整体,它是用于指向结构体、C++中的class等含有子数据的指针用来取子数据。换种说法,如果在C语言中定义了一个结构体,然后申明一个指针指向这个结构体,那么要用指针取出结构体中的数据,就要用到“->”.

扩展资料

链表的特点:

1、n个节点离散分配

2、每一个节点之间通过指针相连

3、每一个节点有一个前驱节点和一个后继节点

4、首节点没有前驱节点,尾节点没有后继节点

创建链表前须知

首节点:存放第一个有效数据的节点。

头节点:在单链表的第一个结点之前附设一个结点,它没有直接前驱,称之为头结点,头结点的数据域可以不存储任何信息,指针域指向第一个节点(首节点)的地址。头结点的作用是使所有链表(包括空表)的头指针非空。

头指针:指向头节点的指针。

尾节点:存放最后一个有效数据的节点。

尾指针:指向尾节点的指针。

参考资料来源:

百度百科——链表



q->next = p;  表示将节点p加入到节点q之后。

具体的意思可以参考如下的图形表示:

节点q----->节点p


一般链表的节点定义为:

struct node
{
    int data;   // 数据域
    struct node *next;  // 指针域
};


q-.next=p;
把p的地址赋给q的下一个地址
while (q)
{r=q->next;
q->next=p;
p=q;
q=r; }
把q的下一个地址赋给r;
p的地址赋给q的下一个地址;
q的地址赋给p的地址
r的地址赋给q;
直到q->next的地址为0就结束循环
其实链表要自己多画画就直到怎么回事了

把p(是指针,表示地址)赋给q的地址域。

前面没有说明r ,p,q是指向什么的指针啊,后面就难猜了


C语言链表问题 为什么数据老是存不到链表里去呢
=NULL) { printf("%d\\n",Q->data); Q=Q->next; }}void addcreat(struct lian *S){ int a=0,num,data; struct lian *Q=S; printf("请输入需要添加的数据个数\\n"); do{ scanf("%d",&num); if(num<=0) printf("\\n您输入的数据有误,请重新输入"); }while(num<=0...

c语言链表问题求解~当对表里最后一个结点删除的时候会出错
问题出现在这个循环里 while(p->next!=NULL){ while(p->next->data==e){ q=p->next;p->next=q->next;free(q);count++;} p=p->next;} 你的链表是有头结点的链表,假设表中只有头结点和一个节点X,这个节点等于e,现在来一步步分析:首先,没进入循环之前,p->next就是那个节点X,不...

C语言链表问题 为什么我要输入5个数据却只输入到了4个 输第一个数据...
getchar();gets(q->a);5 第1个人名字aaaaa 第2个人名字bbbbb 第3个人名字ccccc 第4个人名字ddddd 第5个人名字eeeee head->aaaaa->bbbb->cccc->dddd->eeee->end Press any key to continue include<stdio.h> include<stdlib.h> typedef struct student { char a[20];struct student *next;}...

双向链表中连续两个节点p,q之间 插入一个s
p->next = s;s->next = q;s->front = p;q->front = s;如果不明白,再HI我吧

c语言链表
c语言里面的链表是一种数据结构 是一种线形的存储结构 链表和数组一样,也是将一组同类型的数据组织在一起的一种数据结构 不同的是 数组采用的是顺序存储,依靠数组的首地址和元素的相对地址(下标)来实现访问。优点是访问方便快捷,而缺点是数组是静态的,不利于实现元素的动态增减。而链表采用的是离散...

C语言链表?
q->next=0; \/\/最后的节点的next==0 p=head; \/\/把头节点的地址给 p while (p!=0) \/\/如果不是最后一个节点 { printf ("%d,%s,%0.1f\\n",p->num,p->name,p->pay); \/\/输出结构的变量 p=p->next; \/\/指向下个节点 } } 链表这个东西,就算全部给你解释,我想你也看...

...要求按照升序的规则将其存入单链表中,并输出
%d",&x); q=(node*)malloc(sizeof(node)); q->num=x; q1=h; for(p=h->next;p&&p->num<x;p=p->next)q1=p; q->next=q1->next;q1->next=q; } return h;}int main(){ h=creat(); for(p=h->next; p; p=p->next) printf("%d ",...

c语言,中p->next->next合法么? p-data=q->data合法么?
如果考虑全面的话,有时候是不合法的,比如p所在的位置是链表的最后一个结点或者链表中有0个结点。当然大部分还是合法的,你可以编一个小程序运行一下,下面的是我编的一个小程序,你可以运行一下 我先说一下运行结果:当p结点后面有两个或两个以上的结点时,就能够准确的输出所有的值;当p结点后面...

c语言链表问题
include<iostream.h>main(){\/\/声明变量 int i,j; float t,a[5]; \/\/从键盘上为数组赋值 for (i=0;i<=4;i++) { cout<<"a["<<i<<"]="; cin>>a[i]; } \/\/对数组按从大到小顺序排序 for (i=0;i<=3;i++) for (j=i+1;j<=4;j++)...

c语言链表的操作
= NULL;while(q->next){q = q->next;}q->next = p;\/* my change ends--- *\/\/\/ 请补全代码}return OK;}你在插入新节点的时候是插入链表头的,输出时有时顺序输出,所以是相反的 现在帮你改成插入链表尾了,输出就该就是你要的了 小哥请一试 ...

镇宁布依族苗族自治县18220676163: C语言链表中q - >next=p;表示什么意思?
阙垄氟罗: q-.next=p; 把p的地址赋给q的下一个地址 while (q) {r=q-&gt;next; q-&gt;next=p; p=q; q=r; } 把q的下一个地址赋给r; p的地址赋给q的下一个地址; q的地址赋给p的地址 r的地址赋给q; 直到q-&gt;next的地址为0就结束循环 其实链表要自己多画画就直到怎么回事了

镇宁布依族苗族自治县18220676163: 在C语言链表中 q - >next=p; q=p;是什么意思?是不是q=p后q节点就消失了? -
阙垄氟罗: q->next = p;的意思是将p存放入q所指向的结点的指针域 q = p;q就指向了p所指的 q=p赋值语句后,q所指向的结点还是存在的,没有q结点这一说法

镇宁布依族苗族自治县18220676163: 数据结构单链表插入单链表中q - >next=p - >next和p - >next=q -
阙垄氟罗: q->next=p->next是指 p的next指针指向的地址赋值给 q的next指针. p->next = q 是指 q的地址赋值给p的next指针.在q->next在右边就不对了,p->next的地址覆盖了q,q本来指向的地址就找不到了.q是一个指针变量,你可以理解为q的内存地址,q->next 指向q的下一个节点内存地址.

镇宁布依族苗族自治县18220676163: c语言链表中p=q - >next与q - >next=p的区别 -
阙垄氟罗: p=q->next 使p指向q->next,p的值被改变,变为q->next q->next=p 使p的值赋给q->next,q->next的值被改变,变为p 两者最后都指向同一地址,只是被改变的对象不同

镇宁布依族苗族自治县18220676163: C语言,这个链表部分是什么意思? head=p; q - >next=p; q=p; -
阙垄氟罗: q->next = p; 表示将节点p加入到节点q之后.具体的意思可以参考如下的图形表示:节点q----->节点p 一般链表的节点定义为:struct node { int data; // 数据域 struct node *next; // 指针域 };

镇宁布依族苗族自治县18220676163: c语言关于链表操作问题 这里q - >next=p;q=p;和p - >next=p一样? -
阙垄氟罗: 一个单一的名单呢? 如果一个单独的列表,对 - >下一个到下一个节点,对 - >下一个= Q->接下来是指在q>下一个指到下一个节点米(节点Q)分配到p地址 - >下一个,这是下一个节点变为熔点

镇宁布依族苗族自治县18220676163: C语言链表概念 -
阙垄氟罗: 简单说来,就是通过指针指向,把两个结构体连接起来.比如定义下面这个结构体 struct node { int data; struct node *next; } 可以看到结构体里面定义了一个自身类型的指针,通过让指针指向另外一个结构体,我们就能通过结构体里面的next变量访问下个结构体里面的内容,而通过下一个结构体,同样可以通过下一个结构体的next指向,找到下一个这种类型的结构体,这样就形成了所谓的链表.

镇宁布依族苗族自治县18220676163: C语言 链队列这里的Q - >rear - >next是什么意思?为什么要嵌套定义结构体!这不是自己给自己增加难度吗? -
阙垄氟罗: Q->rear->next 找的是Q节点的前一个节点的后一个节点,在双向链表中,插入新节点时,Q节点的前一个节点的后一个节点指向的应该是新节点,而不是Q. 要嵌入结构体,因为结构体可以包含多个指针,包括前指针,后指针和数据.

镇宁布依族苗族自治县18220676163: C语言里面关于链表的一个函数 -
阙垄氟罗: 你的代码是错的,这是尾插法建立链表的程序 head=(NODE*)malloc(sizeof(NODE)); q=head; //申请一个头结点 这是一个带头结点的链表 for(i=1;i { p=(NODE*)malloc(sizeof(NODE)); printf("Enter a element\n"); q->next=p; //这里应该是q->next 表示将新申请的结点p加到原表尾 q=p; //新结点p成为新的表尾 }

镇宁布依族苗族自治县18220676163: C语言中链表中代码什么意思?请大侠解释,谢谢!!! -
阙垄氟罗: 1. for(p=head->next;p->next;p=p->next) 意思是该链表的下一个结构不为空,执行循环,执行循环后,再判定下下个结构是否为空,一直循环整个表2. 该程序是根据结构中 data只从小到大排序,开始表头和其后面所有结构data的比较,在第二个和他后面所有结构data的比较,如此循环...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网