您的位置:首页 > 编程语言 > C语言/C++

顺序表求集合交并——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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  代码 数据结构 算法