数据结构C语言描述(耿国华)第二章
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
操作前提:L为未初始化线性表。 操作结果:将L初始化为空表。 操作前提:线性表L已存在。 操作结果:将L销毁。 操作前提:线性表L已存在 。 操作结果:将表L置为空表。
………
}ADT LinearList
6
2020/11/7
2.2 线性表的顺序存储
2.2.1 线性表的顺序存储结构 2.2.2 线性表顺序存储结构上的基本运算
4 9 15 28 30 30 42 51 62
移动元素 4 9 15
28 30 30 42 51 62
插入元素 4 9 15 21 28 30 30 42 51 62
15
2020/11/7
插入运算
int InsList(SeqList *L,int i,ElemType e)
{ int k;
if( (i<1) || (i>L->last+2) ) /*首先判断插入位置是否合法*/
来自百度文库
7
2020/11/7
顺序存储结构的定义
线性表的顺序存储是指用一组地址连续的存 储单元依次存储线性表中的各个元素,使得线性 表中在逻辑结构上相邻的数据元素存储在相邻的 物理存储单元中,即通过数据元素物理存储的相 邻关系来反映数据元素之间逻辑上的相邻关系。 采用顺序存储结构的线性表通常称为顺序表。
假设线性表中每个元素占k个单元,第一个元素 的地址为loc(a1),则第k个元素的地址为:
1. 按序号查找GetData(L,i):要求查找线性表L中第i 个数据元素,其结果是L.elem[i-1]或L->elem[i-1]。
2. 按内容查找Locate(L,e): 要求查找线性表L中与 给定值e相等的数据元素,其结果是:若在表L中找 到与e相等的元素,则返回该元素在表中的序号;若 找不到,则返回一个“空序号”,如-1。
抽象数据类型定义 :
ADT LinearList{
数据元素:D={ai| ai∈D0, i=1,2,…,n n≥0 ,D0为某一数据对象} 关系:S={<ai,ai+1> | ai, ai+1∈D0,i=1,2, …,n-1} 基本操作:
(1)InitList(L) (2)DestroyList(L) (3)ClearList(L)
线性表的查找运算算法描述为:
12
2020/11/7
线性表的查找运算
int Locate(SeqList L,ElemType e) { i=0 ; /*i为扫描计数器,初值为0,即从第一个元素开始比较*/
while ((i<=L.last)&&(L.elem[i]!=e) ) i++; /*顺序扫描表,直到找到值为key的元素,或扫描到表尾而没找到*/
loc(ai) =loc(a1)+(i-1)×k
8
2020/11/7
顺序存储结构示意图
存储地址
Loc(a1) Loc(a1)+(2-1)k
…
loc(a1)+(i-1)k
…
loc(a1)+(n-1)k
...
loc(a1)+(maxlen-1)k
内存空间状态
a1 a2
…
ai
…
an
9
逻辑地址
1 2
…
i
…
if (i<=L.last) return(i); /*若找到值为e的元素,则返回其序号*/
else return(-1); /*若没找到,则返回空序号*/
}
13
2020/11/7
插入操作
线性表的插入运算是指在表的第i (1≤i≤n+1) 个位置,插入一个新元素e,使长度为n的线性表 (e1,…,ei-1,ei,…,en) 变成长度为n+1的线 性表(e1,…,ei-1,e,ei,…,en)。
注意区分元素的序号和数组的下标,如a1的序号为1,而 其对应的数组下标为0。
10
2020/11/7
2.2.2 线性表顺序存储结构的基本运算
线性表的基本运算:
1. 查找操作 2. 插入操作 3. 删除操作 4. 顺序表合并算法
线性表顺序存储结构的优缺点分析
11
2020/11/7
查找操作
线性表的两种基本查找运算
2020/11/7
线性表的定义
线性表(Linear List)是由n (n≥0)个类型相同的 数据元 素 a1,a2,…,an组成 的有限 序 列 ,记做 (a1,a2,…,ai-1,ai,ai+1, …,an)。 数据元素之间是一对一的关系,即每个数据 元素最多有一个直接前驱和一个直接后继。 线性表的逻辑结构图为:
线性表的插入运算算法。
14
2020/11/7
插入算法示意图
已知:线性表 (4,9,15,28,30,30,42,51,62),需在第4个元素之前插 入一个元素“21”。则需要将第9个位置到第4个位置的元素依次后 移一个位置,然后将“21”插入到第4个位置,
序号 1 2 3 4 5 6 7 8 9 10
{ printf(“插入位置i值不合法”);return(ERROR); }
if(L->last>=maxsize-1)
{ printf(“表已满无法插入”); return(ERROR); }
for(k=L->last;k>=i-1;k--) /*为插入元素而移动位置*/
L->elem[k+1]=L->elem[k];
数据结构课件
西北大学计算机系
1
2020/11/7
第2章 线性表
2.1 2.2 2.3 2.4
线性表的概念及运算 线性表的顺序存储 线性表的链式存储 一元多项式的表示及相加
2
2020/11/7
2.1 线性表的概念及运算
2.1.1 线性表的逻辑结构 2.1.2 线性表的抽象数据类型定义
3
n
空闲
2020/11/7
顺序存储结构的C语言定义
#define maxsize=线性表可能达到的最大长度; typedef struct {
ElemType elem[maxsize]; /* 线性表占用的数组空间*/ int last; /*记录线性表中最后一个元素在数组elem[ ]
中的位置(下标值),空表置为-1*/ } SeqList;
4
2020/11/7
线性表的特点
➢ 同一性:线性表由同类数据元素组成,每一 个ai必须属于同一数据对象。
➢ 有穷性:线性表由有限个数据元素组成,表 长度就是表中数据元素的个数。
➢ 有序性:线性表中相邻数据元素之间存在着 序偶关系<ai,ai+1>。
5
2020/11/7
2.1.2 线性表的抽象数据类型定义