logo资料库

集合的并、交和差运算的程序课程设计报告.doc

第1页 / 共18页
第2页 / 共18页
第3页 / 共18页
第4页 / 共18页
第5页 / 共18页
第6页 / 共18页
第7页 / 共18页
第8页 / 共18页
资料共18页,剩余部分请下载后查看
参考文献
附录1—小组成员分工情况
总 结
数据结构课程设计(报告) 数据结构课程设计 集合的并、交和差运算的程序 电气与计算机学院 2017 年 6 月
数据结构课程设计(报告) 数据结构课程设计 集合的并、交和差运算的程序 小组成员: 齐德涵 指导教师:穆全伶 专 业:网络工程 所在单位:电气与计算机学院
数据结构课程设计(报告) 目 录 一、题目的内容及要求 ------------------------------------------------1 二、需求分析 ------------------------------------------------------------1 三、概要设计 ------------------------------------------------------------1 四、详细设计 ------------------------------------------------------------2 五、源代码 (见附录 2)----------------------------------------------3 六、运行结果及分析 ---------------------------------------------------6 七、参考文献 ------------------------------------------------------------7 八、附录 1 -----------------------------------------------------------------8 九、附录 2 -----------------------------------------------------------------9 十、总结 ------------------------------------------------------------------14
数据结构课程设计(报告) 一、题目的内容及要求 编制一个能演示执行集合的并、交和差运算的程序。 (1)集合的元素限定为小写字母符[′a′„.′z ′],集合的大小 n<27。 ⑵集合输入的形式为一个以"回车符"为结束标志的字符串,串中字符 顺序不限,且允许出现重复字符或非法字符,程序应能自动滤去。 ⑶输出的运算结果字符串中将不含重复字符或非法字符。 ⑷演示程序以用户和计算机的对话方式执行。 二、需求分析 该程序可以实现输入两组集合,且限定仅小写字母能插入到集合中。 用户可能根据需求实现输入两个长度自定的集合,通过按键输入求两 集合的交集,并集,差集运算,并显示出结果。 三、概要设计(包括选择什么数据结构?数据结构采用哪种存储方式? 选择的原因?设计哪些操作?这些操作之间的调用关系等等) 1.数据结构的选择 该程序选用单链表进行编写,链式存储结构是用一组任意的存储单元 来存放线性表中的数据元素。 数据域 指针域 数据域:data(元素本身) 指针域:next(直接后继的存储位置) 2.选择的原因 单链表查取元素的时间复杂度小,一般只为 O(n)和 while 的使用频 - 1 -
数据结构课程设计(报告) 度有关。使用单链表每个元素都有结点构成,属于线性结构而且单链 表可以扩充。采用动态存储,方便删减和操作。 3.设计的操作及操作间的关系 该程序采用用户与控制台对话的方式,通过按键实现对两个集合交、 并、差以及退出当前程序的运算。程序开始先定义并置空三个链表, 调用输入函数在前两个链表中分别输入两个集合的元素,采用 switch 分支语句,以按键控制操作选择要执行的操作,分别调用不同的函数 方法,将结果输入到第三个链表中,通过输出函数输出结果。 四、详细设计(包括数据结构的类型定义,每个操作的算法描述) 结构体创建: typedef struct node{ char data; //本结点的值 node* next; //下一个结点 }lnode,*linklist; 首先定义并置空三个链表,根据用户输入两个集合的数据。 lnode *A,*B,*C; void input(linklist l) //输入 void output(linklist l) //输出 lnode *zhikong() //置空 - 2 -
数据结构课程设计(报告) 在 switch 分支语句中根据按键调用并、交、差、退出程序函数 void jiaoji(linklist A,linklist B,linklist C) //交集 void bingji(linklist A,linklist B,linklist C) //并集 void chaji1(linklist A,linklist B,linklist C) //A 与 B 的差集 void chaji2(linklist A,linklist B,linklist C) //B 与 A 的差集 五、源代码(请详见附录 2) 置空函数: lnode *zhikong(){ //置空 lnode *l; l=(lnode*)malloc(sizeof(lnode)); l->next=NULL; return l; } 输入函数: void input(linklist l){ //输入 lnode *s; int num,a[90000]={0}; char x; printf("请先输入集合长度:\n"); cin>>num; printf("请输入集合内元素:\n"); while(num!=0){ cin>>x; a[x]++; if(x>='a'&&x<='z'&&a[x]==1){ s=(lnode*)malloc(sizeof(lnode)); s->data=x; s->next=l->next; l->next=s; } num--; } - 3 -
数据结构课程设计(报告) //输出 l=zhikong(); } 输出函数: void output(linklist l){ lnode *s; s=l->next; while(s!=NULL){ } printf("\n"); } 并集函数: printf("%2c",s->data); s=s->next; void bingji(linklist A,linklist B,linklist C){ //并集 lnode *p,*q,*t; p=A->next; while(p!=NULL){ t=(lnode*)malloc(sizeof(lnode)); t->data=p->data; t->next=C->next; C->next=t; p=p->next; } q=B->next; while(q!=NULL){ p=p->next; if(p==NULL){ p=A->next; while((p!=NULL)&&(p->data!=q->data)) t=(lnode*)malloc(sizeof(lnode)); t->data=q->data; t->next=C->next; C->next=t; } q=q->next; } } 交集: void jiaoji(linklist A,linklist B,linklist C){ //交集 lnode *p,*q,*t; p=A->next; - 4 -
数据结构课程设计(报告) while(p!=NULL){ q=B->next; while((q!=NULL)&&(q->data!=p->data)) q=q->next; if((q!=NULL)&&(q->data==p->data)){ t=(lnode*)malloc(sizeof(lnode)); t->data=p->data; t->next=C->next; C->next=t; } p=p->next; } } } A- B 的差集: void chaji1(linklist A,linklist B,linklist C){ //A 与 B 的差集 lnode *p,*q,*s; p=A->next; while(p!=NULL){ q=q->next; if(q==NULL){ q=B->next; while((q!=NULL)&&(p->data!=q->data)) s=(lnode*)malloc(sizeof(lnode)); s->data=p->data; s->next=C->next; C->next=s; } p=p->next; } B- A 的差集: void chaji2(linklist A,linklist B,linklist C){ //B 与 A 的差集 lnode *p,*q,*s; p=B->next; while(p!=NULL){ q=q->next; if(q==NULL){ q=A->next; while((q!=NULL)&&(p->data!=q->data)) s=(lnode*)malloc(sizeof(lnode)); s->data=p->data; s->next=C->next; - 5 -
分享到:
收藏