数据结构(c语言版)插入元素的指针语句帮我解释下:s->next=p->next;p->next=s;,最好写个程序,感谢!!
4个回答
展开全部
我写的比较简单,如果还有不会的,依然可以问我。
#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;
}
}
#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;
}
}
展开全部
现将p的下一个地址给新元素s作为s的下一个地址;再将s的地址作为p的下一个地址。
假设q是p的下一个地址,那么这条链应该是
p->q; 现在要插入显得地址s,所以要完成的链是p->s->q;
但不能直接先将s给p,那样的话就找不到q了。所以要先
s->next=p->next 再p->next=s。
假设q是p的下一个地址,那么这条链应该是
p->q; 现在要插入显得地址s,所以要完成的链是p->s->q;
但不能直接先将s给p,那样的话就找不到q了。所以要先
s->next=p->next 再p->next=s。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
给你直观的一个链表:
P->P1->P2 现在我要插S到P的后面
第一步:
我吧p的下一个赋给S的下一个链表就成这样了:
S->PI->P2
然后我吧S放到P后面:
P->S->P1->P2
看懂了吧
链表的优点就是他不是连续的内存段所以插入很简单 不需要像数组那样一个一个移动
但是寻址就要慢一点要跳转
P->P1->P2 现在我要插S到P的后面
第一步:
我吧p的下一个赋给S的下一个链表就成这样了:
S->PI->P2
然后我吧S放到P后面:
P->S->P1->P2
看懂了吧
链表的优点就是他不是连续的内存段所以插入很简单 不需要像数组那样一个一个移动
但是寻址就要慢一点要跳转
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询