数据结构实验顺序存储合并表然后删除合并表中相同元素
时间: 2023-06-19 13:10:52 浏览: 54
好的,我来给您讲解一下顺序存储合并表和删除合并表中相同元素的实验步骤。
1.顺序存储合并表
(1)定义表结构体
首先,我们需要定义一个表的结构体,它包含两个成员变量:一个是表头指针,另一个是表的长度。
```
#define MAXSIZE 100
typedef struct
{
int *elem; // 存储空间基址
int length; // 当前长度
}SqList;
```
(2)初始化表
接下来,我们需要初始化两个待合并的表,即A表和B表。我们可以先定义两个数组,然后将它们分别赋值给A表和B表。
```
int a[MAXSIZE] = {1, 3, 5, 7, 9};
int b[MAXSIZE] = {2, 4, 6, 8, 10};
SqList A, B;
InitList(&A); // 初始化A表
InitList(&B); // 初始化B表
for(int i=0; i<5; i++)
ListInsert(&A, i+1, a[i]); // 将数组a中的元素插入A表
for(int i=0; i<5; i++)
ListInsert(&B, i+1, b[i]); // 将数组b中的元素插入B表
```
(3)合并表
接下来,我们需要将A表和B表合并成一个新表C。我们先定义一个新的空表C,然后从A表和B表中依次取出元素进行比较,并将较小的元素插入C表中。如果A表或B表中还有剩余的元素,直接将其插入C表中。
```
SqList C;
InitList(&C); // 初始化C表
int i=1, j=1, k=0;
while(i<=A.length && j<=B.length)
{
if(A.elem[i-1] < B.elem[j-1])
C.elem[k++] = A.elem[i++];
else
C.elem[k++] = B.elem[j++];
}
while(i<=A.length)
C.elem[k++] = A.elem[i++];
while(j<=B.length)
C.elem[k++] = B.elem[j++];
C.length = k; // 计算C表的长度
```
(4)输出结果
最后,我们将C表中的元素输出。
```
for(int i=0; i<C.length; i++)
printf("%d ", C.elem[i]);
printf("\n");
```
2.删除合并表中相同元素
(1)定义函数
我们需要定义一个函数,用于删除合并表C中相同的元素。该函数接收一个指向表C的指针。
```
void Del_Same(SqList *L)
{
int i, j;
for(i=1; i<L->length; i++)
{
if(L->elem[i] == L->elem[i-1]) // 如果当前元素与前一个元素相同
{
for(j=i+1; j<=L->length; j++) // 将后面的元素前移
L->elem[j-1] = L->elem[j];
L->length--; // 表长减1
i--; // 继续与前一个元素比较
}
}
}
```
(2)调用函数
我们将合并表C传入Del_Same函数中,即可删除其中相同的元素。
```
Del_Same(&C); // 删除合并表C中相同的元素
```
(3)输出结果
最后,我们将删除相同元素后的表C输出。
```
for(int i=0; i<C.length; i++)
printf("%d ", C.elem[i]);
printf("\n");
```