作业帮 > 综合 > 作业

在长度大于1的循环列表中,既无头结点也无根结点,S维指向列表中的某个节点指针,删除这个S结点的前续结点

来源:学生作业帮 编辑:搜搜做题作业网作业帮 分类:综合作业 时间:2024/08/15 20:12:55
在长度大于1的循环列表中,既无头结点也无根结点,S维指向列表中的某个节点指针,删除这个S结点的前续结点
只限明天下午之前!
在长度大于1的循环列表中,既无头结点也无根结点,S维指向列表中的某个节点指针,删除这个S结点的前续结点
#include
#include
#include
#include
struct m
{
int data;
struct m *next;
};
typedef struct m LB;
LB *creat(void);
void out(LB *);
void del(LB *);
void main()
{
LB *head=NULL;
if((head=creat())==NULL)
{
printf("链表建立失败~!\n");
exit(0);
}
del(head);
}
LB *creat(void)
{
LB *head=NULL,*p,*s;
char c[5];
int i=1,x;
system("CLS");
s=(LB *)malloc(sizeof(LB));
printf("请输入数据:");
gets(c);
s->data=atoi(c);
while(i)
{
if(head==NULL) head=s;
else p->next=s;
p=s;
printf("请输入数据(ok结束,输入后按回车继续输入):");
gets(c);
if(strcmp(c,"ok")==0) break;
s=(LB *)malloc(sizeof(LB));
s->data=atoi(c);
}
p->next=head;
return head;
}
void out(LB *head)
{
LB *p=head;
do
{
printf("%6d",p->data);
p=p->next;
}while(head-p);
printf("\n");
}
void del(LB *head)
{
LB *s,*p,*q; //p为s的前续,q为p的前续
int x,find=0;
printf("原数据:\n");
out(head);
printf("输入s所指的数据:");
scanf("%d",&x);
q=head;
p=q->next;
s=p->next;
do
{
if(s->data==x)
{
find=1;
break;
}
q=p;
p=s;
s=s->next;
}while(q!=head);
if(find==0)
{
printf("数据没找到!");
return;
}
printf("删除s前续数据前各结点数据:\n");
out(head);
if(p==head)
head=s;
q->next=p->next;
free(p);
printf("删除s前续数据后各结点数据:\n");
out(head);
}
在长度大于1的循环列表中,既无头结点也无根结点,S维指向列表中的某个节点指针,删除这个S结点的前续结点 有一个循环单链表的长度大于1,表中既无头结点也无头指针.S为指向链表中某结点的指针,写算法,删除结点S 已知在长度大于1的循环单链表中,s指向某一个结点,试编写算法删除s的直接前驱结点.急用 假设某个单向循环链表的长度大于1,且表中既无头结点也无头指针.已知s为指向链表中第s个元素,试编写算法 数据结构已知指针P指向双向链表中的一个结点(非首结点、非尾结点),则:(1)将结点S插入在P结点的直接 P是指向双向链表中某个结点的指针,写出删除P指向结点的前驱结点的语句序列 一个链表不知道头结点,有一个指针指向其中一个结点,请问如何删除这个指针指向的结点. 设指针p指向单链表中结点A,指针s指向被插入的结点X,则在结点A前面插入结点X是的操作序列为: 在循环双向链表中表头结点的左指针域指向()结点,最后一个结点的右... 已知带表头结点的单链表L,指针P指向L链表中的一个结点(非首、尾结点):删除P结点的语句序列是? 4.设指针变量p指向单链表中结点A,指针变量s指向被插入的结点B,则在结点A的后面插入结点B的操作序列为________ 在一个单链表中,若p所指结点不是最后结点,s指向已生成新结点,则在p之后插入s所指结点的正确操作是?