C语言:用链表实现集合的并和交
- 使用两个单链表表示两个集合;
- 可键盘输入集合的元素;
- 编写交算法和并算法
代码片段
建立链表
LinkList InitList()
{//建立链表LinkList L, p,q;int d;L = (LinkList)malloc(sizeof(LNode));p = L;scanf("%d", &d); //输入首个元素while (d != 0) //以0作为结束标志{p=p->next=(LinkList)malloc(sizeof(LNode));p->data = d;scanf("%d", &d);}p->next=NULL;q=L;L=L->next;free(q); //释放头结点return L; //返回链表首地址
}
求交算法
LinkList Intersection(LinkList a, LinkList b)
{//求交集LinkList LA, LB,q;LA =(LinkList)malloc(sizeof(LNode));LB = LA;while (a!=NULL){q=b;while (q!=NULL){if (q->data == a->data){LB=LB->next=(LinkList)malloc(sizeof(LNode));LB->data = a->data;break;}q = q->next;}a = a->next;}LB->next=NULL;LinkList p;p = LA;LA = LA->next;free(p);return LA;
}
求并算法
LinkList Unionset(LinkList a, LinkList b)
{//求并集LinkList L,q;L=b;while (a!=NULL){while (b){q=b;if(a->data==b->data)break;b=b->next;}if(b==NULL){q=q->next=(LinkList)malloc(sizeof(LNode));q->data=a->data;q->next=NULL;}b=L;a=a->next;}return L;
}
全部代码
#include <stdio.h>
#include <stdlib.h>
#define OK 1
typedef int Status;
typedef struct LNode
{int data;struct LNode *next;
}LNode,*LinkList;LinkList InitList()
{//建立链表LinkList L, p,q;int d;L = (LinkList)malloc(sizeof(LNode));p = L;scanf("%d", &d);while (d != 0){p=p->next=(LinkList)malloc(sizeof(LNode));p->data = d;scanf("%d", &d);}p->next=NULL;q=L;L=L->next;free(q);return L;
}LinkList Intersection(LinkList a, LinkList b)
{//求交集LinkList LA, LB,q;LA =(LinkList)malloc(sizeof(LNode));LB = LA;while (a!=NULL){q=b;while (q!=NULL){if (q->data == a->data){LB=LB->next=(LinkList)malloc(sizeof(LNode));LB->data = a->data;break;}q = q->next;}a = a->next;}LB->next=NULL;LinkList p;p = LA;LA = LA->next;free(p);return LA;
}LinkList Unionset(LinkList a, LinkList b)
{//求并集LinkList L,q;L=b;while (a!=NULL){while (b){q=b;if(a->data==b->data)break;b=b->next;}if(b==NULL){q=q->next=(LinkList)malloc(sizeof(LNode));q->data=a->data;q->next=NULL;}b=L;a=a->next;}return L;
}Status traverselist(LinkList a)
{//遍历链表while(a!=NULL){printf("%3d",a->data);a=a->next;}return OK;
}int main()
{LinkList A,B,INT,UNION;printf("请输入集合A的值(输入0结束):");A = InitList();printf("请输入集合B的值(输入0结束):");B = InitList();INT=Intersection(A,B);printf("\n所求交集为:");traverselist(INT);UNION=Unionset(A,B);printf("\n所求并集为:");traverselist(UNION);return 0;
}
C语言:用链表实现集合的并和交相关推荐
- (C语言)链表的实现集合的相关操作
原文链接:https://blog.csdn.net/kobe_jr/article/details/80543611 集合的特征:确定性/ 互异性/ 无序性. 常见的操作:1.查找集合中是否包含这个 ...
- 用c语言实现单链表的初始化,建表,查找,求长度,插入,删除等操作,【YTU+2430+C语言习题+链表建立+插入+删除+输(5)...
的打印.判断链表是否为空.计算链表长度.插入节点.删除节点.删除整个链表.(2) 线性表adt顺序存储实现中的创建.查找.插入和删除等基本操作及相关算法,线性表adt链式存储实现中单链表.循环链表和双 ...
- C语言打印链表的中间节点的算法(附完整源码)
C语言打印链表的中间节点的算法 C语言打印链表的中间节点的算法完整源码(定义,实现,main函数测试) C语言打印链表的中间节点的算法完整源码(定义,实现,main函数测试) #include < ...
- C语言通过链表指针删除链表节点的算法(附完整源码)
C语言通过链表指针删除链表节点的算法 C语言通过链表指针删除链表节点的算法完整源码(定义,实现,main函数测试) C语言通过链表指针删除链表节点的算法完整源码(定义,实现,main函数测试) #in ...
- C语言删除链表的算法(附完整源码)
C语言删除链表的算法 C语言删除链表的算法完整源码(定义,实现,main函数测试) C语言删除链表的算法完整源码(定义,实现,main函数测试) #include <iostream>st ...
- C语言实现链表(附完整源码)
C语言实现链表 链表 C语言实现链表完整源码 链表 链表是一种常见的基础数据结构,结构体指针在这里得到了充分的利用.链表可以动态的进行存储分配,也就是说,链表是一个功能极为强大的数组,他可以在节点中定 ...
- c语言在文本每一行末尾追加字符串,c语言在末尾添加 C语言 在链表尾部添加节点...
怎么用C语言在一个文件后面添加内容 怎么用C语言在一个文件后面添加内容 使用fopen函数打开文件,用fseek函数将文件位置调整到文件末尾,然后用fwrite函数写入数据即可.下面的示例代码,向1. ...
- 剑指offer之C语言实现链表(两种方式)
1 问题 用C语言实现链表 2 代码实现 #include <stdio.h> #include <stdlib.h>#define true 0 #define false ...
- c语言将链表写入二进制文件_通过逐级遍历将二进制树转换为单链表的C程序
c语言将链表写入二进制文件 Problem statement: Write a C program to convert a binary tree into a single linked lis ...
最新文章
- 码云上传代码添加标签_如何使用码云-百度经验
- 【ZJOI2013】k大数查询 BZOJ 3110
- oracle 逻辑回归,逻辑回归 (Logistic Regression):计算概率
- mysql怎么实现确认收货_Tp结合redis实现订单自动收货
- css3 点击爆炸下落
- 三种 SQL 执行语句
- 11 | 脑裂: 一次奇怪的数据丢失
- html中输出PHP的下拉列表,html中关于下拉列表select的图文代码详解
- SLS控制台内嵌操作指南
- MATLAB学习笔记——二维和三维绘图
- 我要发明计算机作文,我要发明机器人作文700字
- 《一页纸项目管理》读书笔记
- python aiml开发文档,带有Python的AIML文件
- 永中集成Office2007产品简介
- unity3——Humanoid与generic的区别
- 超级复制shadowcopy
- linux 卸载skype,在Debian 10操作系统上安装和卸载Skype的方法
- 搭建亿万级别短信服务发送平台
- 电话号码大全(常识版)
- 有没有便宜一点的网站服务器,有便宜一点的云服务器卖吗