【数据结构】顺序表的基本操作

可以说顺序表是最简单,最容易学习的数据结构,基本操作代码如下:

#include <iostream>
#include <stdlib.h>
using namespace std;

/**
 * 线性表的顺序存储表示(顺序表 Sequential list)
 * 参考书籍:《数据结构(C语言版)第二版》严蔚敏 李冬梅 吴伟民  人民邮电出版社
 * 作者: smileyan (qq837764072)
 * 时间: 2018/7/2
 */

// 宏定义
#define OK 1
#define ERROR 0
#define OVERFLOW -2

// 定义数据类型
typedef int Status;
typedef int ElemType;


// 定义结构体
#define MAXSIZE 100
typedef struct
{
    ElemType *elem;     // 存储空间的基地址
    int length;         // 当前长度
}SqList;                // 顺序表的结构类型

// 初始化
Status InitList(SqList& L)
{
    L.elem = new ElemType[MAXSIZE];
    if(!L.elem) exit(OVERFLOW);
    L.length=0;
    return OK;
}

// 取值 返回第i个元素(i>0)
Status GetElem(SqList L,int i,ElemType& e)
{
    if(i<1 || i>L.length)   return ERROR;
    e = L.elem[i-1];
    return OK;
}

// 查找 返回与e相等的第一个元素的位置i (i>0)  不存在则返回0
int LocateElem(SqList L,ElemType e)
{
    for(int i=0; i<L.length; i++)
    {
        if(L.elem[i]==e)    return i+1;
    }
    return 0;
}

// 将元素e插入到第i个位置
Status ListInsert(SqList& L,int i, ElemType e)
{
    if(i<1||i>L.length+1)   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]=e;
    ++L.length;
    return OK;
}

// 删除第i个元素
Status ListDelete(SqList& L,int i)
{
    if(i<1||i>L.length)     return ERROR;
    for(int j=i; j<=L.length-1; j++)
    {
        L.elem[j-1]=L.elem[j];
    }
    --L.length;
    return OK;
}

// 回收内存
Status DestroyList(SqList& L)
{
    delete L.elem;
    return OK;
}
int main()
{
    // 定义并初始化
    SqList list;
    InitList(list);

    ListInsert(list,1,4);
    int e;
    GetElem(list,1,e);
    cout<<e<<endl;
    DestroyList(list);

    return 0;
}

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

smile-yan

感谢您的支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值