顺序表实现集合运算
来源:互联网 发布:notepad 安装sql插件 编辑:程序博客网 时间:2024/04/30 17:08
采用顺序表结构编程实现:两个集合的运算:交集 并集 差集
#include <iostream>#include <stdio.h>#include <stdlib.h>#define LIST_INIT_SIZE 100#define LISTINCREMENT 10#define OK 1#define OVERFLOW -2#define ERROR 0using namespace std;typedef struct{ int *elem; int length; int listsize;} SqList;int InitList_Sq(SqList &L){ L.elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int)); if(!L.elem) exit(OVERFLOW); L.length=0; L.listsize=LIST_INIT_SIZE; return OK;}int ListInsert_Sq(SqList &L,int i,int e){ if(i<1||i>L.length+1) return ERROR; if(L.length>=L.listsize) { int *newbase; newbase=(int*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int)); if(!newbase) exit(OVERFLOW); L.elem=newbase; L.listsize+=LISTINCREMENT; } int *p,*q; q=&(L.elem[i-1]); for(p=&(L.elem[L.length-1]); p>=q; p--) *(p+1)=*p; *q=e; ++L.length; return OK;}int GetElem(SqList L,int i,int &e)//用e返回L中第i个元素的值{ if(i<1||i>L.length) return ERROR; e=L.elem[i-1]; return OK;}int equal_e(int a,int b){ if(a==b) return OK; else return ERROR;}int LocateElem(SqList L,int e,int (*compare)(int ,int))//在表中查找第一个值与e满足compare()元素的位序{ int i=1; int *p=L.elem; while(i<=L.length&&!(*compare)(*p++,e)) ++i; if(i<=L.length) return i; else return 0;}void Get(SqList L)//输出当前列表{ //cout<<"当前列表:"<<endl; for(int i=0; i<L.length; i++) { cout<<L.elem[i]<<" "; } cout<<endl;}void union_set(SqList La,SqList Lb,SqList &Lc)//a与b的并集放入c中{ int La_len=La.length; int Lb_len=Lb.length; int e; for(int i=1;i<=Lb_len;i++) { GetElem(Lb,i,e); if(!LocateElem(La,e,equal_e)) ListInsert_Sq(La,++La_len,e); } //cout<<"La_len:"<<La_len<<endl; //cout<<"La.leng:"<<La.length<<endl; //cout<<"输出a:"<<endl;Get(La); for(int i=1;i<=La_len;i++) { GetElem(La,i,e); ListInsert_Sq(Lc,i,e); }}int mixture(SqList La,SqList Lb,SqList &Lc)//a与b的交集{ int La_len=La.length; int Lb_len=Lb.length; int e; int index=0; //cout<<Lc.length<<endl; SqList p=La_len<=Lb_len?La:Lb; SqList q=La_len>Lb_len?La:Lb; for(int i=1;i<=p.length;i++) { GetElem(p,i,e); if(LocateElem(q,e,equal_e)) { ListInsert_Sq(Lc,++index,e); //Get(Lc); } } if(Lc.length) return OK; else return ERROR;}int different(SqList La,SqList Lb,SqList &Lc)//求a-b差集{ int La_len=La.length; int e; int index=0; for(int i=1;i<=La_len;i++) { GetElem(La,i,e); if(!LocateElem(Lb,e,equal_e)) ListInsert_Sq(Lc,++index,e); } if(Lc.length) return OK; else return ERROR;}int main(){ SqList La,Lb; InitList_Sq(La); InitList_Sq(Lb); cout<<"线性表a的长度:"<<endl; int la; cin>>la; cout<<"请输入a中的元素:"<<endl; int e; for(int i=1;i<=la;i++) { cin>>e; //cout<<La.length<<endl; ListInsert_Sq(La,i,e); } //Get(La); cout<<"线性表b的长度:"<<endl; int lb; cin>>lb; cout<<"请输入b中的元素:"<<endl; for(int i=1;i<=lb;i++) { cin>>e; ListInsert_Sq(Lb,i,e); } //Get(Lb); cout<<"A并B:"<<endl; SqList Lc1; InitList_Sq(Lc1); union_set(La,Lb,Lc1); Get(Lc1); cout<<"A交B:"<<endl; SqList Lc2; InitList_Sq(Lc2); if(mixture(La,Lb,Lc2)) Get(Lc2); else cout<<"null"<<endl; cout<<"A-B:"<<endl; SqList Lc3; InitList_Sq(Lc3); if(different(La,Lb,Lc3)) Get(Lc3); else cout<<"null"<<endl; return 0;}
0 0
- 顺序表实现集合运算
- (C)顺序表实现集合运算
- 利用顺序表实现集合的并运算
- 顺序表实现集合及大整数运算
- 实现顺序表各种基本运算算法
- 顺序表实现两个集合的合并
- 线性表的顺序储存及运算实现-------------顺序表
- 实现顺序表以及顺序表的简单运算
- 数据结构笔记(一)线性表的顺序表示和基本操作及其顺序表实现的集合运算(A-B)U(B-A)实例
- 集合的运算之链表实现
- 两个链表实现集合的运算
- 链表实现集合及多项式运算
- 顺序栈实现算术运算。
- 顺序栈及运算实现
- 顺序队列及运算实现
- 集合----顺序存储的实现
- STL实现集合交集运算
- java实现集合的运算
- 数素数
- 相见恨晚:linux下的c++filt 命令
- 设计文档
- android开发笔记之多媒体—音频和视频的录制
- Android存储(读取)之内存FilesDir存储
- 顺序表实现集合运算
- 【Leetcode】Combine Two Tables
- ubuntu鼠标滚轮方向修改方法(运动方向和滚轮滚动方向一致)
- Python-格式化字符串
- Gym 100712C Street Lamps
- 《java入门第一季》之Date类案例,算一算你的恋爱纪念日
- 链表操作
- 2016"百度之星" - 资格赛(Astar Round1)
- OCP 考完了, 做个记录,分享下经验