早教吧作业答案频道 -->其他-->
以带头结点的单链表表示有序表,编写算法,从有序表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);
}
看了以带头结点的单链表表示有序表,...的网友还看了以下:
报表结构复制功能只完成()的复制A.报表数据B、报表结构C、报表数据和结构d、报表名称E报表结构和 2020-04-06 …
现有A、B、X、Y、Z五种短周期元素,原子序数逐渐增大.它们的性质或原子结构如下表:元素性质或原子 2020-04-08 …
用二分法插入排序方法进行排序,被排序的表(或序列)应采用的数据结构是________。A.单链表B. 2020-05-24 …
用二分法插入排序方法进行排序,被排序的表(或序列)应采用的数据结构是______。A.单链表B.数组 2020-05-24 …
A.主文件无序,索引表有序B.主文件有序,索引表无序C.主文件有序,索引表有序D.主文件无序,索引 2020-05-26 …
图的邻接表存储结构表头结点后面跟的邻接结点的排列先后顺序有要求吗?比方说结点A有三个邻接结点:BC 2020-06-08 …
/*请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果.注意:不得增行或删行,也 2020-06-27 …
关于数据结构的题1.若在线性表中采用二分查找法查找元素,该线性表应该().A.元素按值有序B.采用顺 2020-12-05 …
()不是vb提供的程序控制结构a.模块结构b.顺序结构c.重复结构d.循环结构上面错了。a.选择结构 2020-12-14 …
程序的基本结构有(),选择结构和循环结构程序的基本结构有(),选择结构和循环结构A逻辑结构B层次结构 2020-12-14 …