第2章 数据结构(顺序表和线性链表)PPT课件

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

DELETELIST(V,n,i)
1.if(i<1)OR(i>n) then{参数错return} 2.for j=i to n-1 step(1)
3. V[j]V[j+1] 4.end(j) 5.n n-1 7.return
2020/11/14
16
Questions:
如删除最后一个元素,作何操作?(最好情 形)
对于计算机存储空间,前后件元素不一定相邻,且前 件元素不一定在前,后件元素不一定在后.
例:C中线性表的数组和动态链表实现
2020/11/14
7
• 数据类型(data type):是指程序设计语言中允许的 变量类型。
• 注意:每一个变量必须与一个且仅与一个数据类型相联系, 规定了该变量可以设定的值的集合,及这个集合上的一组 运算。(语言不同而不同)
3
2.1.2 基本概念和术语
• 数据(data):对客观事物的符号表示,信息的载 体,可用计算机表示和处理。
• 数(figure/number)、文本(text)、图形(graph)、视频 (video)、声音(audio)和图像(image)等。
• 数据元素(data element/node/record):是数据集 合中的一个个体,是数据的基本单位。
3.return (3)插入运算
从头开始
问题描述:在头指针为head的链表中,在值为a的结点前
插入一个值为b的结点。如为空表,则b为第一个结点,
如表中无a元素,则将b插入链表的末尾。
2020/11/14
26
2020/11/14
27
INLINKST(head,a,b) 1.GETNODE(p); data(p) b;//取得一个新结点p// 2.if(head=nil)then{head p;next(p) nil;return} //空表情况// 3.if(data(head)=a)then{next(p) head; headp;return}//a为第一个 结点,改进待叙,不同:head指向第一个结点.第一个结点 变了,所以要修改head// 4.LOOKFOR(head,a,q)//寻找元素a的前趋结点q// 5.next(p)next(q);next(q)p 6.return
如下图:
地址
内存
1000
1001
head a1
a2
a3
a4
1002
a2
1008
1003
1004
1005
a1
1006
1002
物理上分散、逻辑上有序
1007
a4
1008
a3
1009
nil 1007
图2.5 线性表的链式结构
2020/11/14
21
结点结构:
数据域(存放元素值)、指针域(后继元素的地址)、头指针(head)、 空指针(nil或)。
算法描述语言中,指针类型结构表示为:
a data
next
•数据域和指针域的访问:data(a)、next(a) 。 •对应C中的指针数据类型。
2、线性链表的基本算法 •特点:不移动元素、修改指针、动态分配(动态生 成或回收链表的结点)。
2020/11/14
22
(1)基本操作: • 指针赋值、指针移动、插入某结点前和插入某结点后。 • 符号含义:
2020/11/14
9
2.2.1 线性表的定义和运算种类
线性表(线性数据结构)是数据元素的有限序列。
例:人民币面值 一年四季…
现实中客观存在的实体经过数学抽象后都可用线性表 的一般形式表示: L=(a1,a2,…,an) L:线性表,ai元素(属于某数据对象),n表长,n=0时 为空表。
结构特点:前趋后继(前件后件)关系
2020/11/14
6
数据结构包括:
逻辑结构与物理结构:
逻辑结构(数据结构):研究数据元素及其关系的 数学特性;
物理结构(存储结构):是逻辑结构在计算机中的 映象,即具体实现,用高级语言中各种数据类型来 描述这种实现。数据在物理空间中的存储方式.
同一种逻辑结构,可对应不同物理结构,物理结构不 同,则算法不同.
删除第一个元素,又如何?(最坏情形)
2020/11/14
17
3、算法的时间复杂度分析
主要消耗在移动元素上,与n(问题尺度)、i(输 入)有关 ,用平均移动次数来分析平均性能。
设pi是在第i个元素前插入一个元素的概率,则 在长为n的表中插入一个元素所需的平均移动次 数为:
n1
Ein pi(ni1) i1
数据元素之间是线性关系,即两唯一(首结点和终结点)、一 前趋一后继。
定义:L=(D,R) D={a1,a2,…,an},R={<ai-1,ai>| ai-1 ,aiD,2≤i≤n}
2020/11/14
10
非线性表(非线性数据结构):如果一个 数据结构不是线性结构,则称之为非线性 结构。
如辈分关系。
• 注意:不一定是单个的数字或字符,它本身也可能是若 干个数据项的组合。如:学生成绩登记表,数据元素对 应记录,记录又包含字段—嵌套定义
• 数据对象(data object):具有相同性质的数据元 素的集合
• 数据结构(data structure):指同一数据对象中各 数据元素间存在的关系(relationship)。
一半元素; 当n较大时是相当可观的; 适用于不频繁进行插入、删除运算,表中元素相对稳定的问
题。(顺序表的缺点)
2020/11/14
19
顺序存储的缺点
作插入、删除运算时要移动大量元素; 因要求一组连续的存储单元,当表长可变时,会发生
浪费或溢出。建表为静态分配.
课后思考-设计算法求解皇后问题(案例之一):
2012113数据结构是计算机应用方面的基础课程为学习操作系统数据库及软件工程打基础是一门研究非数值计算的程序设计问题中计算机的操作对象及其之间的关系和运算等的学科
第2章 常用数据结构及其运算
1. 内容:
基本数据结构及其运算
线性表 树 图
查找与排序技术
2. 特点和学习建议
重视实践
3. 重点和难点
1.if(i<1) then i=1 1.else if(i>n) then i=n+1 异常输入容错处理
2.for j=n to i step(-1) 3. V[j+1]V[j] 4.end(j) 5.V[i] x 6.n n+1 7.return
2020/11/14
15
(2)删除:删除第i个元素。
线性表。
家庭成员数据结构B=(D,R)
D={双亲,儿子,女儿}
R={(双亲,儿子),(双亲,女儿)}
复杂的数据结构,其数据元素可以是另一种数据结构
Am×nAiaij
嵌套定义
优点:采用集合论抽象定义法可描述广泛的数据结构
线性结构
2020/11/14 非线性结构
5
relationshipstructure 数据结构分类:
2020/11/14
4
集合论方法定义:S=(D,R)
S是一个二元组; D是一个数据元素的非空有限集合; R是定义在D上的关系的非空有限集合。
一个n维向量x=(x1,x2, …,xn)
D={x1,x2, …,xn} R={< x1,x2 >,< x2,x3 >, …,< xn-1,xn >}
b+(i-1)m
ai
间相同。

