顺序表的类型定义与基本操作
顺序表主要指数组,顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素,使得线性表中逻辑相邻的元素也物理相邻,采用顺序存储结构的线性表通常称为顺序表。
1. 顺序表的类型定义
typedef struct
{
ElemType *elem; // 存储空间的基地址
int length; // 当前长度
}SqList; // 顺序表的结构类型为 SqList
2. 顺序表的基本操作
顺序表的操作不多,但可以通过各种操作之间的组合形成新的操作(如合并)。以下给出 5 种基本操作:
(1) 顺序表的初始化
(2) 顺序表的查找
(3) 顺序表的插入
(4) 顺序表的删除
(5) 顺序表的销毁
算法1:顺序表的初始化
【代码实现】
Status InitList(SqList &L) // 顺序表的插入
{
L.elem = new ElemType[MAXSIZE];
if (!L.elem) exit(OVERFLOW);
L.length = 0;
return OK;
}
算法2:顺序表的查找
【代码实现】
Status LocateElem(SqList L, ElemType Info) // 顺序表的查找(默认待查找类型为字符串/字符数组)
{
for (int i = 0; i < L.length; i++)
{
if (!strcmp(L.elem[i], Info)) // strcmp 函数在比较结果相等时返回 0
return OK;
if (i == L.length - 1)
return ERROR;
}
}
算法3:顺序表的插入
【代码实现】
Status ListInsert(SqList &L, int i, ElemType Info) // 顺序表的插入
{
if ((i < 1) || (i > L.length)) return ERROR; // 插入位置不合法
if (L.length == MAXSIZE) return ERROR; // 顺序表已满
for (int j = L.length - 1; j >= i - 1; j--) // 插入位置后的元素后移
L.elem[j + 1] = L.elem[j];
L.elem[i - 1] = Info; // 待插入元素进入顺序表
++L.length;
return OK;
}
算法4:顺序表的删除
【代码实现】
Status ListDelete(SqList &L, int i) // 顺序表的删除
{
if ((i < 1) || (i > L.length)) return ERROR; // 删除位置不合法
for (int j = i; j < L.length; j++) // 删除位置后的元素前移
L.elem[j - 1] = L.elem[j];
--L.length;
cout << endl;
return OK;
}
算法5:顺序表的销毁
【代码实现】
Status DestroyList(SqList &L) // 销毁顺序表
{
if (L.elem) delete[] L.elem;
L.length = 0;
return OK;
}