/*程序的版权和版本声明部分:
*Copyright(c)2014,烟台大学计算机学院学生
*All rights reserved.
*文件名称:
*作者:田成琳
*完成日期:2014 年 9 月 2 日
*版本号:v1.0
*对任务及求解方法的描述部分:
*问题描述:线性顺序表的简单应用
*程序输入:两个集合
*程序输出:两个集合的并集
*问题分析:
*算法设计:
*/
#include<iostream>
#include<cstdlib>
using namespace std;
const int MaxSize=50; //顺序表中最多元素个数
typedef struct
{
int data[MaxSize]; //存放顺序表中元素
int length; //存放顺序表长度
}SqList;
void InitList(SqList *&L); //初始化线性表,构造空线性表L
void CreateList(SqList *L,int a[],int n);//建立顺序表
void DestroyList(SqList *&L); //销毁线性表,释放L占用的空间
bool ListEmpty(SqList *L); //判断线性表是否为空
int ListLength(SqList *L); //返回线性表元素个数
void DisplayList(SqList *L); //输出线性表
int GetElem(SqList *L,int i,int &e);//求线性表中某个元素值,e返回该数据
bool LocateElem(SqList *L,int e); //返回线性表中与e相等的元素位置
bool ListInsert(SqList *L,int i,int e);//在第i(1<=i<=n)插入元素e到线性表
bool ListDelete(SqList *L,int i);//,int &e);//删除数据元素,并用e返回值
void InitList(SqList *L)
{
L->length=0; //空线性表长度设为0
L=(SqList *)malloc(sizeof(SqList));//分配存放线性表的空间
}
void CreateList(SqList *L,int a[],int n)
{
for(int i=0;i<n;i++)
L->data[i]=a[i];
L->length=n;
}
void DestroyList(SqList *&L)
{
free(L);
}
bool ListEmpty(SqList *L)
{
return(L->length==0);
}
int ListLength(SqList *L)
{
return(L->length);
}
void DisplayList(SqList *L)
{
for(int i=0;i<L->length;i++)
cout<<L->data[i]<<" "; //遍历输出
cout<<endl;
}
int GetElem(SqList *L,int i,int &e)
{
if(i<1||i>L->length)
cout<<"输入数据出错!"<<endl;
e=L->data[i-1];
return e;
}
bool LocateElem(SqList *L,int n)
{
int i=0;
while(i<=L->length&&L->data[i]!=n)
i++;
if(i>L->length)
return false; //未找到返回false
else
return true; //找到返回true
}
bool ListInsert(SqList *L,int i,int e)
{
int j;
if(i<1||i>L->length+1)
return false; //参数错误
i--; //将顺序表逻辑序号转为物理序号
for(j=L->length;j>i;j--)
L->data[j]=L->data[j-1];//将i及后面元素后移一个位置
L->data[i]=e; //插入元素e
L->length++; //长度加1
return true;
}
bool ListDelete(SqList *L,int i)//,int &e)
{
int j;
if(i<1||i>L->length+1)
return false; //参数错误
i--; //将顺序表逻辑序号转为物理序号
//e=L->data[i];
for(j=i;j<L->length-1;j++)
L->data[j]=L->data[j+1];//将i及后面元素前移一个位置
L->length--; //长度减1
return true;
}
int main()
{
SqList LA,LB,LC;
int na,nb,a[MaxSize],b[MaxSize],i,j,lena;
cout<<"请输入A集合元素个数及元素值:"<<endl;
cin>>na;
for(i=0;i<na;i++)
cin>>a[i];
CreateList(&LA,a,na); //创建A集合
cout<<"请输入B集合元素个数及元素值:"<<endl;
cin>>nb;
for(j=0;j<nb;j++)
cin>>b[j];
CreateList(&LB,b,nb); //创建B集合
InitList(&LC);
for(i=1;i<=ListLength(&LA);i++)//将LA所有元素插入LC
{
GetElem(&LA,i,na);
ListInsert(&LC,i,na);
}
lena=ListLength(&LA);//求线性表A的长度
for(i=1;i<=ListLength(&LB);i++)
{
GetElem(&LB,i,nb);
if(!LocateElem(&LA,nb)) //遍历A集合,和B集合中不同就插入C集合
ListInsert(&LC,++lena,nb);
}
cout<<"集合A与B的并集为:"<<endl;
DisplayList(&LC);
return 0;
}
运行结果: