集合的并、交和差运算

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

集合的并、交和差运算

题目:编制一个演示集合的并、交和差运算的程序

班级:

姓名:

学号:

完成日期:

一、需求分析

1.本演示程序中,集合的元素限制在小写字母‘a’-‘z’之间。集合的大小不限制,集合的输入形式为一个以“回车符”为结束标志的字符串,串中字符顺序不限,且允许出现重复字符或非法字符,程序运用时自动过滤去,输出的运算结果中将不含重复字符和非法字符。

2.演示程序以用户和计算机对话的形式进行,即在计算机终端中显示提示信息之后,有用户自行选择下一步命令,相应输入数据和运算结果在其后显示。

3.程序的执行命令有:1)选择操作2)任意键清屏

4.数据测试

(1)Set1=”magazine”, Set2=’paper”,

Set1∪Set2=”aegimnprz”,Set1∩Set2=”ae”,Set1-Set2=”gimnz”;

(2) Set1=”012oper4a6tion89”,Set2=”error data”,

Set1∪Set2=”adeinoprt”,Set1∩Set2=”aeort”, Set1-Set2=”inp”.

二、概要设计

为实现上述功能,需要顺序表这个抽象数据类型。

1.顺序表抽象数据类型定义

ADT sqlist{

数据对象:D={ai|a i∈Elemset,i=1,2,3,…n,n>=0}

数据关系:R1={|ai-1,ai∈D,i=2, … n}

基本操作:

InitList(&l)

操作结果:构造一个空的顺序表l。

ListLength(l)

初始条件:顺序表l已存在。

操作结果:返回l中的元素个数。

ListInsert_Sq(&L, i, e)

初始条件:顺序表l已存在。

操作结果:在l中第i个元素前面插入元素e。

CreatSqList(&l, a[],n)

初始条件:顺序表l已存在。

操作结果:将数组a[n]每个元素赋给顺序表l。

GetElem(L, i, &e)

初始条件:顺序表l已存在。

操作结果:返回l中第i个元素的值

LocateElem_Sq(L, e, Status (*compare)())

初始条件:顺序表l已存在。

操作结果:依次遍历l中每个元素带入函数。

ListDelete(&L,i, &e)

初始条件:顺序表l已存在。

操作结果:删除顺序表中第i个元素。

Outputlist(&L)

初始条件:顺序表l已存在。

操作结果:输出顺序表的每个元素值。

}ADT sqlist

三、详细设计

// 程序的头文件

#include

#include

#include

#include

// 函数返回值

#define OK 1

#define ERROR 0

#define TRUE 1

#define FALSE 0

#define INFEASIBLE -1

#define OVERFLOW -2

#define NULL 0

#define LIST_INIT_SIZE 100 //顺序表的初始大小

#define LISTINCREMENT 10 //顺序表的递增大小

typedef int Status; //返回状态类型

typedef char ElemType; //元素类型

typedef struct{

ElemType *elem;

int length;

int listsize;

}SqList; //结点类型指针类型

Status InitList(SqList &l)

{

//初始化顺序表

l.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));

if(!l.elem) exit(OVERFLOW);

l.length=0;

l.listsize=LIST_INIT_SIZE;

return OK;

int ListLength(SqList l)

{

//求顺序表的长度

return(l.length);

}

Status ListInsert_Sq(SqList &L,int i, ElemType e)

{

//在顺序表L的第i个位置前插入元素e,i的合法值为1..L.length+1 if(i<1||i>L.length+1)

return ERROR;

if(L.length>=L.listsize)

{

ElemType*newbase=(ElemType

*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));

if(!newbase) exit(OVERFLOW);

L.elem=newbase;

L.listsize+=LISTINCREMENT;

}

ElemType *q=&L.elem[i-1], *p=&L.elem[L.length-1];

while(p>=q)

{

*(p+1)=*p; --p;

} //插入位置后的元素右移

*q=e;

++L.length;

return OK;

}

Status CreatSqList(SqList &l,ElemType a[],int n)

{

//创建顺序表

int len=ListLength(l);

for(int i=0;i

{

if(a[i]>='a'&&a[i]<='z')

ListInsert_Sq(l,++len,a[i]);

}

return OK;

}

Status GetElem(SqList L,int i,ElemType &e)

相关文档
最新文档