2.2.1 线性表的定义和基本操作 (王道考研)

线性表的定义和基本操作

学习目标:

  • 线性表
    • 定义
    • 基本操作

1. 线性表的定义

线性表是具有相同的数据类型的n个元素的有限序列,其中n为表长,当n=9时线性表是一个空表
直接前驱
直接后继

2. 先行表的基本操作

基本操作

1、initList(&L);
2、DestoryList(&L)
3. ListInsert(&L, i, e)
4. ListDelete(&L, i, &e)
5. LocateElem(L, e)
6. GetElem(L, e)

其他操作
  1. Length(L)
  2. PrintList(L)
  3. Empty(L)

线性表存储/物理结构

  • 线性表
    • 存储/物理结构
      • 顺序表
        · 定义 及 代码实现
        · 基本操作实现
      • 链表
顺序表定义

顺序表——用顺序存储的方式实现线性表的顺序存储

顺序表的实现方式——静态分配

静态分配的局限性较大,以为之前已经分配了内存,因此可能出现内存不够用的情况,建议直接放弃治疗

上代码
#include <stdio.h>

#define MaxSize 10
#define ElemType int

typedef struct SqList {
    ElemType data[MaxSize];
    int length;
} SqList;


SqList initList(SqList l);

int main() {
    SqList L;
    L = initList(L);
    return 0;
}

/**
 * 初始化线性表
 * @param l
 * @return
 */
SqList initList(SqList l) {
    for (int i = 0; i < MaxSize; ++i) {
        l.data[i] = 0;                      // 覆盖系统分配内存中的脏数据
    }
    l.length = 0;                           // 顺序表的初始长度为0
    return l;
}



顺序表的实现方式——动态分配

key: 动态申请和释放内存空间
  C —— malloc free 函数
   L.data = (Element *) malloc (sizeof(ElemType) * initSize);’


#include <stdlib.h>
#define InitSize 10             // 顺序表的初始长度为10


typedef struct {
    int *Data;
    int MaxSize;
    int length;
} SqListDongTai;

SqListDongTai InitList(SqListDongTai L);

SqListDongTai IncreaseSize(SqListDongTai l, int i);

int main() {
    SqListDongTai L;
    L = InitList(L);
    //   往顺序表中加入几个元素 之后发现预留的内存空间不够,于是增大动态空间
    L = IncreaseSize(L, 5);
    return 0;
}

SqListDongTai IncreaseSize(SqListDongTai l, int i) {

    int *p = l.Data;
    l.Data = (int *) malloc((l.MaxSize + i) * sizeof (int));
    for (int j = 0; j < l.length; ++j) {
        l.Data[j] = p[j];       //经原来的数据复制到新的数据空间
    }
    l.MaxSize = l.MaxSize + i;
    free(p);
    return l;
}

/**
 * 初始化动态数组
 * @param L
 * @return
 */
SqListDongTai InitList(SqListDongTai L) {
    L.Data = (int *) malloc(InitSize * sizeof(int));
    L.length = 0;
    return L;
}

总结一下

顺序表的特点

  1. 随机访问,即可以子啊O(1)的时间内找到第i个元素
  2. 存储密度高,每个节点都只存储数据元素
  3. 拓展容量很不方便
  4. 插入、删除操作很不方便
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Jupyter Aaron

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值