#include "fatal.h"
// 初始化线性表
Status InitList_Sq(SqList *L)
{
L->elem = (SqList *) malloc(sizeof(SqList) * MAXSIZE);
if(!L->elem) exit(OVERFLOW);
L->length = 0;
return OK;
}
// 销毁线性表
void DestroyList(SqList *L)
{
if(L->elem)
free(L->elem);
L->elem = NULL;
}
// 清空线性表L
void ClearList(SqList *L)
{
L->length = 0;
}
// 求线性表L的长度
int GetLength(SqList L)
{
return L.length;
}
// 判断线性表是否为空
int IsEmpty(SqList L)
{
if(L.length == 0) return 1;
else return 0;
}
// 取值
Status GetElem(SqList L, int i, ElemType *e)
{
if(i < 1 || i > L.length) return ERROR;
*e = L.elem[i - 1];
return OK;
}
// 查找
int LocateElem(SqList L, ElemType e)
{
int len = GetLength(L);
for(int i = 0; i < len; i++)
if(e == L.elem) return i + 1;
return 0;
}
// 插入
Status ListInsert(SqList *L, int i, ElemType e)
{
int k;
if(i < 1 || i > L->length + 1) return ERROR;
for(k = L->length; k >= i; k--)
L->elem[k] = L->elem[k - 1];
L->elem[i - 1] = e;
L->length++;
return OK;
}
// 删除
Status ListDelete(SqList *L, int i)
{
int j;
if(i < 1 || i > L->length) return ERROR;
for(j = i; j < L->length; j++)
L->elem[j - 1] = L->elem[j];
L->length--;
return OK;
}
// 遍历
void Traverse(SqList L)
{
int i, len = GetLength(L);
for(i = 0; i < len; i++)
printf("%c ", L.elem[i]);
printf("\n");
}
int main()
{
SqList L;
char e;
if(InitList_Sq(&L))
{
printf("OK\n");
}
ListInsert(&L, 1, 'a');
ListInsert(&L, 2, 'c');
ListInsert(&L, 3, 'd');
ListInsert(&L, 4, 'e');
ListInsert(&L, 2, 'z');
ListDelete(&L, 2);
printf("%d\n", GetLength(L));
Traverse(L);
GetElem(L, 2, &e);
printf("%c\n", e);
return 0;
}
参考:
- 数据结构与算法基础(青岛大学-王卓)
- 《数据结构》严蔚敏