例题:已知A,B和C为三个递增有序的线性表,现要求对A表作如下操作:删去那些既在B表中出现又在C表中出现的元素。试对顺序表编写实现上述操作的算法,并分析你的算法的时间复杂度(注意:题中没有特别指明同一表中的元素值各不相同)
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
//不定长顺序表,自动增长
#define INITSIZE 10
typedef struct DSeqList
{
int *elem;//指向存放数据的动态数组
int length;//有效数据个数
int listsize;//总容量,总格子数
}DSeqList,*PDSeqList;
void InitSeqList(PDSeqList ps)
{
assert(ps != NULL);
if(ps == NULL)
{
return;
}
ps->elem = (int *)malloc(INITSIZE*sizeof(int));
ps->length = 0;
ps->listsize = INITSIZE;
}
static bool IsFull(PDSeqList ps)
{
return ps->length == ps->listsize;
}
//将总容量扩大到原来的2倍
static void Inc(PDSeqList ps)
{
ps->elem = (int *)realloc(ps->elem,ps->listsize*2