我是靠谱客的博主 帅气故事,最近开发中收集的这篇文章主要介绍c语言求两个有序表合成差集代码,两个有序链表求差集,合并为一个有序链表...,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

小白今天刚入门数据结构,正在学习《数据结构高分笔记》,其中第35页仿真题目(2)完成情况如下,如有错误,不吝赐教。

题目要求:已知递增有序的单链表A,B,元素个数分别m,n,分别存储一个集合,请设计算法,求出A与B的差集(我这里定义的差集是指除共同元素以外的元素),将结果保存在A表中,保持元素递增有序。

测试结果如下:

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

由于程序比较基础,不处理内存分配失败情况,没有对错误输入情况进行筛查,默认输入数据均递增有序且合规。

#include

#include

#define m 3

#define n 4

typedef struct Lnode

{

int data;

struct Lnode *next;

}Lnode,*Linklist;//节点类型和指向结构的指针类型

Linklist Creatnode(int temp);

void Creatlist(Linklist L,int x);//x为数据长度

void initlist(Linklist *L);

void printlist(Linklist L,int x);//x为数据长度

void printlist2(Linklist L);

void AchaB(Linklist L1,Linklist L2);

void jointprint(Linklist L1,Linklist L2,int x,int y);//x,y为数据长度

void main ()

{

/*初始化*/

Linklist L1;

Linklist L2;

initlist(&L1);

L1->next=NULL;//初始状态头结点指针指向NULL

initlist(&L2);

L2->next=NULL;//初始状态头结点指针指向NULL

Creatlist(L1,n);

Creatlist(L2,m);

jointprint(L1,L2,n,m);

AchaB(L1,L2);

printf("n");

}

Linklist Creatnode(int temp)//单节点创建

{

Linklist p;

p=(Linklist)malloc(sizeof(Lnode));

p->data=temp;

p->next=NULL;//新创建的节点指向空

return p;

}

void jointprint(Linklist L1,Linklist L2,int x,int y)//数据输入结果打印

{

printf("构造链表如下:n");

printlist(L1,x);

printlist(L2,y);

printf("n");

}

void initlist(Linklist *L)//内存分配

{

*L=(Linklist)malloc(sizeof(Lnode));//等同于**L=返回的指针*p

}

void Creatlist(Linklist L,int x)//链表创建

{

/*创建表*/

Linklist f;

f=L;

printf("现在构造第链表n");

int temp;

for (int i=0;i

{

printf("请输入第%d个节点值(整数)n",i+1);

scanf("%d",&temp);

f->next=Creatnode(temp);//这一步完成了节点的内存分配和值的写入

f=f->next;

}

/*创建表*/

//printlist(L);

}

void printlist(Linklist L,int x)//打印单表

{

Linklist print;

print=L->next;

for(int i=0;i

{

printf(" %d ",print->data);

print=print->next;

}

}

void printlist2(Linklist L)//操作结果打印

{

Linklist print;

print=L->next;

for(int i=0;i

{

printf(" %d ",print->data);

print=print->next;

if (print==NULL)break;

}

printf("n");

}

void AchaB(Linklist L1,Linklist L2)//求差集

{

Linklist p1;

Linklist p2;

Linklist r2;

Linklist r1;

Linklist del;

p1=L1->next;

p2=L2->next;

r2=L2;

r1=L1;

while(p1!=NULL&&p2!=NULL)

{

if(p1->data>p2->data)

{

r2=r2->next;

p2=p2->next;

}

else if (p1->datadata)

{

p1=p1->next;

r1=r1->next;

}

else

{

del=p2;

p2=p2->next;

r2->next=p2;

free (del);

del=p1;

p1=p1->next;

r1->next=p1;

free(del);

if (p1==NULL||p2==NULL)break;

}

}

//至此,差集求完

//下面两个有序链表头插

p1=L1->next;

p2=L2->next;

r2=L2;

r1=L1;

Linklist temp;

while (p1!=NULL&&p2!=NULL)

{

if (p1->data>p2->data)

{

temp=p2;

p2=p2->next;

r2->next=p2;

temp->next=p1;

r1->next=temp;

r1=r1->next;

}

else if (p1->datadata)

{

p1=p1->next;

r1=r1->next;

}

}

if (p1==NULL)

r1->next=L2->next;

printf("两个链表的差集链表构造完毕,结果如下:n");

printlist2(L1);

}

最后

以上就是帅气故事为你收集整理的c语言求两个有序表合成差集代码,两个有序链表求差集,合并为一个有序链表...的全部内容,希望文章能够帮你解决c语言求两个有序表合成差集代码,两个有序链表求差集,合并为一个有序链表...所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部