ADT 顺序表 (SqList)
Data:顺序表的数据对象集合为(data[1],data[2]...data[n]), 每个元素类型自定义, 其中,除第一个元素外,每一个元素有且只有一个直接前驱元素,除了最后一个元素外,每一个元素有且只有一个直接后续元素。数据元素之间是一对一的关系
基本操作:
InitList(&L); 初始化顺序表
CreatList(&L); 构建顺序表
InsertList(&L, i, a); 在顺序表的第 i 个位置插入元素 a
ListDelete(&L, d, e); 删除顺序表中第 d 个位置的元素并返回该元素的值
MergeList(L, L2); 合并两个顺序表
Find(L, e); 查找元素 e ,并返回其位置
Clear(L); 清除顺序表
Update(L, i, e); 修改第 i 个位置上的元素,并改为 e
..............
代码
#include <stdio.h>
//(为了提升自己渣渣的英语水平,注释尽量用英文)
#define MAXSIZE 100 //储存空间初始化分配
typedef int ElemType;
typedef struct SqList
{
ElemType data[MAXSIZE]; //变量类型暂时以int型开始
int len;
} SqList;
/*
SqList InitList()
{
SqList L;
L.len = 0;
return L;
}
*/
void InitList(SqList *L)
{
L->len = 0; //The length of the sequence table is 0(顺序表的长度为0)
}
void CreatList(SqList *L)
{
int a;
printf("Please enter the value (about a) to be stored in the sequence table, and '0' indicates the end of the input\n");
while (scanf("%d", &a) != EOF)
{
if (a == 0)
{
break;
}
L->data[L->len] = a;
L->len++;
}
}
void InsertList(SqList *L, int i, ElemType a)
{
if (L->len == MAXSIZE)
{
printf("Sequence table is full!\n");
return;
}
if (i < 1 || i > L->len)
{
printf("'i' is error");
return;
}
if (i <= L->len)
{
for (int j = L->len - 1; j >= i - 1; j--)
{
L->data[j + 1] = L->data[j];
}
L->data[i - 1] = a;
L->len++;
}
}
bool IsEmpty(SqList *L)
{
return (L->len == 0 ? true : false);
}
void ListDelete(SqList *L, int i, ElemType &e)
{
//Is the Sequence table empty?
if (IsEmpty(L))
{
printf("The table is rmpty!\n");
return;
}
if (i < 1 || i > L->len)
{
printf("'i' is error");
return;
}
e = L->data[i - 1];
if (i <= L->len)
{
for (int j = i-1; j < L->len; j++)
{
L->data[j] = L->data[j + 1];
}
}
L->len--;
}
SqList MergeList(SqList L1, SqList L2)
{
//Merged into an order table
SqList L3;
L3.len = 0;
int i = 0, j = 0, k = -1;
while (i < L1.len && j < L2.len)
{
if (L1.data[i] <= L2.data[j])
{
L3.data[++k] = L1.data[i++];
}
else
{
L3.data[++k] = L2.data[j++];
}
}
//L2 is empty, copy the rest of L1 to L3
while (i < L1.len)
{
L3.data[++k] = L1.data[i++];
}
//L1 is empty, copy the rest of L2 to L3
while (j < L2.len)
{
L3.data[++k] = L2.data[j++];
}
L3.len = k + 1;
return L3;
}
int main()
{
SqList L;
InitList(&L); //Initilization sequence table(初始化顺序表(注释尽量用英文来提升自己的英语水平))
//L = InitList();
CreatList(&L); //Creat the sequence table
int a; //'a' indicate that number to insert (a代表要插入的数字)
int i; //'i' indicate where to insert(i代表要插入的位置)
printf("Please enter the number to insert: ");
scanf("%d", &a);
printf("Please enter the number where to insert: ");
scanf("%d", &i);
InsertList(&L, i, a); //start to insert
/* for (int j = 0; j < L.len; j++)
{
cout << L.data[j] << " ";
}
*/
int e; //'e' indicates the deleted element(e表示删除的元素)
int d; //'d' indicates where to delete(d表示要删除元素的位置)
printf("Please enter the number where to delete: ");
scanf("%d", &d);
ListDelete(&L, d, e);
printf("e: %d", e);
SqList L2;
InitList(&L2); //Initilization sequence table
CreatList(&L2); //Creat the sequence table
SqList L3;
InitList(&L3);
L3 = MergeList(L, L2); //Merge sequence table
return 0;
}