题目:
已知顺序表L为按值递增有序的,编写算法将数据元素e插入到顺序表L中,使之仍有序。
2、已知顺序表L为按值递增有序的,设计算法清除顺序表中多余重复元素,注意其删除位置之后的元素如何移动。
3、顺序表LA和顺序表LB中的元素值无序,求出LA和LB的并集,结果存储在顺序表LC中。
4、顺序表LA和顺序表LB中的元素值无序,求出LA和LB的交集,结果存储在顺序表LC中。
5、顺序表LA和顺序表LB中的元素值无序,求出LA和LB的差集,结果存储在顺序表LC中。
实现代码:
#include<iostream>
using namespace std;
#define MaxSize 50
#define AX 18
#define A1 5
#define B1 5
typedef int ElemType;//将ElemType定为int类型
int main()
{
typedef struct
{
ElemType data[MaxSize];//存放线表中的元素
int length;//存放线表的长度
}SqList;//顺序表类型
//建立线表
int a[AX] = { 1,2,3,4,5,5,7,8,9,10,11,12,13,14,15,16,17,18 };
int n = 0;//由a中的n个元素建立顺序表
int i = 0, k = 0;//k表示L中元素的个数,初始值为0
while (a[i] != NULL)
{
i++;
}
//printf("%d", n / 2);
SqList* L = (SqList*)malloc(sizeof(SqList));//分配存放线表的空间
i = 0;
while (i < AX)//i 扫描数组a的元素
{
L->data[k] = a[i];//将元素a[i]存放到L中
k++;
i++;
}
L->length = k; //设置L的长度
//删除重复数据元素
int h = 0, w = 0, q = 0, count2 = 0;
for (h = 0; h < L->length; h++)
{
ElemType u = L->data[h];
for (w = h + 1; w < L->length; w++)
{
if (u == L->data[w])
{
count2++;
for (q = h + 1; q < L->length; q++)
{
L->data[q] = L->data[q + 1];
}
L->length = L->length - count2;
}
}
}
for ( int d = 0; d < L->length; d++)
{
printf(" %d ", L->data[d]);
}
printf("\n");
//插入数据元素
ElemType e;
cout << "请输入需要插入的一个值:";
cin >> e;//输入插入的值
int j;
int count_1 = 0;
//SqList* L = (SqList*)malloc(sizeof(SqList));
while (L->data[count_1] < e)
{
count_1++;
}
for (j = L->length; j >count_1; j--)
{
L->data[j] = L->data[j - 1];
}
L->data[count_1] = e;
L->length++;
for ( d = 0; d < L->length; d++)
{
printf(" %d ", L->data[d]);
}
printf("\n");
//并集
ElemType A[A1] = { 1,4,2,6,8 };
ElemType B[B1] = { 2,5,9,6,8};
SqList LA, LB, LC;
int ii = 0;
ii = 0; int kk = 0;
while (ii < A1)//i 扫描数组a的元素
{
LA.data[kk] = A[ii];//将元素a[i]存放到L中
kk++;
ii++;
}
LA.length = kk; //设置L的长度
ii = 0; kk = 0;
while (ii < B1)//i 扫描数组a的元素
{
LB.data[kk] = B[ii];//将元素a[i]存放到L中
kk++;
ii++;
}
LB.length = kk; //设置L的长度
int z;
for (z = 0; z < LA.length; z++)
{
LC.data[z] = LA.data[z];
}
LC.length = LA.length;
int count = 0;
for (z = 0; z < LB.length; z++)
{
int signb = 1;
for (int u = 0; u < LC.length + count; u++)
{
if (LB.data[z] == LC.data[u])
{
signb = 0;
}
}
if (signb == 1)
{
LC.data[LC.length + count] = LB.data[z];
count++;
}
}
printf("并集:");
for ( d = 0; d < LC.length + count; d++)
{
printf(" %d ", LC.data[d]);
}
printf("\n");
//差集
int iii = 0;
iii = 0; int kkk = 0;
while (iii < A1)//i 扫描数组a的元素
{
LA.data[kkk] = A[iii];//将元素a[i]存放到L中
kkk++;
iii++;
}
LA.length = kkk; //设置L的长度
//printf("%d", k);
iii = 0; kkk = 0;
while (iii < B1)//i 扫描数组a的元素
{
LB.data[kkk] = B[iii];//将元素a[i]存放到L中
kkk++;
iii++;
}
LB.length = kkk; //设置L的长度
//SqList* L = (SqList*)malloc(sizeof(SqList));
int sign2 = 0;
for (z = 0; z < LA.length; z++)
{
int sign1 = 1;
for (int c = 0; c < LB.length; c++)
{
if (LB.data[c] == LA.data[z])
{
sign1 = 0;
break;
}
}
if (sign1 == 1)
{
LC.data[sign2] = LA.data[z];
sign2++;
}
LC.length = sign2;
}
printf("A-B的差集:");
for ( d = 0; d < LC.length; d++)
{
printf(" %d ", LC.data[d]);
}
printf("\n");
int sign3 = 0;
for (z = 0; z < LB.length; z++)
{
int sign1 = 1;
for (int c = 0; c < LA.length; c++)
{
if (LA.data[c] == LB.data[z])
{
sign1 = 0;
break;
}
}
if (sign1 == 1)
{
LC.data[sign3] = LB.data[z];
sign2++;
sign3++;
}
}
LC.length =sign3;
printf("B-A的差集:");
for ( d = 0; d < LC.length; d++)
{
printf(" %d ", LC.data[d]);
}
printf("\n");
//交集
int iiii = 0; int kkkk = 0;
while (iiii < A1)//i 扫描数组a的元素
{
LA.data[kkkk] = A[iiii];//将元素a[i]存放到L中
kkkk++;
iiii++;
}
LA.length = kkkk; //设置L的长度
//printf("%d", k);
iiii = 0; kkkk = 0;
while (iiii < B1)//i 扫描数组a的元素
{
LB.data[kkkk] = B[iiii];//将元素a[i]存放到L中
kkkk++;
iiii++;
}
LB.length = kkkk; //设置L的长度
int bsign2 = 0;
for (z = 0; z < LA.length; z++)
{
int sign1 = 1;
for (int c = 0; c < LB.length; c++)
{
if (LA.data[z] == LB.data[c])
{
sign1 = 0;
break;
}
}
if (sign1 == 0)
{
LC.data[bsign2] = LA.data[z];
bsign2++;
}
LC.length = bsign2 ;
}
printf("交集:");
for ( d = 0; d < LC.length; d++)
{
printf(" %d ", LC.data[d]);
}
printf("\n");
free(L);
return 0;
}