an-1
an
2020/11/14
13
基本特点: 连续性 物理顺序=逻辑顺序 随机访问、顺序存储
2020/11/14
14
2、顺序表的插入、删除运算 (1)插入:在第i个元素前插入一个新元素x。
设在长度为n的线性表中第i个元素前插入一个元素x,存放线性表的 向量为:V[1:m](m>n) INSERTLIST(V,m,n,i,x) 1.if(i<1)OR(i>n+1) then{参数错 return}
• 分类: 基本数据类型:变量值不可再分。整型、实型、布尔型。 结构数据类型:值可再分。数组、结构。
• 数据结构与算法:算法是解决某一特定类型问题的 有限运算序列,它的实现必须借助程序设计语言中 提供的数据类型及其运算。 效率:与数据的表示形式有关,数据结构的选择至 关重要。它是算法和程序设计的基本部分,对程序 的质量影响很大,(三好)。 数据结构存储结构相应算法。
2020/11/14
8
2.2 线性表(1:1)
线性表:在数据处理中,大量数据均以表 格形式出现,称为线性表。
最简单、最基本、最常见。 存储结构:顺序(向量)、链表 主要运算:
插入(建表)、删除、查找和排序。 内容包括:
线性表的定义和运算种类 顺序(向量)存储(顺序表) 链式存储(线性链表) 向量(顺序)和链表两种存储方式的比较
2020/11/14
25
从空白链表中获取一个结点,由指针p指向。
GETNODE(P)
1.pav 2.av next(av)
3.return
注意:分配后av后移一个结 点。
回收一个由p指针指向的结点,放回空白链表。
RET(P)
1.next(p) av 2.av p
注意:回收后, p指向的结点 变为第一个结点。
线性表的基本运算: 插入、删除、查找和排序
建表、修改
存储结构不同,运算方法不同。
教学步骤:
结构特点及基本运算
2020/11/14
11
注意:
空表既可以是线性表,也可以是非线性表; 取决于具体问题。如其运算按线性表的规则 处理,则属于线性表,否则为非线性表。
思考: 为什么引入空表?
2020/11/14
1. 集合:元素之间除了“同属于一个集合”的关系 外,再无其它关系。南京路步行街上熙熙攘攘的人群
2. 线性结构:1:1。班长和班级
图书信息查询系统
3. 树形结构:1:n。父母和孩子
计算机和人对弈问题
4. 图状结构/网状结构:n:m。老师和学生
多叉路口交通灯的管理问题
数据逻辑结构的两要素:
表示数据元素的信息 表示各数据元素之间的前后件关系
• p,q,s为指针类型变量,其数据域为data,指针域为 next;
• 下页图(完善前插) • 注意:
• 前插需从head开始,寻找插点,而后插不需要,因直 接可用next(p)。
• 随机存储、顺序访问;逻辑有序、物理无序。 • 难点:
• 修改指针的顺序
2020/11/14
23
2020/11/14
2020/11/14
2
2.1.1数据结构
程序分类:
数值型程序:数值计算; 非数值型程序:数据处理;
在数据处理领域中,数据类型复杂,且数据 元素之间具有各种特定的联系,数据集合中 元素之间的关系以及如何组织和表达这些数 据,以提高数据处理效率。
数据结构是研究非数值运算的程序设计问题。
2020/11/14
设等概率, pi =1/(n+1),则有:
Einn1 1n i 1 1(ni1)n 2
2020/11/14
18
qi为删除第i个元素的概率,则删除一个元素所 需移动次数的平均值为:
n
Ede qi (ni) i1
设等概率, qi =1/n,则有:
Ede1 ni n1(ni)n2 1
结论:
12
2.2.2 顺序存储线性表(顺序表)
1、顺序存储结构(向量式存储结构)
用一组连续地址的存储单元存放线性表的数据元素。
高级语言中一维数组类型表示。
如A[1:n]来存储线性表( a1,a2,…,an),在内存中的
存放形式为:
b
a1
adr(ai)=adr(a1)+(i-1) ×m
b+m
a2

