#include < iostream >
#define NUM 100
using namespace std;
// 定义顺序表
typedef struct{
int data[NUM];
int size;
}Sqlist;
// 初始化顺序表 **必须要!!构建C表的时候会用上
void initSqlist(Sqlist &L)
{
L.size = 0;
}
// 创建顺序表
void createSqlist(Sqlist &L,int a[], int n)
{
for(int i=0;i<n;i++){
L.data[i] = a[i];
}
L.size = n;
}
// 特定位置添加元素
int insertElem(Sqlist &L, int p,int e) // p为下标
{
int i;
if(p<0 || p>L.size || L.size==NUM)
return 0;
for(i=L.size-1;i>=p;i--){
L.data[i+1] = L.data[i];
}
L.data[++i] = e;
++L.size; // 顺序的表长要增加!!
return 1;
}
// 特定位置删除元素
int deleteElem(Sqlist &L, int p)
{
int i;
if(p<0 || p>L.size-1)
return 0;
for(i=p;i<L.size-1;i++){
L.data[i] = L.data[i+1];
}
--L.size; //表长要减少!!
return 1;
}
// 定位元素位置
int getLocation(Sqlist L,int e)
{
for(int i=0;i<L.size;i++)
if(L.data[i] == e)
return i;
return -1; // 不能定为 0,否则会和上面返回的下标‘0’相冲突
}
// 查找元素
int getElem(Sqlist L,int p)
{
if(p<0 || p>L.size-1)
return 0;
return L.data[p];
}
// 销毁顺序表
void destroy(Sqlist &L)
{
for(int i=0;i<L.size;i++)
{
L.data[i] = 0;
}
L.size = 0;
}
// 求 A ∩B
void intersection(Sqlist La,Sqlist Lb,Sqlist& Lc)
{
for(int i=0;i<La.size;i++){
Lc.data[i] = La.data[i];
Lc.size++;
}
for(int i=0;i<Lc.size;i++)
{
if(getLocation(Lb,Lc.data[i]) == -1){
deleteElem(Lc,i);
i--;
}
}
}
// 求 A - B
void difference(Sqlist La,Sqlist Lb,Sqlist& Lc)
{
for(int i=0;i<La.size;i++){
Lc.data[i] = La.data[i];
Lc.size++;
}
for(int i=0;i<Lc.size;i++)
{
if(getLocation(Lb,Lc.data[i]) != -1){ // 找到相同则删除
deleteElem(Lc,i);
i--;
}
}
}
// 显示全部
void display(Sqlist L)
{
for(int i=0;i<L.size;i++)
cout<<L.data[i]<<" ";
cout<<endl;
}
int main()
{
int a[NUM] = {5,4,7,9,0,2};
int b[NUM] = {7,3,5,1,2,9};
int c[NUM] = {7,4,3,8,0,9};
Sqlist L,La,Lb,Lc;
createSqlist(L,a,6);
display(L); // 显示 L
cout<<"Add integer 3 in loc.4"<<endl; // 添加‘3’在下标为4的地方
insertElem(L,4,3);
display(L);
cout<<"Delete integer integer in loc.2"<<endl; // 删除下标为2的数字
deleteElem(L,2);
display(L);
cout<<"The location of integer 2 is: "<<getLocation(L,2)<<endl; // 定位位置
cout<<"The integer in loc.5 is: "<<getElem(L,3)<<endl; // 查找元素
createSqlist(La,b,6);
cout<<"A = ";
display(La);
createSqlist(Lb,c,6);
cout<<"B = ";
display(Lb);
initSqlist(Lc); // 再建一个顺序表
cout<<"A ∩B = ";
intersection(La,Lb,Lc);
display(Lc);
destroy(Lc);
cout<<"A - B = ";
difference(La,Lb,Lc);
display(Lc);
return 0;
}