顺序表求集合交并——C++实现
2015-10-12 20:30
876 查看
#include<iostream> #include<malloc.h> #define MAXSIZE 100//顺序表长度上限 using namespace std; typedef int DataType; typedef struct{ DataType data[MAXSIZE];//顺序表存储结构 int length;//顺序表长度 }SeqList,* PSeqList; int main(){ /*函数声明*/ void panduan(PSeqList L); PSeqList Init_SeqList(void); int Locate_SeqList(PSeqList L,DataType x); void Insert_SeqList(PSeqList L,int i,DataType x); void Delete_SeqList(PSeqList L,int i); void Show_SeqList(PSeqList L); void Inter_sec(PSeqList A,PSeqList B); void Merge_sec(PSeqList A,PSeqList B); PSeqList A=Init_SeqList(); PSeqList B=Init_SeqList(); cout<<"两集合的交集为:"; Inter_sec(A,B); cout<<"两集合的并集为:"; Merge_sec(A,B); return 0; } /*判断顺序表是否存在和溢出*/ void panduan(PSeqList L){ if(!L){ cout<<"表不存在!"; return; } if(L->length>MAXSIZE){ cout<<"表溢出!"; return; } } /*创建顺序表*/ PSeqList Init_SeqList(void){ PSeqList L; L=(PSeqList)malloc(sizeof(SeqList)); cout<<"输入顺序表的表长(不超过100):"; cin>>L->length; cout<<"输入顺序表的元素:"; for(int i=0;i<L->length;i++){ cin>>L->data[i]; } return L; } /*查找顺序表中值为x的元素对应的下标*/ int Locate_SeqList(PSeqList L,DataType x){ int i=0; while(i<L->length && L->data[i]!=x) i++; if(i<L->length) return i+1; else return 0; } /*在顺序表中第i个元素前插入值x*/ void Insert_SeqList(PSeqList L,int i,DataType x){ panduan(L); if(i<1 || i>L->length+1){ cout<<"插入位置不合法!"; return; } for(int j=L->length-1;j>=(i-1);j--){ L->data[j+1]=L->data[j]; } L->data[i-1]=x; L->length++; } /*删除第i个元素*/ void Delete_SeqList(PSeqList L,int i){ panduan(L); if(i<1 || i>L->length){ cout<<"删除位置不合法!"; return; } for(int j=(i-1);j<L->length;j++){ L->data[j]=L->data[j+1]; } L->length--; } /*输出顺序表*/ void Show_SeqList(PSeqList L){ for(int i=0;i<L->length;i++){ cout<<L->data[i]<<" "; } cout<<endl<<endl; } /*求集合交集的算法*/ void Inter_sec(PSeqList A,PSeqList B){ PSeqList C=A;//结果存放A中 for(int i=0;i<C->length;i++){ if(!Locate_SeqList(B,C->data[i])){//B中不存在C->data[i] Delete_SeqList(C,i+1);//则删除此元素 } } Show_SeqList(C); } /*求集合并集的算法*/ void Merge_sec(PSeqList A,PSeqList B){ PSeqList C=A;//结果存放A中 for(int j=0;j<B->length;j++){ if(!Locate_SeqList(C,B->data[j])){//C中不存在此元素 Insert_SeqList(C,C->length+1,B->data[j]);//则将此元素添加进C中 } } Show_SeqList(C); }
相关文章推荐
- android 代码实现控件之间的间距
- [Android]在代码里运行另一个程序的方法
- 肯特·贝克:改变人生的代码整理魔法
- 网页恶意代码的预防
- 动易2006序列号破解算法公布
- 高手写的Tracer-Flash代码调试类代码下载
- CSS代码缩写技巧
- 非主流Q-zOne代码代码搜集第1/2页
- Ruby实现的矩阵连乘算法
- CreateWeb.vbs 代码
- C#插入法排序算法实例分析
- Lua中编译执行代码相关的函数详解
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- C#数据结构揭秘一
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题