集合的并交差运算分析Word文档下载推荐.docx

上传人:b****6 文档编号:19439563 上传时间:2023-01-06 格式:DOCX 页数:22 大小:125.67KB
下载 相关 举报
集合的并交差运算分析Word文档下载推荐.docx_第1页
第1页 / 共22页
集合的并交差运算分析Word文档下载推荐.docx_第2页
第2页 / 共22页
集合的并交差运算分析Word文档下载推荐.docx_第3页
第3页 / 共22页
集合的并交差运算分析Word文档下载推荐.docx_第4页
第4页 / 共22页
集合的并交差运算分析Word文档下载推荐.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

集合的并交差运算分析Word文档下载推荐.docx

《集合的并交差运算分析Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《集合的并交差运算分析Word文档下载推荐.docx(22页珍藏版)》请在冰豆网上搜索。

集合的并交差运算分析Word文档下载推荐.docx

五、评分标准

1.根据平时上机考勤、表现和进度,教师将每天点名和检查

2.根据课程设计完成情况,必须有可运行的软件。

3.根据课程设计报告的质量,如有雷同,则所有雷同的所有人均判为不及格。

4.根据答辩的情况,应能够以清晰的思路和准确、简练的语言叙述自己的设计和回答教师的提问

六、建议参考资料

1.《数据结构(C语言版)》严蔚敏、吴伟民主编清华大学出版社2004.11

2.《数据结构课程设计案例精编(用C/C++描述)》,李建学等编著,清华大学出版社2007.2

3.《数据结构:

用面向对象方法与C++语言描述》,殷人昆主编, 

清华大学出版社2007

第1章需求分析

1、 

本演示程序中,集合的元素限定为小写字母字符[“a”…”z”]。

集合输入的形式为一个以“0“为结束标志的字符串,串中字符顺序不限。

2、演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“提示信息“之后,由用户在键盘上输入演示程序中规定的运算命令;

相应的输入数据和运算结果显示在其后。

3、 

程序执行的命令包括:

1) 

构造集合A;

2)构造在集合B;

3)删除集合A内的元素;

4)删除集合B内的元素;

5)

在集合A中插入元素;

6)在集合B中插入元素;

7)求AB集合的并集;

8)求AB集合的交集;

9)求AB及BA的差集

第2章总体设计

总体设计框架图,如图2.1所示:

图2.1总体设计框架

第3章抽象数据类型定义

定义格式如下:

3.1LinkList抽象数据类型的设计

ADTLinkList

基本操作:

InitList(LinkList*L)

构造一个空的线性表L

DestroyList(LinkList*L)

初始条件:

线性表L已存在

ListEmpty(LinkListL)

线性表L已存在。

操作结果:

若L为空表,则返回TRUE,否则返回FALSE

StatusListInsert(LinkListL,inti,ElemTypee)

在带头结点的单链线性表L中第i个位置之前插入元素e

ListPrint(LinkListL)

依次输出链表中的元素

3.2集合抽象数据类型的设计

typedefstructLNode

{

chardata;

structLNode*next;

}LNode,*LinkList;

第4章详细设计

4.1工程视图

图4.1工程视图

4.2类图视图

图4.2类图视图

4.3主要算法的详细设计

4.3.1插入算法的详细设计

voidListSort(LinkListL)

{

LinkListfirst;

/*为原链表剩下用于直接插入排序的节点头指针*/

LinkListt;

/*临时指针变量:

插入节点*/

LinkListp;

/*临时指针变量*/

LinkListq;

first=L->

next;

/*原链表剩下用于直接插入排序的节点链表*/

L->

next=NULL;

/*只含有一个节点的链表的有序链表。

*/

while(first!

=NULL)/*遍历剩下无序的链表*/

/*插入排序*/

for(t=first,q=L;

((q!

=NULL)&

&

(q->

data<

t->

data));

p=q,q=q->

next);

/*无序节点在有序链表中找插入的位置*/

/*退出for循环,就是找到了插入的位置*/

first=first->

/*无序链表中的节点离开,以便它插入到有序链表中。

if(q==L)L=t;

/*插在第一个节点之前*/

elsep->

next=t;

/*p是q的前驱*/

t->

next=q;

/*完成插入动作*/

}

4.3.2清除算法的详细设计

voidqingchu(LinkListLa)/*清除链表中相同的元素*/

chari,j;

LinkListp,q;

La->

p=La;

q=p->

while(q)

