顺序表的类型定义与基本操作

顺序表的类型定义与基本操作

顺序表主要指数组顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素,使得线性表中逻辑相邻的元素也物理相邻,采用顺序存储结构的线性表通常称为顺序表。

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;
}
  • 6
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值