早教吧作业答案频道 -->其他-->
以带头结点的单链表表示有序表,编写算法,从有序表A中删除所有和有序表B中元素相同的结点
题目详情
以带头结点的单链表表示有序表, 编写算法,从有序表A中删除所有和有序表B中元素相同的结点
▼优质解答
答案和解析
#include
#include
typedef struct node
{
int data;
struct node *next;
}NODE;
NODE * creat(int n)
{
int i,d;
NODE *head,*p,*q;
head = NULL;
if(head == NULL)
{
printf("输入第1个结点:");
scanf("%d", &d);
head = (NODE*)malloc(sizeof(NODE));
head->data = d;
head->next = NULL;
}
p = head;
for(i=1; i {
printf("输入第%d个结点:",i+1);
scanf("%d",&d);
q = (NODE*)malloc(sizeof(NODE));
q->data = d;
q->next = NULL;
p->next = q;
p = q;
}
return head;
}
void output(NODE *head)
{
NODE *p;
p = head;
while(p!=NULL)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
NODE *del(NODE *heada, NODE*headb)
{
NODE *pa,*pb,*temp,*qa;
pa = heada;
qa = heada;
pb = headb;
while(pa!=NULL)
{
while(pb!=NULL)
{
if(pa->data == pb->data)
{
if(pa == heada)
{
temp = pa;
heada = heada->next;
pa = heada;
qa = pa;
free(temp);
}
else
{
temp = pa;
qa->next = pa->next;
pa = pa->next;
free(temp);
}
}
if(pa!=NULL&&(pa->data < pb->data))
{
qa = pa;
pa = pa->next;
break;
}
pb = pb->next;
}
}
return heada;
}
void main()
{
int n;
NODE *heada,*headb;
printf("输入链表a结点个数:");
scanf("%d",&n);
heada = creat(n);
printf("链表a:");
output(heada);
printf("输入链表b结点个数:");
scanf("%d",&n);
headb = creat(n);
printf("链表b:");
output(headb);
heada = del(heada,headb);
output(heada);
}
#include
typedef struct node
{
int data;
struct node *next;
}NODE;
NODE * creat(int n)
{
int i,d;
NODE *head,*p,*q;
head = NULL;
if(head == NULL)
{
printf("输入第1个结点:");
scanf("%d", &d);
head = (NODE*)malloc(sizeof(NODE));
head->data = d;
head->next = NULL;
}
p = head;
for(i=1; i
printf("输入第%d个结点:",i+1);
scanf("%d",&d);
q = (NODE*)malloc(sizeof(NODE));
q->data = d;
q->next = NULL;
p->next = q;
p = q;
}
return head;
}
void output(NODE *head)
{
NODE *p;
p = head;
while(p!=NULL)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
NODE *del(NODE *heada, NODE*headb)
{
NODE *pa,*pb,*temp,*qa;
pa = heada;
qa = heada;
pb = headb;
while(pa!=NULL)
{
while(pb!=NULL)
{
if(pa->data == pb->data)
{
if(pa == heada)
{
temp = pa;
heada = heada->next;
pa = heada;
qa = pa;
free(temp);
}
else
{
temp = pa;
qa->next = pa->next;
pa = pa->next;
free(temp);
}
}
if(pa!=NULL&&(pa->data < pb->data))
{
qa = pa;
pa = pa->next;
break;
}
pb = pb->next;
}
}
return heada;
}
void main()
{
int n;
NODE *heada,*headb;
printf("输入链表a结点个数:");
scanf("%d",&n);
heada = creat(n);
printf("链表a:");
output(heada);
printf("输入链表b结点个数:");
scanf("%d",&n);
headb = creat(n);
printf("链表b:");
output(headb);
heada = del(heada,headb);
output(heada);
}
看了以带头结点的单链表表示有序表,...的网友还看了以下:
邻接表加边的算法如何写?在一个带权的有向图中,采用邻接表存储结构,采用出边表,即某个顶点的邻接边表 2020-06-17 …
数据结构1.设一个链表最常用的操作是在末尾插入结点和删除尾结点,则选用()最节省时间。A.单链表B 2020-06-18 …
下表是一个健康人的血浆、原尿、尿液的三个样品中主要物质含量表(单位:克∕100毫升),如图为一个肾 2020-06-22 …
如表是一个健康人的血浆、原尿、尿液的三个样品中主要物质含量表(单位:克∕100毫升),如图为一个肾 2020-06-22 …
(2013•枣庄)下表是一个健康人的血浆、原尿、尿液的三个样品中主要物质含量表(单位:克∕100毫 2020-06-22 …
如表是一个健康人的血浆、原尿、尿液的三个样品中主要物质含量表(单位:克/100毫升),如图为一个肾 2020-06-22 …
求新概念英语第一至四册单词表求新概念英语一至四册单词表,要带音标的完整版,跳课的不要,一般单词表都是 2020-11-17 …
接地的金属板右侧有固定的点电荷+Q,由于静电感应,金属板右侧表面带负电,左侧表面带正电;现在将金属板 2020-11-21 …
如图所示,把一个带正电的小球放入原来不带电的金属空腔球壳内并与内壁接触,其结果是()A.球壳的内外表 2020-11-29 …
链表数据结构问题求解!1.在下列存储结构中,具备随机存取特性的是()A.顺序表B.单链表C.单循环链 2021-01-04 …