线性表-顺序存储结构

1.线性表的声明

#define MAXSIZE 20 //存储空间初始分配量
typedef int ElemType; //ElemType 根据情况而定,这里暂时使用int

typedef struct {
    ElemType data[MAXSIZE]; //数组存储数据元素,最大值为MAXSIZE
    int length; //线性表当前长度
}Sqlist;
//其他相关声明
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int Status;
Status ListInit(Sqlist* L);
Status GetElem(Sqlist L, int i, ElemType* e);
Status ListInsert(Sqlist* L, int i, ElemType e);
Status ListDelete(Sqlist* L, int i, ElemType* e);

2.线性表的初始化

Status ListInit(Sqlist *L) {
    if (L != NULL)
    {
        //(*L).length = 0;
        L->length = 0;
    }

    for (int i = 0; i < 10; i++)
    {
        if (L != NULL) {
            L->data[i] = i + 1;
            L->length++;
        }
    }
    return OK;
}

3. 获取线性表中的元素

Status GetElem(Sqlist L,int i, ElemType *e) {
    if (L.length == 0 || i<1 || i>L.length) return ERROR;
    
    *e = L.data[i - 1];
    return OK;
}

4.线性表中插入元素

//插入算法的思路
//如果插入位置不合理,抛出异常
//如果线性表长度大于等于数组长度,则抛出异常或动态增加容量
//从最后一个元素开始向前遍历到地i个位置,分别将他们都向后移动一个位置
//将要出入元素填入位置i处
//表长加1
Status ListInsert(Sqlist *L, int i, ElemType e) {
    if (L->length == MAXSIZE) return ERROR; //顺序线性表已经满了
    if (i<1 || i>L->length) return ERROR; //i不在范围内

    int k;
    if (i <= L->length) {
        for (k = L->length-1; k>=i-1; k--)
        {
            L->data[k + 1] = L->data[k];
        }
    }
    L->data[i - 1] = e;//将新元素插入
    L->length++;
    return OK;
}

5.线性表中删除元素

//删除算法的思路
//如果删除位置不合理,抛出异常
//取出删除元素
// 从删除元素位置开始遍历到最后一个元素位置,分别将他们都向前移动一个位置
// 表长减1
Status ListDelete(Sqlist *L, int i, ElemType *e) {
    int k;
    if (L->length == 0) return ERROR; //线性表为空
    if (i<1 || i>L->length) return ERROR; //删除位置不正确
    *e = L->data[i - 1];
    if (i<L->length) //如果删除不是最后位置
    {
        for (k = i; k < L->length; k++)
        {
            L->data[k - 1] = L->data[k];
        }
    }
    L->length--;
    return OK;
}

备注:参考《大话数据结构》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值