{i=p->

data;

j=q->

if(i==j)

{q=p->

/*删除并释放结点*/

p->

next=q->

free(q);

}

p=p->

q=p->

4.3.3求交集算法的详细设计

voidJiaoji(LinkListLa,LinkListLb,LinkListLc)

{/*求两集合的交集,将结果存入另一个链表中*/

chari,j;

LinkListp,q;

La->

Lb->

p=La;

q=Lb;

while(p&

q)

i=p->

if(i<

j)

{ListInsert(Lc,1,i);

q=q->

if(i>

q=q->

ListSort(Lc);

printf("

A∩B="

);

ListPrint(Lc);

4.3.4求并集算法的详细设计

voidbingji(LinkListLa,LinkListLb,LinkListLc)

{chari,j;

/*求两集合的并集*/

Lb->

q=Lb;

while(p&

p=p->

{ListInsert(Lc,1,j);

while(p){i=p->

ListInsert(Lc,1,i);

while(q){j=q->

ListInsert(Lc,1,j);

A∪B="

ListPrint(Lc);

4.3.5求差集算法的详细设计

voidchaji(LinkListLa,LinkListLb,LinkListLc)

{chari,j;

{i=p->

if(i<

{ListInsert(Lc,1,i);

if(i==j)

if(i>

while(p){i=p->

ListSort(Lc);

第5章测试

图5.1输入输出AB集合

图5.2对AB集合进行删除操作

图5.3对AB集合进行插入操作

图5.4对AB集合进行并交差操作

第6章总结

在本次数据结构课程设计的过程中,深刻的意识到对程序代码设计的难度,不过这更让我在这过程中受益匪浅,体味到计算机系的高大上。

这个课程具有很高的挑战性和耐性。

进行程序设计的时候注意模块的划分,从各个小模块开始进行设计。

设计的过程中,出现了很多错误,但是通过查找资料,反复对比内容的真伪性,找出了问题的所在,并最终解决了问题,这过程中结果并不显的那么重要,因为有艰辛的过程,所以才显出了结果的完美,它让我更加坚定了在这条路上的努力发展。

附录:

程序代码

#include<

string.h>

ctype.h>

malloc.h>

//malloc()等

limits.h>

//INT_MAX等

stdio.h>

//EOF(=^Z或F6),NULL

stdlib.h>

//atoi()

io.h>

//eof()

math.h>

//floor(),ceil(),abs()

process.h>

//exit()

iostream>

//cout,cin

//函数结果状态代码

#defineTRUE1

#defineFALSE0

#defineOK1

#defineERROR0

#defineINFEASIBLE-1

//#defineOVERFLOW-2因为在math.h中已定义OVERFLOW的值为3,故去掉此行

typedefintStatus;

//Status是函数的类型,其值是函数结果状态代码,如OK等

typedefintBoolean;

//Boolean是布尔类型,其值是TRUE或FALSE

typedefintElemType;

/*线性表的单链表存储结构*/

typedefstructLNode

chardata;

structLNode*next;

}LNode,*LinkList;

LinkListh;

/*带有头结点的单链表的基本操作*/

voidInitList(LinkList*L)

{/*操作结果:

构造一个空的线性表L*/

*L=(LinkList)malloc(sizeof(LNode));

/*产生头结点,并使L指向此头结点*/

if(!

*L)/*存储分配失败*/

exit(OVERFLOW);

(*L)->

next=NULL;

/*指针域为空*/

voidDestroyList(LinkList*L)

{/*初始条件:

销毁线性表L*/

while(*L)

q=(*L)->

free(*L);

*L=q;

voidClearList(LinkListL)/*不改变L*/

将L重置为空表*/

p=L->

/*p指向第一个结点*/

while(p)/*没到表尾*/

free(p);

p=q;

printf("

删除成功\n"

/*头结点指针域为空*/

StatusListEmpty(LinkListL)

若L为空表,则返回TRUE,否则返回FALSE*/

if(L->

next)/*非空*/

returnFALSE;

else

returnTRUE;

StatusListInsert(LinkListL,inti,ElemTypee)/*不改变L*/

{/*在带头结点的单链线性表L中第i个位置之前插入元素e*/

intj=0;

LinkListp=L,s;

j<

i-1)/*寻找第i-1个结点*/

j++;

p||j>

i-1)/*i小于1或者大于表长*/

returnERROR;

s=(LinkList)malloc(sizeof(structLNode));

/*生成新结点*/

s->

data=e;

/*插入L中*/

next=p->

p->

next=s;

returnOK;

StatusListDelete(LinkListL,inti,ElemType*e)/*不改变L*/

{/*在带头结点的单链线性表L中,删除第i个元素,并由e返回其值*/

LinkListp=L,q;

while(p->

next&

j<

i-1)/*寻找第i个结点,并令p指向其前岖*/

next||j>

i-1)/*删除位置不合理*/

*e=q->

free(q);

voidListPrint(LinkListL)/*依次输出链表中的元素*/

LinkListp=L->

p)

空集\n"

while(p)

%c"

p->

data);

p=p->

\n"

voidListSort(LinkListL)

voidzengtian(LinkListLa)/*向集合中添加元素*/

{chara;

请输入要增添的元素,加0结束\n"

scanf("

&

a);

while(a!

='

0'

if((a>

a'

a<

z'

)||(a>

A'

Z'

))

ListInsert(La,1,a);

}}getchar();

/*消除空格*/

ListSort(La);

ListPrint(La);

voidJiaoji(LinkListLa,LinkListLb,LinkListLc)

intmain()

charb;

charc;

LinkListL1,L2,L3,L4,L5,L6;

InitList(&

L1);

L2);

L3);

/*构建需要的链表*/

L4);

L5);

L6);

************************************\n"

欢迎使用集合交并差运算程序\n"

请输入A集合的元素,加0结束\n"

ListInsert(L1,1,a);

getchar();

ListSort(L1);

qingchu(L1);

ListPrint(L1);

请输入B集合的元素,加0结束\n"

b);

while(b!

if(b>

b<

||b>

ListInsert(L2,1,b);

ListSort(L2);

qingchu(L2);

ListPrint(L2);

请选择你要的操作\n"

1.删除A集合内元素\n"

2.删除B集合内元素\n"

3.添加元素至A集合\n"

4.添加元素至B集合\n"

5.A∩B\n"

6.A∪B\n"

7.A-B\n"

8.B-A\n"

0.结束\n"

do

{scanf("

c);

getchar();

switch(c)

case'

1'

:

ClearList(L1);

break;

2'

ClearList(L2);

3'

zengtian(L1);

4'

zengtian(L2);

5'

Jiaoji(L1,L2,L4);

6'

bingji(L1,L2,L3);

7'

chaji(L1,L2,L5);

8'

chaji(L2,L1,L6);

default:

欢迎使用\n"

while(c!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 商业计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1