题目
实现线性表的顺序存储结构下的插入和删除操作,并用该存储结构实现集合A和集和B的交集和并集操作;
最终结果存储于集合 A当中。
#Examples 1
input
5
1 2 3 4 5
5
4 5 6 7 8
0
output
1 2 3 4 5 6 7 8
#Examples 2
input
5
1 2 3 4 5
5
4 5 6 7 8
1
output
4 5
Source Program
#include<stdio.h>
#include<stdlib.h>
#define LISTSIZE 100
#define REALLOC 10
typedef int Elemtype;
typedef struct node
{
Elemtype* elem;
int L_size;
int len;
}sqlist;
int init(sqlist& L);
int find(sqlist& L, Elemtype x);
int insert(sqlist& L, int i, Elemtype x);
int delet(sqlist& L, int i);
void Union(sqlist& La, sqlist& Lb);
void intersect(sqlist& La, sqlist& Lb);
int main()
{
sqlist La, Lb;
init(La); init(Lb);
int n, m, x;
puts("集合A元素个数:");
scanf("%d", &n);
puts("输入A中元素:");
for (int i = 1; i <= n; i++)scanf("%d", &x), insert(La, i, x);
puts("集合B元素个数:");
scanf("%d", &m);
puts("输入B中元素:");
for (int i = 1; i <= m; i++)scanf("%d", &x), insert(Lb, i, x);
puts("并集:0,交集:1");
int op; scanf("%d", &op);
if (op == 0)Union(La, Lb);
else intersect(La, Lb);
for (int i = 0; i < La.len; i++)
printf("%d ", La.elem[i]);
puts("");
return 0;
}
int init(sqlist& L)
{
L.elem = (int*)malloc(LISTSIZE * sizeof(Elemtype));
if (!L.elem)
return 0;
L.len = 0;
L.L_size = LISTSIZE;
return 1;
}
int find(sqlist& L, Elemtype x)
{
Elemtype* p;
int i = 1;
p = L.elem;
while (i <= L.len && *(p++) != x)i++;
if (i <= L.len)
return 1;
else return 0;
}
int insert(sqlist& L, int i, Elemtype x)
{
Elemtype* newbase;
if (i<1 || i>L.len + 1)
return 0;
if (L.len >= L.L_size)
{
newbase = (Elemtype*)realloc(L.elem, (L.L_size + REALLOC) * sizeof(Elemtype));
L.elem = newbase;
L.L_size += REALLOC;
}
for (int j = L.len - 1; j >= i - 1; j--)
L.elem[j + 1] = L.elem[j];
L.elem[i - 1] = x;
L.len++;
return 1;
}
int delet(sqlist& L, int i)
{
if (i<1 || i>L.len)
return 0;
for (int j = i; j < L.len; j++)
L.elem[j - 1] = L.elem[j];
L.len--;
return 1;
}
void Union(sqlist& La, sqlist& Lb)
{
int alen = La.len;
int blen = Lb.len;
for (int i = 0; i < blen; i++)
if (!find(La, Lb.elem[i]))
insert(La, ++alen, Lb.elem[i]);
}
void intersect(sqlist& La, sqlist& Lb)
{
int alen = La.len;
int blen = Lb.len;
for (int i = 1; i <= alen; i++)
if (!find(Lb, La.elem[i - 1]))
delet(La, i--);
}