以顺序表表示集合,编制一个能演示执行集合的并、交、差、补运算的程序。

(1) 集合的元素限定为小写字母字符(‘a’…’z’),集合输入的形式为一个以“回车符”为结束标志的字符串,串中字符顺序不限,且允许出现重复字符或非法字符,程序应能自动滤去。输出的运算结果字符串中将不含重复字符和非法字符。

(2) 演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“提示信息”后,由用户在键盘上输入演示程序中规定的运算命令,相应的输入数据(滤去输入中的非法字符)和运算结果显示在其后。

(3) 程序执行的命令应包括:① 构造集合1;② 构造集合2;③ 求并集;④求补集;⑤退出

// 实验——集合的交差并补
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#define MAXSIZE 30
#define ListIncrease 20
#define ListInifsize 100
typedef char ElemType;
typedef void status;
typedef struct list {ElemType *data;      //存储空间基址int Length;          //当前长度int size;            //当前尺寸
} List;status create(List *la){if(!la->data){printf("分配失败");exit(0);}List a;a.data=(ElemType *) malloc(sizeof (ElemType)*ListInifsize);a.size=ListInifsize;scanf("%s",a.data);printf("输入完成\n");int i = 0;while (a.data[i] != '\0') {if (a.data[i] >= 'a' &&a.data[i] <= 'z') {char temp = a.data[i];int flag = 1;if (la->Length == 0) {la->data[la->Length] = temp;la->Length++;} else {for (int z = 0; z < la->Length; z++) {if (la->data[z] == temp) {flag = 0;break;}}   //判断元素是否重复if (flag == 1) {la->data[la->Length] = temp;la->Length++;}}}i++;}
}status insert(List* lc,int i,char e){char *newBase;newBase=(char *) malloc(sizeof (char)*ListInifsize);int n=0;if(i<0||i>lc->Length+1)          //判断插入角标符合要求exit(0);if(lc->Length>=lc->size){                               //重新开辟空间newBase=(char *) realloc(lc->data,(lc->size+ListIncrease)*sizeof(ElemType));if(!newBase) exit(0);lc->data=newBase;lc->size+=ListIncrease;}for(int j=0;j<lc->Length;j++){if(lc->data[j]==e)n++;}if(n==0){lc->data[i-1] = e;++lc->Length;}
}status jiao(List la, List lb,List *lc) {    //交集int lai;int lbi;int cou = 0;for (lai = 0; lai < la.Length; lai++) {for (lbi = 0; lbi < lb.Length; lbi++) {if (la.data[lai] == lb.data[lbi]) {insert(lc,cou+1,la.data[lai]);cou++;}}}
}status bing(List la, List lb,List *lc) {   //并集int flag;int cou = lb.Length;lc->Length = 0;int i, j;strcpy(lc->data, lb.data);lc->Length = lb.Length;for (i = 0; i < la.Length; i++) {flag = 1;for (j = 0; j < lb.Length; j++) {if (la.data[i] == lb.data[j]) {flag = 0;}}if (flag == 1) {insert(lc,cou+1,la.data[i]);cou++;}}lc->data[cou]='\0';
}status cha(List la, List *lc) {     //差集int i=0, j=0, flag=1;int cout = 0;List listc;listc.Length = 0;listc.data=(char *) malloc(sizeof (char)*ListInifsize);for (i = 0; i < la.Length; i++) {for (j = 0; j < lc->Length; j++) {if (la.data[i] == lc->data[j]) { flag = 0; break;}}if (flag) {listc.data[cout] = la.data[i];listc.Length++;cout++;}flag=1;}listc.data[listc.Length]='\0';printf("差集Lc为:");puts(listc.data);printf("差集Lc长度为: %d\n", listc.Length);
}status bu(List la, List *lc) {      //补集int i=0, j=0, flag=1;int cout2 = 0;List listb;listb.Length = 0;listb.data=(char *) malloc(sizeof (char)*ListInifsize);for (i = 0; i < lc->Length; i++) {for (j = 0; j < la.Length; j++) {if (lc->data[i] == la.data[j]) { flag = 0; break;}}if (flag) {listb.data[cout2] = lc->data[i];listb.Length++;cout2++;}flag=1;}listb.data[listb.Length]='\0';printf("补集的元素为:%s\n", listb.data);printf("补集长度为%d\n", listb.Length);
}void main() {int temp=7;List La, Lb;La.data=(ElemType *) malloc(sizeof (ElemType)*ListInifsize);La.Length=0;La.size=ListInifsize;Lb.data=(ElemType *) malloc(sizeof (ElemType)*ListInifsize);Lb.Length=0;Lb.size=ListInifsize;printf("现在开始输入表La数值\n");create(&La);printf("表La的数据为:%s\n", La.data);printf("现在开始输入表Lb数值\n");create(&Lb);printf("表Lb的数据为:%s\n", Lb.data);while(1) {printf("————————*****欢迎,请选择\n");printf("—————***1.求交集\n");printf("—————***2.求并集\n");printf("—————***3.求差集(A-B)\n");printf("—————***4.求差集(B-A)\n");printf("—————***5.求La补集\n");printf("—————***6.求Lb补集\n");printf("—————***7.退出\n");printf("请输入你要执行的操作:\n");scanf("%d", &temp);switch (temp) {case 1: {List *Lc1 ;Lc1=(List *) malloc(sizeof (List));Lc1->Length=0;Lc1->data=(ElemType *) malloc(sizeof (ElemType)*ListInifsize);Lc1->size=ListInifsize;jiao(La,Lb,Lc1);printf("交集Lc的元素为:%s\n", Lc1->data);printf("Lc长度为%d\n", Lc1->Length);break;}case 2: {List *lc2;lc2=(List *) malloc(sizeof (List));lc2->Length=0;lc2->data=(ElemType *) malloc(sizeof (ElemType)*ListInifsize);lc2->size=ListInifsize;bing(La, Lb,lc2);printf("并集Lc的元素为:%s\n", lc2->data);printf("Lc长度为%d\n", lc2->Length);break;}case 3: {List *ld;ld=(List *) malloc(sizeof (List));ld->Length=0;ld->data=(ElemType *) malloc(sizeof (ElemType)*ListInifsize);ld->size=ListInifsize;jiao(La,Lb,ld);cha(La,ld);break;}case 4: {List *lsd;lsd=(List *) malloc(sizeof (List));lsd->Length=0;lsd->data=(ElemType *) malloc(sizeof (ElemType)*ListInifsize);lsd->size=ListInifsize;jiao(La,Lb,lsd);cha(Lb,lsd);break;}case 5: {List *Lc5 ;Lc5=(List *) malloc(sizeof (List));Lc5->Length=0;Lc5->data=(ElemType *) malloc(sizeof (ElemType)*ListInifsize);Lc5->size=ListInifsize;bing(La, Lb,Lc5);bu(La,Lc5);break;}case 6:{List *Lc6 ;Lc6=(List *) malloc(sizeof (List));Lc6->Length=0;Lc6->data=(ElemType *) malloc(sizeof (ElemType)*ListInifsize);Lc6->size=ListInifsize;bing(La, Lb,Lc6);bu(Lb,Lc6);break;}case 7: {printf("程序结束!");exit(0);}}}
}


数据结构:线性表的顺序存储结构,实现集合的交差并补相关推荐

  1. 数据结构-线性表的顺序存储结构逆置

    1.主要的操作是:对顺序存储的线性表进行逆置操作. 2.空表为0时,或超过100个元素时,不执行程序. 自学c语言,有任何问题,还望大佬们指教. 以下是代码: #include <stdio.h ...

  2. 数据结构——线性表的顺序存储结构

    目录 定义 线性表的顺序存储的结构代码 所应具备的功能 1.初始化 2.插入新元素 (1)在开头插入新元素 (2)在结尾插入新元素 (3)在任意处插入新元素 2.删除元素 (1)开头删除 (2)尾部删 ...

  3. 数据结构和算法:(3)3.1线性表的顺序存储结构

    -----------------------1.线性表基础操作------------------------ 线性表:(List)由零个或多个数据元素组成的有限序列. 首先他是一个序列,元素之间是 ...

  4. 数据结构之线性表之顺序存储结构(3)

    1 前言 经过前两张的理论基础,我相信大家都能简单的明白了数据结构和算法一些常用的概念了,从今天开始我们开始学习数据结构中线性表,一起叩响数据结构的大门. 2 详述 线性表(List):零个或者多个数 ...

  5. 第三章 数据结构 线性表的逻辑结构 和 线性表的顺序存储结构,链式存储结构

    文章目录 线性表的特点 引用 集合与线性表的区别在于元素是否可以重复. 线性表的顺序存储结构 顺序存储的优缺点: 一维数组来表示顺序表的数据存储区域. 线性表的链式存储结构 链式存储的优缺点 线性表的 ...

  6. 《数据结构》c语言版学习笔记——线性表的顺序存储结构

    线性表的顺序存储结构 第一章 线性表的顺序存储结构 文章目录 线性表的顺序存储结构 前言 一.顺序存储结构的建立 1.条件 2.代码 二.顺序存储结构的获得元素 1.条件 2.代码 三.顺序存储结构的 ...

  7. 数据结构开发(3):线性表的顺序存储结构

    0.目录 1.线性表的本质和操作 2.线性表的顺序存储结构 3.顺序存储结构的抽象实现和具体实现 3.1 SeqList 3.2 StaticList 和 DynamicList 4.顺序存储线性表的 ...

  8. 【数据结构】之线性表(顺序存储结构)

    博主声明: 转载请在开头附加本文链接及作者信息,并标记为转载.本文由博主 威威喵 原创,请多支持与指教. 本文首发于此   博主:威威喵  |  博客主页:https://blog.csdn.net/ ...

  9. 【数据结构】线性表的顺序存储结构及实现——C语言版

    文章目录 顺序表 1. 顺序表的存储结构定义 2. 顺序表的实现 2.1 初始化顺序表 2.2 建立顺序表 2.3 销毁顺序表 2.4 判空操作 2.5 求顺序表的长度 2.6 遍历操作 2.7 按值 ...

  10. 数据结构代码--线性表的顺序存储结构

    /*** 线性表的顺序存储结构*/ public class SqList {int[] data;int length;public SqList(int leng, int length) {th ...

最新文章

  1. android 动态录音权限,Android如何判断手机是否有录音权限的工具类
  2. Heap与Stack的区别- -
  3. 用Java中的抽象类扩展抽象类
  4. 云尚制片管理系统_电影制片厂的未来
  5. Discuz! 出现“您当前的访问请求当中含有非法字符“解决方法
  6. php函数查询sprintf,PHPsprintf函数用例解析
  7. 数据结构:实验一 线性表的基本功能实现
  8. linux下创造进程指令,Linux系统创建一个新进程(下)
  9. 前端工程化:vue代码检查工具vetur
  10. 无人机底层开发-MPU6050六轴传感器+磁力计初始化
  11. fastnest怎么一键排版_文字一键排版工具,排版助手(gidot typesetter)使用攻略
  12. 怎么压缩PPT大小?PPT太大了怎么压缩?
  13. 未来五年,保险平权的最大机会来了
  14. 上万网友自发利用“蔚蓝地图”报污染源
  15. Android MediaPlayer整体架构源码分析 -【MediaCodec编解码器插件模块化注册和创建处理流程】【Part 6】
  16. 谈谈Android中的persistent属性
  17. c++11并发与多线程
  18. 语文网站第十九周推荐博客
  19. 阿卡迪亚大学计算机专业好考吗,普通高中学生如何考取阿卡迪亚大学?
  20. IBM X3650服务器使用说明

热门文章

  1. Atitit MP3元数据抽取结果 音乐信息检索 取出了重复和英文的数据 一共368个。。 /bookmarksHtmlEverythingIndexPrj/src/apkg/songlistC
  2. vue echarts饼状图百分比展示
  3. WGS84转GCj02
  4. log怎么用计算机,手机计算器log怎么用
  5. TOP100summit:【分享实录-猫眼电影】业务纵横捭阖背后的技术拆分与融合
  6. xcode报ignoring file xxx missing required architecture x86_64 in file错误
  7. 在Excel中快速选择数据
  8. WPA之一次第三方软件导致的白屏问题分析
  9. Keil (MDK)中变量定义位置
  10. 利用python脚本根据DOI号自动查询参考文献信息