什么是线性表
一、为什么需要线性表
例如:
在程序中保存指定班级的所有的学生信息(暂时只需要处理姓名、年龄),该班级最多可容纳30人,且可进行数量上的增减。
业务功能:
1)这个项目中需要处理的对象是什么:学生
2)需要存储多少个这样的对象:30
3)其他的要求:人数可增可减
项目中涉及学生信息,根据需求,目前学生所包含的属性只有姓名、年龄:
typedef struct _student
{// 姓名char name[20];// 年龄int age;
} STUDENT;
需求中要存储一个班的学生,学生人数在 30 以内,所以可以使用数组为容器来解决该问题:
要求可以对数组进行增减操作:
二、线性表的定义
线性结构的应用:
食堂排队打饭
上课时老师按照点名表进行点名
使用搜索引擎查询信息
打牌时牌的摆放
……
线性表:0个或多个数据特性相同的元素构成的有限序列。
线性表中数据元素的个数定义为线性表的长度,如果长度为0,则称其为空表。
一个非空的线性表,具有以下特点:
①存在唯一的一个被称作"第一个"的数据元素
②存在唯一的一个被称作“最后一个"的数据元素
③除第一个之外,结构中的每个数据元素都只有一个前驱
④除最后一个外,结构中的每个数据元素都只有一个后继
三、线性表的抽象数据类型
线性表的操作
创建线性表
插入元素
删除元素
搜索元素
. . .
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,否则返回0show(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的长度加1delete(*list, i)初始条件:线性表已存在,且1 ≤ i ≤ get_length(list)操作结果:删除list中的第i个数据元素,list的长度减1update(*list, i, e)初始条件:线性表已存在,且1 ≤ i ≤ get_length(list)操作结果:将list中第i个数据元素的值修改为esearch(list, i, e)初始条件:线性表已存在,且1 ≤ i ≤ get_length(list)操作结果:从list中的第i个元素开始往后查找元素e,并返回第一次找到时的位置,未找到则返回0
}ADT 线性表