版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实用文案【问题描述】编制一个能演示执行集合的并、交和差运算的程序【根本要求】(1)集合的元素限定为小写字母字符'a'.'z'(2)演示程序以用户和计算机对话的方式执行【测试数据】【实现提示】以有序链表表示集合【代码过程】1 .先定义集合的数据类型notes.h/notes.htypedef struct LNode.ElemType data;LNode *next;*Link, "Position;typedef struct.Link head,tail;int len;LinkSet;2 .以后要用的一些常量放在constValues.h#inc
2、lude<stdio.h>#include <malloc.h>#include <stdlib.h>/函数结果状态代码# define TRUE 1# define FALSE 0# define OK 1# define ERROR 0# define INFEASIBLE -1# define OVERFLOW -2#define ElemTypeint/存放数据的类型typedef int Status;/函数的返回值 3 .集合实现函数 setsFun.h/*/*函数定义*/Status InitSets(LinkSet &ls).标准文档
3、实用文案/ 初始化集合Is.head = (Link) malloc( sizeof(Link);Is.tail = (Link) malloc( sizeof(Link);if(!ls.head | !ls.tail) exit(OVERFLOW); /ls.head->next = ls.tail->next = NULL; /15.1 en = 0;/return OK; Status CreateNode(Link &link,ElemType e). /创立一节点,内容为 elink = (Link) malloc( sizeof(Link);if(!link)
4、exit(OVERFLOW);link->data = e;/link->next = NULL;/return OK; Position PriorInsertNode(LinkSet &ls,Link &link). / 找出节点link要插入到ls的前一个节点 if(!ls.head->next) return ls.head;Link h1 = ls.head->next, h2 = h1->next; /h1点的后一节点if(link->data < h1->data) return ls.head; /头指针while
5、(h1 && h2).如果分配失败头、尾指针为空长度为0值设定 指向空if(h1->data < (link->data) && h2->data > (link->data) )<h2,说明找到插入的地方了break;if(h1->data = (link->data) | h2->data =(link->data)return NULL;/else/h1=h2,h2=h1->next;return h1;Status Append(LinkSet &ls, Link &
6、link)./向集合末尾追加节点if(ls.head->next = NULL) ls.head->next = link;else ls.tail->next->next = link;ls.tail->next = link;15.1 en +;:前一节点,h2:前一节如果比第一个节点小,返回/如果h1 &&如果重复,返回 NULL否那么,顺次往后挪一个节点标准文档实用文案return OK;)Status InsertNode(LinkSet &ls, Link &link)./向集合中插入节点Position p = Pri
7、orInsertNode(ls,link);if(!p) return ERROR;/如果集合中已有相应元素link->next = p->next;if(!p->next) ls.tail->next = link; /如果前一节点为尾节点,修改tailp->next = link;ls.len+;return OK;)Position PriorNode(LinkSet &ls, Link &link)./ 返回集合中 该节点的前一节点,不存在返回NULLint j=0;Link pre,h = ls.head;while(h->next
8、 && j<=ls.len && h!=link). pre = h; h=h->next; j+;)if(j=0) return NULL;return pre;)Status PrintSets(LinkSet &ls)./ 打印集合Link h=ls.head->next;printf(" ");while(h). printf("%c ",h->data); h = h->next;)printf(" "); return OK;)Position GetH
9、ead(LinkSet &ls). /获得集合的头节点return ls.head;)标准文档实用文案Position NextPos(Link &link)./ 获得当前节点的下一个节点return link?link->next:link;)Status Empty(LinkSet &ls)./ 空为真return ls.head->next=NULL;)ElemType GetCurElem(Link &link)./ 获得当前节点的数据return link->data;)int Compare(Link &la, Link &
10、amp;lb)./ 判断两个节点的大小return la->data - lb->data;)int Compare(ElemType e1, ElemType e2)./ 比拟两个数字的大小return e1-e2;)Status DelFirst(LinkSet &ls,Link &q)./ h为线性链表的头节点,删除表中的第一个节点,并以q返回Link h = ls.head;if(!h->next) return ERROR;q = h->next;h->next = h->next->next;q->next=NULL;
11、ls.len-;return OK;)Status FreeNode(Link &l)./释放节点,有问题free(l);return OK;)Status UnionSets(LinkSet lsa, LinkSet &lsb, LinkSet &lsc)./集合ls1,ls2的元素按值非递减排列标准文档实用文案/ 将集合ls1 , ls2的并集到ls3if( !InitSets(lsc) ) return ERROR;Link node;Link ha = lsa.head, hb=lsb.head; /找到两节点的头指针Link pa = NextPos(ha),
12、 pb = NextPos(hb);while( !Empty(lsa) && !Empty(lsb) ).int result = Compare(pa,pb); /比拟两节点大if( result<0) .DelFirst(lsa,node);Append(lsc,node); pa = NextPos(ha); /向lsc插入lsa的相关节点elseif(result>0)./向 lsc 插入 lsb的相关节点DelFirst(lsb,node);Append(lsc,node); pb = NextPos(hb);else.DelFirst(lsb,node
13、);pb = NextPos(hb);/ 如果两节点相同,删除 lsb 中重复的节点,即以lsa为标准 while(!Empty(lsa).DelFirst(lsa,node);Append(lsc,node);while(!Empty(lsb).DelFirst(lsb,node);Append(lsc,node); return OK;Status IntersectionSets(LinkSet &lsa,LinkSet &lsb, LinkSet &lsc)./集合ls1,ls2的元素按值非递减排列/ 将集合ls1 , ls2的交集到ls3if( !InitSe
14、ts(lsc) ) return ERROR;Link node;Link ha = lsa.head, hb=lsb.head;Link pa = NextPos(ha), pb = NextPos(hb);while( !Empty(lsa) && !Empty(lsb) ).int result = Compare(pa,pb);if( result<0) .DelFirst(lsa,node);pa = NextPos(ha);else if(result>0).DelFirst(lsb,node); pb = NextPos(hb);else.标准文档实用
15、文案DelFirst(lsb,node); Append(lsc,node);pb = NextPos(hb);DelFirst(lsa,node);pa = NextPos(ha);while(!Empty(lsa).DelFirst(lsa,node);Append(lsc,node);return OK;Status DifferenceSets(LinkSet &lsa,LinkSet &lsb, LinkSet &lsc). / 集合ls1,ls2的元素按值非递减排列ls3 = ls1 - ls2if( !InitSets(lsc) ) return ERRO
16、R;Link node;Link ha = lsa.head, hb=lsb.head;Link pa = NextPos(ha), pb = NextPos(hb);/,pb2 = NextPos(pb1);while( !Empty(lsa) && !Empty(lsb) ).int result = Compare(pa,pb);if( result<0) .DelFirst(lsa,node);Append(lsc,node);pa = NextPos(ha);else if(result>0).DelFirst(lsb,node); pb = NextPo
17、s(hb);else.DelFirst(lsa,node); pa = NextPos(ha);DelFirst(lsb,node); pb = NextPos(hb);return OK;Status CopySets(LinkSet lsa, LinkSet lsb)./ 将集合lsa拷贝到lsb中InitSets(lsb);Link la = lsa.head->next, lb = lsb.head->next;while(la).Link node;CreateNode(node,la->data);lb=node;lsb.len+;la = la->next
18、;lb = lb->next;标准文档实用文案Isb.tail = lb;return OK;)4.测试 test.cpp#include "constValues.h" /#include "notes.h"/常量头文件节点定义头文件集合操作函数头文件#include "setsFun.h"/*/*测试 */printf(* ");void Initialization().*printf("*MakeSet1-1 MakeSet1-2 Union-u Intersection-i Difference-d
19、 Quit-q * ");printf( "* ");void main().LinkSet set1,set2,set3,seta,setb;InitSets(set1),InitSets(set2); / while(1).Initialization.; printf("集合 Set1:");PrintSets(set1);/printf("集合 Set2:");PrintSets(set2);/printf("请键入操作代码fflush(stdin); / char oper = getchar(); ch
20、ar setsContent200;:");清空缓冲区初始化集合打印集合setl打印集合setlswitch(oper)./请输入集合集合set1赋值Set1的内容:");case '1':printf(" fflush(stdin);gets(setsContent);InitSets(set1);SetSets(set1,setsContent); break;标准文档实用文案case '2':/printf("请输入集合fflush(stdin); gets(setsContent); InitSets(set2);SetSets(set2,setsContent); break;case 'u':case 'U':/InitSets(set3);CopySets(set1,seta);/set1,set2中对应的节点,CopySets(set2,setb);/UnionSets(seta,setb,set3); / printf(&quo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 石河子大学《应用人工智能》2021-2022学年期末试卷
- 石河子大学《数字电路》2022-2023学年期末试卷
- 石河子大学《口腔颌面外科学二》2021-2022学年第一学期期末试卷
- 石河子大学《编译原理》2022-2023学年第一学期期末试卷
- 沈阳理工大学《数学建模与应用》2023-2024学年第一学期期末试卷
- 沈阳理工大学《口译理论与实践》2022-2023学年第一学期期末试卷
- 沈阳理工大学《移动终端应用程序开发》2022-2023学年期末试卷
- 沈阳理工大学《电器学》2023-2024学年期末试卷
- 沈阳理工大学《Python程序设计》2021-2022学年期末试卷
- 国际贸易综合技能实训中对合同订立报告
- 《旅行社经营与管理》教学课件汇总全套电子教案(完整版)
- 消防工程技术标书(暗标)
- 新北师大版七年级下册英语(全册知识点语法考点梳理、重点题型分类巩固练习)(家教、补习、复习用)
- 福建师范大学《计算机应用基础》3答卷答案
- 定向越野教程-中国定向运动协会PPT课件[通用]
- 高聚物的相及相转变中的亚稳态现象
- 《幼儿园中班第一学期家长会》 PPT课件
- 无人机活动方案计划
- 宿舍管理制度及台账
- 造型别致的椅子美术
- 多吃健脑食物,预防老年痴呆症
评论
0/150
提交评论