04 什么是线性表

什么是线性表

一、为什么需要线性表

例如:

​ 在程序中保存指定班级的所有的学生信息(暂时只需要处理姓名、年龄),该班级最多可容纳30人,且可进行数量上的增减。

业务功能:

​ 1)这个项目中需要处理的对象是什么:学生

​ 2)需要存储多少个这样的对象:30

​ 3)其他的要求:人数可增可减

​ 项目中涉及学生信息,根据需求,目前学生所包含的属性只有姓名、年龄:

c 复制代码
typedef struct _student
{
    // 姓名
    char name[20];
    // 年龄
    int age;
} STUDENT;

​ 需求中要存储一个班的学生,学生人数在 30 以内,所以可以使用数组为容器来解决该问题:

​ 要求可以对数组进行增减操作:

二、线性表的定义

​ 线性结构的应用:

​ 食堂排队打饭

​ 上课时老师按照点名表进行点名

​ 使用搜索引擎查询信息

​ 打牌时牌的摆放

​ ​ ......

线性表:0个或多个数据特性相同的元素构成的有限序列。

​ 线性表中数据元素的个数定义为线性表的长度 ,如果长度为0,则称其为空表

​ 一个非空的线性表,具有以下特点:

​ ​ ①存在唯一的一个被称作"第一个"的数据元素

​ ​ ②存在唯一的一个被称作"最后一个"的数据元素

​ ​ ③除第一个之外,结构中的每个数据元素都只有一个前驱

​ ​ ④除最后一个外,结构中的每个数据元素都只有一个后继

三、线性表的抽象数据类型

​ 线性表的操作

​ 创建线性表

​ 插入元素

​ 删除元素

​ 搜索元素

​ . . .

c 复制代码
ADT 线性表{
数据对象:D={ai | ai∈ElemSet, i=1,2,...n,n≥0}
数据关系:S={<ai-1,ai> | ai-1,ai∈D,i=2,...,n}
基本操作:
    init_list(*list)
        操作结果:初始化线性表
    get_length(list)
        初始条件:线性表list已存在
        操作结果:返回线性表的长度
    is_empty(list)
        初始条件:线性表list已存在
        操作结果:若list为空则返回1,否则返回0
    show(list)
        初始条件:线性表list已存在
        操作结果:对线性表list进行遍历
    get(list, i, *e)
        初始条件:线性表list已存在,且1 ≤ i ≤ get_length(list)
        操作结果:用e返回list中第i个元素的值
    insert(*list, i, e)
        初始条件:线性表已存在,且1 ≤ i ≤ get_length(list)+1
        操作结果:在list中第i个位置插入新的数据元素e,list的长度加1
    delete(*list, i)
        初始条件:线性表已存在,且1 ≤ i ≤ get_length(list)
        操作结果:删除list中的第i个数据元素,list的长度减1
    update(*list, i, e)
        初始条件:线性表已存在,且1 ≤ i ≤ get_length(list)
        操作结果:将list中第i个数据元素的值修改为e
    search(list, i, e)
        初始条件:线性表已存在,且1 ≤ i ≤ get_length(list)
        操作结果:从list中的第i个元素开始往后查找元素e,并返回第一次找到时的位置,未找到则返回0
}ADT 线性表
相关推荐
北域码匠20 小时前
冒泡排序太慢?鸡尾酒排序双向优化,原生 C# 零第三方库完整代码
数据结构·排序算法·泛型·c# 算法·鸡尾酒排序·原生 c# 开发·冒泡排序优化·嵌入式算法
Darling噜啦啦8 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
小小工匠9 天前
Redis - 事务机制:能实现 ACID 属性吗
数据结构·redis·性能优化·并发·持久化
玖玥拾9 天前
C/C++ 数据结构(七)栈、容器适配器
c语言·数据结构·c++··容器适配器
Qres8219 天前
算法复键——树状数组
数据结构·算法
牛油果子哥q9 天前
并查集(DSU)超精讲,路径压缩、按秩合并、万能模板、连通性判定、最小生成树与刷题实战全解
数据结构·c++·最小生成树·并查集
凌波粒9 天前
LeetCode--491.递增子序列(回溯算法)
数据结构·算法·leetcode
WL学习笔记9 天前
单项不带头不循环链表
数据结构·链表
小糯米6019 天前
JS 数组
数据结构·算法·排序算法
小欣加油9 天前
leetcode3612 用特殊操作处理字符串I
数据结构·c++·算法·leetcode·职场和发展