线性表-顺序存储结构

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;
}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言中的线性可以通过顺序存储结构来实现。顺序存储结构是指将线性的元素连续地存储在一块连续的内存空间中,通过元素在内存中的物理地址顺序关系来线性中元素之间的逻辑关系。 在C语言中,可以使用数组来实现顺序存储结构线性。例如,定义一个包含n个元素的线性,可以使用一个一维数组来存储。数组的下标示元素在线性中的位置,数组元素的值存储着具体的数据。 顺序存储结构线性具有以下特点: 1. 随机存取:可以通过下标直接访问任意位置的元素,时间复杂度为O(1)。这使得可以以较低的代价访问线性中的元素。 2. 插入和删除操作效率较低:在顺序存储结构中,如果要在中间位置插入或删除一个元素,需要将插入或删除位置后的所有元素依次往后或往前移动,时间复杂度为O(n),其中n是线性的长度。 3. 存储空间的浪费:顺序存储结构需要提前分配足够的连续内存空间,如果线性的长度不确定或经常变化,可能会造成存储空间的浪费。 4. 需要事先知道线性的大小:在使用顺序存储结构线性时,需要事先知道线性的大小,以便分配相应大小的内存空间。 总之,C语言的线性可以通过数组实现顺序存储结构。虽然具有一些限制,但在访问元素方面具有快速的优势,是一种常用的线性实现方式。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值