数据结构(严蔚敏、吴伟民)——读书笔记-2、 线性表及其基本运算、顺序存储结构
2015-08-06 19:09
309 查看
第二章 线性表
2.1 线性表及其基本运算
2.2 线性表的顺序存储结构
2.3 线性表的链式存储结构
1、线性表:是n个数据元素的有限序列。
直接前驱元素、直接后继元素,n = 0时,称为空表。
一个数据元素可以有若干个数据项组成。在这种情况下,常把数据元素称为记录,含有大量记录的线性表又称为文件。
2、基本运算
InitList(&L)
初始化操作 设定一个空的线性表L
ListLength(L)
求长度函数
函数值为线性表L中数据元素的个数
GetElem(L,i,&e)
取元素函数
1<=i <=Length(L)时返回L中第i个数据元素给e,否
则为空元素NULL。i称为该数据元素在L中的位序。
PriorElem(L,cur_e,&pre_e)
前驱函数 cur_e是L中的一个数据元素,若它的位序大于1,则函数
值为cur_e前驱pre_e,否则为NULL
NextElem(L,cur_e,&next_e)
求后继元素
若cur_e的位序小于表长,则函数值为elm的后继
next_e,否则为NULL
LocateElem(L,e,compare())
定位函数
给定值e,若e不在表中,则返回0,否则返回e在表
中第一次出现时的位序
ListInsert(&L,i,e)
前插操作
在第i个元素之前插入新元素b,i的取值范围为: 1<=i<=n+1;i=n+1表示在表尾插入,n为表长
ListDelete(&L,i,e)
删除操作
删除线性表L中的第i个元素,1<=i<=n,并用e返回
其值
ListEmpty(L)
判空表函数
若L为空表,则返回布尔值”true“,否则返回布尔 值“false”
ClearList(&L)
表置空操作
将L置为空表
3、线性表的顺序存储结构
线性表的顺序存储结构指的是用一组地址连续的存储单元依次存储线性表的数据元素。
Loc(ai) = Loc(a1) + (i - 1) *k
4、线性表的插入和删除操作
线性表的动态分配顺序存储结构
为顺序表增加一个大小为存储LISTINCREMENT个数据元素的空间。
插入算法的思路:
>
如果插入位置不合理,抛出异常;
>
如果线性表长度大于等于数组长度,则抛出异常或者动态增加容量;
>
从最后一个元素开始向前遍历到第 i 个位置,分别将它们都向后移动一个位置;
>
将要插入的元素填入位置 i 处;
>
表长加 1。
算法:
删除算法的思路:
>
如果删除位置不合理,抛出异常;
>
取出删除元素;
>
从删除元素位置开始遍历到最后一个元素位置,分别将他们都向前移动一个位置;
>
表长减 1。
算法:
插入算法和删除算法的时间复杂度都为 O(n)
2.1 线性表及其基本运算
2.2 线性表的顺序存储结构
2.3 线性表的链式存储结构
1、线性表:是n个数据元素的有限序列。
直接前驱元素、直接后继元素,n = 0时,称为空表。
一个数据元素可以有若干个数据项组成。在这种情况下,常把数据元素称为记录,含有大量记录的线性表又称为文件。
2、基本运算
InitList(&L)
初始化操作 设定一个空的线性表L
ListLength(L)
求长度函数
函数值为线性表L中数据元素的个数
GetElem(L,i,&e)
取元素函数
1<=i <=Length(L)时返回L中第i个数据元素给e,否
则为空元素NULL。i称为该数据元素在L中的位序。
PriorElem(L,cur_e,&pre_e)
前驱函数 cur_e是L中的一个数据元素,若它的位序大于1,则函数
值为cur_e前驱pre_e,否则为NULL
NextElem(L,cur_e,&next_e)
求后继元素
若cur_e的位序小于表长,则函数值为elm的后继
next_e,否则为NULL
LocateElem(L,e,compare())
定位函数
给定值e,若e不在表中,则返回0,否则返回e在表
中第一次出现时的位序
ListInsert(&L,i,e)
前插操作
在第i个元素之前插入新元素b,i的取值范围为: 1<=i<=n+1;i=n+1表示在表尾插入,n为表长
ListDelete(&L,i,e)
删除操作
删除线性表L中的第i个元素,1<=i<=n,并用e返回
其值
ListEmpty(L)
判空表函数
若L为空表,则返回布尔值”true“,否则返回布尔 值“false”
ClearList(&L)
表置空操作
将L置为空表
3、线性表的顺序存储结构
线性表的顺序存储结构指的是用一组地址连续的存储单元依次存储线性表的数据元素。
Loc(ai) = Loc(a1) + (i - 1) *k
4、线性表的插入和删除操作
线性表的动态分配顺序存储结构
为顺序表增加一个大小为存储LISTINCREMENT个数据元素的空间。
插入算法的思路:
>
如果插入位置不合理,抛出异常;
>
如果线性表长度大于等于数组长度,则抛出异常或者动态增加容量;
>
从最后一个元素开始向前遍历到第 i 个位置,分别将它们都向后移动一个位置;
>
将要插入的元素填入位置 i 处;
>
表长加 1。
算法:
删除算法的思路:
>
如果删除位置不合理,抛出异常;
>
取出删除元素;
>
从删除元素位置开始遍历到最后一个元素位置,分别将他们都向前移动一个位置;
>
表长减 1。
算法:
插入算法和删除算法的时间复杂度都为 O(n)
相关文章推荐
- 【暑假】[实用数据结构]动态范围查询问题
- 【暑假】[实用数据结构]范围最小值问题(RMQ)
- python数据结构
- 【暑假】[实用数据结构]动态连续和查询问题
- 数据结构(严蔚敏、吴伟民)——读书笔记-1、绪论
- 数据结构基础(18) --哈希表的设计与实现
- 数据结构基础(17) --二叉查找树的设计与实现
- 数据结构基础(16) --树与二叉树
- 数据结构基础(15) --基数排序
- 数据结构基础(14) --链式队列的设计与实现
- 数据结构基础(13) --链式栈的设计与实现
- 数据结构基础(12) --双向循环链表的设计与实现
- 数据结构基础(11) --循环链表的设计与实现
- 数据结构基础(10) --单链表迭代器的设计与实现
- 数据结构基础(9) --单链表的设计与实现(2)之高级操作
- 数据结构基础(8) --单链表的设计与实现(1)之基本操作
- 数据结构基础(7) --循环队列的设计与实现
- 数据结构基础(6) --顺序栈的设计与实现
- 数据结构基础(5) --归并排序
- 数据结构基础(4) --快速排序