数据结构课程设计_集合运算(完整).

  • 格式:doc
  • 大小:258.73 KB
  • 文档页数:24

下载文档原格式

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

电子与信息工程学院数据结构

实验报告

实验名称: 集合的运算

实验类型:设计(验证、设计、创新)

班级: 2013级电信三班

学号: 201307014327 姓名:陆杰

实验时间:2015 年 6 月16 日

指导教师:余先伦成绩:

目录

一课程设计目的和要求

二问题描述及分析

三算法思想和程序的实现概述

3.1 算法思想

3.2 程序的实现概述

四程序流程图

流程图

五程序的实现

5.1 主函数

5.2 链表的生成

5.3 集合的输出

5.4 并运算函数

5.5交运算函数

5.6 差函数

六运行结果分析

6.1 程序主界面

6.2整数集合并运算

6.3 整数集合交运算

6.4 整数集合差运算

6.5 字母集合并运算

6.6 字母集合交运算

6.7 字母集合差运算

6.8 字母和数据集合并运算

6.9 字母和数据集合交运算

6.10 字母和数据集合差运算

6.11 退出程序

七源代码

八总结

九参考文献

一课程设计目的和要求

目的:深入理解数据结构的基本理论,掌握数据存储结构的设计方法,掌握基于数据结构的各种操作的实现方法,训练对基础知识和基本方法的综合运用能力,增强对算法的理解能力,提高软件设计能力。在实践中培养独立分析问题和解决问题的作风和能力。

要求:熟练运用C++语言、基本数据结构和算法的基础知识,独立编制一个具有中等难度的、解决实际应用问题的应用程序。通过题意分析、选择数据结构、算法设计、编制程序、调试程序、软件测试、结果分析、撰写课程设计报告等环节完成软件设计的全过程,不断地完善程序以提高程序的性能。

二问题描述及分析

问题描述:

本课程设计中,集合的元素可以是字母[a,b,…z],也可以是整数[0,1,…9],集合的大小集合输入的形式为一个以“回车符”为结束标志的字符,允许出现重复字符或非法字符,程序应能自动滤去。输出的运算结果字符串中将不含重复字符或非法字符。

问题描述:

有两个集合A、B,要求它的交集、并集和差集C。用两个链表p、q存储集合A、B,用链表r存储集合C。描述该问题的存储结构,算法,并通过编写程序来实现。

问题分析:

1. 定义一个链表来存储集合元素;

2. 链表L包括数据域和指针域,数据域中存储集合元素,指针域中存储下一个集合元素的位置;

3. 创建若干个基本函数,通过函数调用对链表进行操作,实现集合的交、并、差运算。

三算法思想和程序的实现概述

3.1 算法思想

定义一个链表,链表有整型数据和一个指向链表的指针,程序包含定义一个新链表的函数,集合并函数,集合交函数,集合差函数。求两集合交集并集差集从两集合的头结点开始,比较两集合元素大小,进行对应的操作,直到读取到两集合的末尾元素。主程序先定义三个集合,创建集合A读入A数据,创建集合B读入B数据,然后输出集合A,B的元素,求出两集合并集并输出。求两集合的交集和差集的运算与求并集的步骤类似,只需按提示输入即可。

3.2 程序的实现概述

(1)输入的形式和输入值的范围:

输入是从键盘输入的,输入的内容为整数。

(2)输出的形式

从屏幕输出,显示用户输入集合的元素,并显示进行运算后的值。

(3)存储结构

在这次设计中开始我是采用链式存储结构,使得集合的算法定义十分简洁。(4)算法实现

定义链表,创建链表,输出链表。利用链表的来存储集合。利用三个函数分别实现课程要求程序实现的求并、求交和差三中运算。现分述如下:A)并运算函数

该函数采取了用新集合存储两集合并后的新集合,利用一个for循环来消除新集合中相同的元素,使其在屏幕上只显示一次。

B)交运算函数

该函数用于实现集合的并运算,利用for嵌套实现两链表中数据的比较,输出两链表中相同的元素。

C)差函数

该函数用于实现集合的差运算,利用链表中的数据域进行判断。输出不同于被减集合中不存在的元素。

四程序流程图

流程图:

开始

定义链表

创建链表

输入数据

求两集合的并集

输入数据

求两集合的交集

输入数据

求两集合的差集

五程序的实现

改程序的实现步骤是定义链表,创建链表,输出链表。利用链表的来存储集合。利用三个函数分别实现课程要求程序实现的求并、求交和差三中运算。现分述如下:

5.1 主函数

void bangzhu(){

printf("\n\t\t\t***********************************");

printf("\n\t\t\t* 求集合的交并差 *");

printf("\n\t\t\t*********************************\n");

}

void main() /* 主函数 */

{

struct set *p,*q,*r;

int m,n,node;

bangzhu();

for(;;)

{

do{

printf("请输入您要选择操作的代码:\n");

printf("1:求两集合的并A∪B\n");

printf("2:求两集合的交A∩B\n");

printf("3:求两集合的差A-B\n");

printf("0:退出该程序\n");

scanf("%d",&node);

} while(node<0||node>3);

if(node==0) exit(1);

printf("\t\t\t/*请输入集合A中元素的个数:*/\n");

scanf("%d",&m);

createlist_p(p,m); /* 调用链表生成函数生成A链表 */

printf("\t\t\t/*请输入集合B中元素的个数:*/\n");

scanf("%d",&n); /* 调用链表生成函数生成B链表 */

createlist_p(q,n);

printf("集合A中元素为:");

printlist_p(p); /* 调用集合输出函数输出集合A */

printf("集合B中元素为:");

printlist_p(q); /* 调用集合输出函数输出集合A */ while(node<0||node>3);

switch(node)

{

case 1: Addset( p,q,r);printf("A∪B:\n");printlist_p(r);break;