目录
1.线性表的定义和基本操作
- 定义---逻辑结构
- 基本操作--运算
2.线性表的顺序表示
- 定义(如何用代码实现)
- 基本操作的实现
注:数据结构三要素:逻辑结构、数据的运算、存储结构(物理结构)。存储结构不同,运算的实现方式不同
具体内容
1.线性表的定义和基本操作
线性表的定义
线性表是具有相同数据类型的n(n>=0)个数据元素的有限序列。其中n为表长,当n等于零时,线性表示一个空表,若用L命名线性表,则其一般表示为,L=(a1,a2...ai,ai+1..an)
几个概念要注意
- ai是线性表中的"第i个"元素线性表中的位序。(位序从1开始,数组下标从0开始)。
- a1是表头元素,an是表尾元素。
- 除第一个元素外,每个元素有且仅有一个直接前驱,除最后一个元素外,每个元素有且仅有一个直接后继。
由此得出线性表特点:
- 表中元素的个数有限,
- 表中元素具有逻辑上的顺序性,表中元素有其先后次序的。
- 表中元素都是数据元素,每个元素都是单个元素
- 表中元素的数据类型都相同,这意味着每个元素占有型都相同,这意味着每个元素占有相同大小的存储空间。
- 表中元素具有抽象性,仅仅讨论元素间的逻辑关系而不考虑元素究竟表示什么内容
线性表的基本操作
InitList(&L) 初始化表。构造一个空的线性表L,分配内存空间销毁操。
DestoryList(&L)销毁操作。销毁线性表,并释放线性表L所占用的内存空间
ListInsert(&L,i,e)插入操作。在表L中的第i个位置上插入指定元素e
ListDelete(&L,i,&e)删除操作。删除表L中第i个位置的元素,并用e返回删除元素的值。
LocateElem(L,e)按值查找操作。在表L中查找具有给定关键字值的元素。
GetElem(L,i)按位查找操作。在表中L中第i个位置的元素的值
其他常用操作
Length(L)求表长。返回线性表L的长度,即L中数据元素的个数。
PrintList(L)输出操作。按前后顺序输出线性表L的所有元素值
Empty(L)判空操作,若L为空表,则返回true,否则返回false
Tips:
(1)对数据的操作(记忆思路)--创销,增删改查
(2)C语言函数的定义:<返回值类型>函数名(<参数1类型>参数1,<参数2类型>参数2....)
(3)实际开发中,可根据实际需求定义其他的基本操作
(4) 函数名和参数的形式命名都可以改变,命名要有可读性
(5)什么时候要传入引用“&”---对参数的修改结果需要“带回来”
没有带回来:
带回来了
为什么要实现对数据结构的基本操作呢?
(1)团队合作编程,定义的数据结构要让别人能够很方便的使用(封装)
(2)将常用操作/运算封装成函数,避免重复工作,降低出错风险。
总结
2.线性表的顺序表示
定义
顺序表--用顺序存储的方式实现线性表的顺序存储,把逻辑上相邻的元素存储在物理位置上也相邻的存储单元中,元素之间的关系由存储单元的邻接关系来体现。
顺序表的实现---静态分配
案例:
如果去掉(2)部分代码如下,会产生脏数据:
L.length=0不可以省略。
注意:一维数组可以是静态分配的,也可以是动态分配的。
在静态分配时,由于数组的大小和空间事先已经固定,一旦空间占满再加入,新的数据就会产生溢出,进而导致程序崩溃。
顺序表的实现---动态分配
案例
顺序表的特点:
- 随机访问,即可以在O(1)时间内找到第i个元素。
- 存储密度高,每个节点只存储数据元素
- 拓展容量不方便,即便采用动态分配的方式实现。拓展长度的时间复杂度也比较高。
总结: