数据结构课程设计 |
您所在的位置:网站首页 › 集合的基本运算课堂小结怎么写的 › 数据结构课程设计 |
集合的交、并和差运算 数据结构课程设计任务书 学生姓名: 专业班级: 软件工程 指导教师: 工作单位: 题 目: 集合的并、交和差运算 基础要求: 掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力。初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能。3、提高综合运用所学的理论知识和方法独立分析和解决问题的能力。 主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求) (1)任务内容 编制一个能演示执行集合的并、交和差运算的程序。 (2)完成要求 对系统进行功能模块分析、控制模块分析;系统设计要能完成题目所要求的功能;编程简练,可用,尽可能的使系统的功能更加完善和全面;说明书、流程图要清楚;提高学生的论文写作能力;特别要求自己独立完成;在基本要求达到后,可进行创新设计,如改善算法性能、友好的人机界面。 (3)撰写课程设计报告 报告格式按附件要求打印与写课程设计报告;论文包括目录、正文、小结、参考文献、附录等;课程设计论文装订按学校的统一要求完成。 时间安排: 内容 天数 地点 构思及收集资料 1 图书馆 编码与调试 3 图书馆 撰写论文 1 图书馆 指导教师签名: 年 月 日 完整资料一键获取私信我: 问题分析和任务定义 1.1 问题的描述 编制一个能演示执行集合的并、交和差运算的程序。 1.2 基本要求 (1) 集合的元素限定为小写字母字符 [‘a’..’z’] ,集合输入的形式为 一个以“回车符“为结束标志的字符串,串中字符顺序不限。 (2) 演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“提 示信息“之后,由用户在键盘上输入演示程序中规定的运算命令﹔相应的输入数 据和运算结果显示在其后。 1.3 程序执行的命令包括: (1)构造集合1; (2)构造集合2; (3)求并集; (4)求交集; (5)求差集; 1.4 测试数据 (1)Set1="magazine",Set2="paper", Set1∪Set2="aegimnprz",Setl ∩Set2="ae",Set1-Set2="gimnz"。 (2)Set1= " 012oper4a6tion89",Set2="error data", Set1∪Set2="adeinoprt",Setl ∩Set2="aeort",Set1-Set2="inp"。 1.5 实现提示 以有序链表表示集合。 数据结构的选择和概要设计为实现上述程序功能,应该以有序链表表示集合,因此需要两个抽象数据类型:有序表和集合。 2.1 有序表的抽象数据类型定义为: ADT OrderedList { 数据对象:D={ai|ai CharSet,i=1,2,3,...n} 数据关系:R1={|ai-1,ai D,ai-1 ElemType data; struct LNode *next; }LNode, *LinkList; //初始化操作 Status InitList(LinkList &L) { //构造一个空的单链表L L=new LNode; L->next=NULL; return OK; } //存储输入的字符串 Status cun_chu(ElemType *ch,int &length) { length=0; ch[length]=getchar(); length=1; ch[1000]; while(true) { ch[length++]=getchar(); if(ch[length -1 ]=='\n') { break; } } return OK; } //存储集合 Status Creat(LinkList &L) { //初始化链表 InitList(L); L = new LNode; L->next=NULL; LinkList r = L; int length; ElemType ch[1000]; cun_chu(ch,length); for(int i=0;i continue; } LinkList p = new LNode; p->data = ch[i]; r->next = p; r=p; } r->next = NULL; return OK; } //返回一个集合的长度 Status Length(LinkList L) { int i=0; while(L->next != NULL) //下一个结点不为空 { i++; L=L->next; } return i; }
//对一个字母集合进行从小到大的排序 Status Sort(LinkList &L) { LinkList p,q,n; int l=Length(L); if(l flag=0; p=L; q=p->next; //若从头结点开始,指向第一个有data值的结点 n=q->next; //指向与其相邻的下一个结点 for(int j=0;j flag=1; p->next=n; q->next=n->next; n->next=q; q=p->next; n=q->next; } p=q; q=n; n=n->next; } } return OK; } //输出集合 Status bianli(LinkList L) { if(L->next == NULL) { cout coutnext; } } cout InitList(C); //初始化集合C LinkList i = A->next; //指向集合A的第一个元素 LinkList j = B->next; //指向集合B的第一个元素 LinkList k = C; while(i!=NULL && j!=NULL) //两个集合都没有遍历完 { if(i->data < j->data) //集合A的元素小于B { if(k->data != i->data) //集合A的该元素与并集中的上一个存入的元素不同,执行存入 { k->next=i; k=i; } i=i->next; } else if(i->data > j->data) //集合A的元素大于B { if(k->data != j->data) //集合A的该元素与并集中的上一个存入的元素不同,执行存入 { k->next=i; k=j; } j=j->next; } else //集合A的元素等于B { if(k->data != j->data) //集合A的该元素与并集中的上一个存入的元素不同,执行存入 { k->next=j; k=j; } i=i->next; j=j->next; } } if(j!=NULL) //集合A已经遍历结束,集合B没有,将集合B中剩下所有元素插入,并且是不重复插入 { int m; if(k->data != j->data) //确保并集中不插入重复元素 { k->next=j; m=1; } j=j->next; if(j!=NULL && m==1) { k=k->next; m=0; } } if(i!=NULL) //集合B已经遍历结束,集合A没有,将集合A中剩下所有元素插入,并且是不重复插入 { int n; if(k->data != i->data) //确保并集中不插入重复元素 { k->next=i; n=1; } i=i->next; if(i!=NULL) { k=k->next; n=0; } } if(k->next != NULL) { k=k->next; } k->next = NULL; return OK; } //集合的交运算 Status InterSet(LinkList A, LinkList B, LinkList C) { InitList(C); LinkList i = A->next; //指向集合A的第一个元素 LinkList j = B->next; //指向集合B的第一个元素 LinkList k = C; while(i != NULL && j!=NULL) { if(i->data < j->data) { i=i->next; } else if(i->data > j->data) { j=j->next; } else { if(k->data != i->data) { k->next = i; k=i; } i=i->next; j=j->next; } } k->next = NULL; return OK; }
//集合的差运算 Status DifferentSet(LinkList A,LinkList B,LinkList C) { InitList(C); LinkList i = A->next; //指向集合A的第一个元素 LinkList j = B->next; //指向集合B的第一个元素 LinkList k = C; while(i != NULL && j!=NULL) //如果集合A的元素比B的小,说明该元素之后也不会出现在B集合 { if(i->data < j->data) { if(k->data != i->data) { k->next=i; k=i; } i=i->next; } else if(i->data > j->data) { j=j->next; } else //避免集合中重复元素的影响 { int n=0; j=j->next; if(i->next ==NULL) { i=i->next; } while(i!=NULL && i->next != NULL) { if(i->data == i->next->data) { i=i->next->next; n=1; } else { if(n==0) { i=i->next; } break; } } } } if(i) { k->next = i; //如果A有剩余,直接加进去 } else k->next =NULL; return OK; } //菜单界面 Status showMenu() { cout case 1: //集合的并集 cout |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |