数据结构(c语言版)插入元素的指针语句帮我解释下:s->next=p->next;p->next=s;,最好写个程序,感谢!!

 我来答
前端小茶馆
推荐于2016-10-17 · TA获得超过962个赞
知道小有建树答主
回答量:329
采纳率:0%
帮助的人:340万
展开全部
我写的比较简单,如果还有不会的,依然可以问我。

#include <stdio.h>
#include <string.h>
#include <math.h>

typedef struct ln
{
int data;

struct ln *next;
}point;

int main()
{
point *head, *p, *q, *r;
int a;

p = (point *)malloc(sizeof(point));///首先建立一个有4个节点的链表,便于插入操作
p->next = NULL;
p->data = 1;
head = p, q = p;

p = (point *)malloc(sizeof(point));
p->next = NULL;
p->data = 5;
q->next = p, q = p;

p = (point *)malloc(sizeof(point));
p->next = NULL;
p->data = 10;
q->next = p, q = p;

p = (point *)malloc(sizeof(point));
p->next = NULL;
p->data = 15;
q->next = p, q = p;

printf("插入前的链表:\n");

p = head;
while(p)
{
printf("%-4d", p->data);
p = p->next;
}

printf("\n\n请输入一个大于1的元素:");
scanf("%d", &a);///比如输入9

p = head, q = head;
while(p)///找到要插入的位置,位置应该在q 和 p中间
{
if(p->data > a) break;
q = p;
p = p->next;
}
///while循环结束时,q指向的是5,q的next即p指向10

r = (point *)malloc(sizeof(point));///新节点
r->data = a;
r->next = NULL;

r->next = q->next;///新节点r的next指向q的next,即指向data为10的那个节点。其实这里用p比较容易理解
q->next = r;///然后q的next再指向r。这样就可以构成一个完整的链表

printf("插入后的链表为:\n");
p = head;
while(p)
{
printf("%-4d", p->data);
p = p->next;
}
}
最后选手
2011-09-13
知道答主
回答量:12
采纳率:0%
帮助的人:4.3万
展开全部
现将p的下一个地址给新元素s作为s的下一个地址;再将s的地址作为p的下一个地址。
假设q是p的下一个地址,那么这条链应该是
p->q; 现在要插入显得地址s,所以要完成的链是p->s->q;
但不能直接先将s给p,那样的话就找不到q了。所以要先
s->next=p->next 再p->next=s。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
506256442
2011-09-13
知道答主
回答量:47
采纳率:0%
帮助的人:21.4万
展开全部

这样够清楚了吧?

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
肚子痛的嘛
2011-09-13 · 超过19用户采纳过TA的回答
知道答主
回答量:122
采纳率:0%
帮助的人:56万
展开全部
给你直观的一个链表:
P->P1->P2 现在我要插S到P的后面
第一步:
我吧p的下一个赋给S的下一个链表就成这样了:
S->PI->P2
然后我吧S放到P后面:
P->S->P1->P2
看懂了吧
链表的优点就是他不是连续的内存段所以插入很简单 不需要像数组那样一个一个移动
但是寻址就要慢一点要跳转
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式