数据结构线性表知识总结

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

顺序存储结构的C语言定义
#define maxsize=线性表可能达到的最大长度; typedef struct { ElemType elem[maxsize]; /* 线性表占用的数组空间*/ int last; /*记录线性表中最后一个元素在数组elem[ ] 中的位置(下标值),空表置为-1*/ } SeqList;
6
2017/9/7
2.2

线性表的顺序存储
2.2.1 线性表的顺序存储结构 2.2.2 线性表顺序存储结构上的基本运算
7
2017/9/7
顺序存储结构的定义
线性表的顺序存储是指用一组地址连续的存 储单元依次存储线性表中的各个元素,使得线性 表中在逻辑结构上相邻的数据元素存储在相邻的 物理存储单元中,即通过数据元素物理存储的相 邻关系来反映数据元素之间逻辑上的相邻关系。 采用顺序存储结构的线性表通常称为顺序表。 假设线性表中每个元素占k个单元,第一个元素 的地址为loc(a1),则第k个元素的地址为:
loc(ai) =loc(a1)+(i-1)×k
8
2017/9/7
顺序存储结构示意图
存储地址
Loc(a1)
内存空间状态
a1
逻辑地址
1
Loc(a1)+(2-1)k
a2
2

loc(a1)+(i-1)k

ai

i

loc(a1)+(n-1)k

an

n
...
loc(a1)+(maxlen-1)k
空闲
9
2017/9/7
Biblioteka Baidu
注意区分元素的序号和数组的下标,如a1的序号为1,而 其对应的数组下标为0。
10
2017/9/7
2.2.2 线性表顺序存储结构的基本运算

线性表的基本运算:
1.
2.
3. 4.
查找操作 插入操作 删除操作 顺序表合并算法

线性表顺序存储结构的优缺点分析
11
2017/9/7
查找操作
线性表的两种基本查找运算
线性表的定义
线性表 (Linear List) 是由 n (n≥0) 个类型相同的 数据元素 a1,a2,… , an 组成的有限序列 ,记做 (a1,a2,…,ai-1,ai,ai+1, …,an)。 数据元素之间是一对一的关系,即每个数据 元素最多有一个直接前驱和一个直接后继。 线性表的逻辑结构图为:
4
2017/9/7
线性表的特点
同一性:线性表由同类数据元素组成,每一
个ai必须属于同一数据对象。 有穷性:线性表由有限个数据元素组成,表 长度就是表中数据元素的个数。 有序性:线性表中相邻数据元素之间存在着 序偶关系<ai,ai+1>。
5
2017/9/7
2.1.2 线性表的抽象数据类型定义
1.
12
2017/9/7
线性表的查找运算
int Locate(SeqList L,ElemType e) { i=0 ; /*i为扫描计数器,初值为0,即从第一个元素开始比较*/ while ((i<=L.last)&&(L.elem[i]!=e) ) i++; /*顺序扫描表,直到找到值为key的元素,或扫描到表尾而没找到*/ if (i<=L.last) return(i); /*若找到值为e的元素,则返回其序号*/ else return(-1); /*若没找到,则返回空序号*/ }
13
2017/9/7
插入操作
线性表的插入运算是指在表的第i (1≤i≤n+1) 个位置,插入一个新元素e,使长度为n的线性表 (e1,…,ei-1,ei,…,en) 变成长度为n+1的线 性表(e1,…,ei-1,e,ei,…,en)。
线性表的插入运算算法。
14
2017/9/7
插入算法示意图
已知:线性表 (4,9,15,28,30,30,42,51,62),需在第4个元素之前插 入一个元素“21”。则需要将第9个位置到第4个位置的元素依次后 移一个位置,然后将“21”插入到第4个位置, 2 3 4 5 6 7 8 9 10 序号 1 4 9 15 28 30 30 42 51 62
数据结构线性表知识总结
1
2017/9/7
第2章 线性表



2.1 2.2 2.3 2.4
线性表的概念及运算 线性表的顺序存储 线性表的链式存储 一元多项式的表示及相加
2
2017/9/7
2.1

线性表的概念及运算
线性表的逻辑结构 线性表的抽象数据类型定义
2.1.1 2.1.2
3
2017/9/7
按序号查找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) 操作前提:L为未初始化线性表。 操作结果:将L初始化为空表。 (2)DestroyList(L) 操作前提:线性表L已存在。 操作结果:将L销毁。 (3)ClearList(L) 操作前提:线性表L已存在 。 操作结果:将表L置为空表。 ……… }ADT LinearList
移动元素
插入元素
4 4
9 9
15 15 21
28 28
30 30
30 30
42 42
51 51
62 62
15
2017/9/7
插入运算
int InsList(SeqList *L,int i,ElemType e) { int k; if( (i<1) || (i>L->last+2) ) /*首先判断插入位置是否合法*/ { 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]; L->elem[i-1]=e; /*在C语言中数组第i个元素的下标为i-1*/ L->last++; return(OK); } 算法演示(此处连接算法演示程序)。
相关文档
最新文档