只要知道元素序号就很容易找 到第i个数据元素,且无论i为 何值,找到第i个元素所需时
24
(2)结点的动态生成及回收:
动态分配:线性链表的存储空间是在程序执 行过程中动态分配的,因此,插入时,提供 一个存储空间;删除时,回收该存储空间。
动态分配的实现:使用空白链表。空白链表 供所有具有相同数据类型的链表共享,以便 充分利用存储空间。
设具有数据域data,指针域next的空白链ห้องสมุดไป่ตู้,其 头指针为av。
由n2个方块排成n行n列的正方形称为 “n元棋 盘” 。如果两个皇后位于棋盘上的同一行或同一 列或同一对角线上,则称她们为互相攻击.现要求找 出使n元棋盘上的n个皇后互不攻击的所有布局.
2020/11/14
20
head
2.2.3 线性链表
1、链式存储结构(克服顺序存储结构不足)
不需要一组连续的存储单元,其数据元素可分散存放。为了在逻 辑上保持连续,需在每个元素中存放其后继元素(后件)的地址。
数据结构形式和算法种类多,动态存储结
2020/11/14 构,递归技术.
1
2.1 概述
数据结构是计算机应用方面的基础课程,为 学习操作系统、数据库及软件工程打基础
计算机语言、数据结构和算法
好的软件设计=好的数据结构+好的算法
概念(数值型和非数值型程序设计)
是一门研究非数值计算的程序设计问题中计算机 的操作对象及其之间的关系和运算等的学科。
相关文档
最新文档