数据结构 类Pascal版 严蔚敏 chapt9-兰州大学信息院
教学课件 数据结构--严蔚敏

1.1 数据结构讨论的范畴
Niklaus Wirth:
Algorithm + Data Structures = Programs
程序设计:
算法: 数据结构:
为计算机处理问题编制 一组指令集
处理问题的策略
问题的数学模型
例如: 数值计算的程序设计问题
结构静力分析计算 ─━ 线性代数方程组
全球天气预报 ─━ 环流模式方程 (球面坐标系)
非数值计算的程序设计问题
例一: 求一组(n个)整数中的最大值 算法: ? 基本操作是“比较两个数的大小” 模型:? 取决于整数值的范围
例二:计算机对弈
算法:? 对弈的规则和策略 模型:? 棋盘及棋盘的格局
例三:足协的数据库管理
S 是 D上关系的有限集。
数据的存储结构
—— 逻辑结构在存储器中的映象
“数据元素”的映象 ?
“关系”的映象 ?
数据元素的映象方法:
用二进制位(bit)的位串表示数据元素 (321)10 = (501)8 = (101000001)2 A = (101)8 = (001000001)2
关系的映象方法:(表示x, y的方法)
抽象数据类型的表示和实现
抽象数据类型需要通过固有数据 类型(高级编程语言中已实现的数据 类型)来实现。
例如,对以上定义的复数。
// -----存储结构的定义
typedef struct { float realpart; float imagpart;
}complex;
// -----基本操作的函数原型说明
顺序映象
以相对的存储位置表示后继关系 例如:令 y 的存储位置和 x 的存储位置之间差一个常量 C
数据结构DS 类Pascal版 严蔚敏-兰州大学信息院-考研数据结构复习提纲

, x n) 当 m < = n , y m) 当 m > n
P R O C m e rg e _ X Y (lx ,ly :lin k is ttp ;V A R lz :lin k is ttp ); p x := lx ↑ .n e x t; p y := ly ↑ .n e x t; lz := lx ; W H IL E (p x < > N IL ) A N D (p y < > N IL ) D O [ q := p x ; p x := p x ↑ .n e x t; q ↑ .n e x t:= p y ; q := p y ; p y := p y ↑ .n e x t; q ↑ .n e x t:= p x ; ] IF p y < > N IL T H E N q ↑ .n e x t:= p y ; d is p o s e (ly ) E N D P ; { m e rg e _ X Y }
第二章
习题
5. 两个集合用线性表表示,采用单链表作为存储结 构,且其中元素递增有序,编写求两个集合交集 的算法。
PROC exam2(la,lb:linkisttp;VAR lc:linkisttp); new(lc); pc:=lc; pa:=la.next; pb:=lb.next; WHILE (pa<>NIL AND pb<>NIL) DO IF pa.data=pb.data THEN 【new(s);s.data:=pa.data; pc.next:=s; pc:=s; pa:=pa.next; pb:=pb.next 】 ELSE IF pa.data<pb.data THEN pa:=pa.next ELSE pb:=pb.next; pc.next:=NIL
严蔚敏《数据结构》(C语言版)笔记和习题(含考研真题)详解

严蔚敏《数据结构》(C语言版)笔记和习题(含考研真题)详解第1章绪论一、什么是数据结构数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科。
二、基本概念和术语1数据数据是对客观事物的符号表示,是计算机科学中所有能输入到计算机中并能被计算机程序处理的符号的总称。
2数据元素数据元素是数据的基本单位。
3数据对象数据对象是性质相同的数据元素的集合,是数据的一个子集。
4数据结构数据结构是相互之间存在一种或多种特定关系的数据元素的集合。
(1)数据结构的基本结构根据数据元素之间关系的不同特性,通常有下列四类基本结构:①集合。
数据元素属于“同一个集合”,并无其他复杂关系。
②线性结构。
数据元素之间存在一个对一个的关系。
③树形结构。
数据元素之间存在一个对多个的关系。
④图状结构或网状结构。
数据元素之间存在多个对多个的关系。
【注意】区分这四种基本结构可以根据元素间的对应关系。
如图1-1所示为上述四类基本结构的关系图。
图1-1 四类基本结构的关系图(2)数据结构的形式定义数据结构的形式定义为:Data_Structure=(D,S)其中:D表示数据元素的有限集,S表示D上关系的有限集。
(3)数据结构在计算机中的表示数据结构包括数据元素的表示和关系,在计算机中称为数据的物理结构(又称存储结构)。
其中,关系有两种表示方法:顺序映象和非顺序映象。
这两种表示方法对应两种存储结构:顺序存储结构和链式存储结构。
a.顺序映象:用相对位置来表示数据元素之间的逻辑关系。
b.非顺序映象:用指针表示数据元素之间的逻辑关系。
5数据类型数据类型是一个值的集合和定义在这个值集上的一组操作的总称。
6抽象数据类型抽象数据类型(ADT)由一个值域和定义在该值域上的一组操作组成。
【注意】抽象数据类型是对数据类型架构的一种全局体现,使我们能够更加清晰地看待某一数据类型。
7多形数据类型多形数据类型是指其值的成分不确定的数据类型。
数据结构严蔚敏PPT(完整版)

算法具有以下五个特性
① 有穷性: 一个算法必须总是在执行有穷步之后结 束,且每一步都在有穷时间内完成。
② 确定性:算法中每一条指令必须有确切的含义。 不存在二义性。且算法只有一个入口和一个出口。
图状结构
一般线性表 栈和队列 串 数组 广义表 一般树 二叉树 有向图 无向图
图1-5 数据逻辑结构层次关系图
1.1.5 数据类型
数据类型(Data Type):指的是一个值的集合和定 义在该值集上的一组操作的总称。
数据类型是和数据结构密切相关的一个概念。 在C 语言中数据类型有:基本类型和构造类型。
问题:必须先运行依据算法编制的程序;依赖软硬 件环境,容易掩盖算法本身的优劣;没有实际价值。 事前分析:求出该算法的一个时间界限函数。
与此相关的因素有: – 依据算法选用何种策略; – 问题的规模; – 程序设计的语言; – 编译程序所产生的机器代码的质量; – 机器执行指令的速度; 撇开软硬件等有关部门因素,可以认为一个特定算
K={k1, k2, …, k9} R={ <k1, k3>,<k1, k8>,<k2, k3>,<k2, k4>,<k2, k5>,<k3, k9>, <k5, k6>,<k8, k9>,<k9, k7>,<k4, k7>,<k4, k6> } 画出这逻辑结构的图示,并确定那些是起点,那些是终点
数据元素之间的关系可以是元素之间代表某种含义 的自然关系,也可以是为处理问题方便而人为定义的 关系,这种自然或人为定义的 “关系”称为数据元素 之间的逻辑关系,相应的结构称为逻辑结构。
数据结构严蔚敏PPT完整版2024新版

选择排序的基本思想
在未排序序列中找到最小(或最大)元素,存放到排序 序列的起始位置,然后,再从剩余未排序元素中继续寻 找最小(或最大)元素,然后放到已排序序列的末尾。 以此类推,直到所有元素均排序完毕。
交换排序和归并排序
交换排序的基本思想
通过不断地交换相邻的两个元素(如果它们的顺序错 误)来把最小的元素“浮”到数列的一端。具体实现 时,从第一个元素开始,比较相邻的两个元素,如果 前一个比后一个大,则交换它们的位置;每一对相邻 元素做同样的工作,从开始第一对到结尾的最后一对 ;这步做完后,最后的元素会是最大的数;针对所有 的元素重复以上的步骤,除了最后一个;持续每次对 越来越少的元素重复上面的步骤,直到没有任何一对 数字需要比较。
归并排序的基本思想
将两个或两个以上的有序表合并成一个新的有序表。具 体实现时,把长度为n的输入序列分成两个长度为n/2 的子序列;对这两个子序列分别采用归并排序;将两个 排序好的子序列合并成一个最终的排序序列。
查找的基本概念和方法
查找的定义
根据给定的某个值,在查找表中确定 一个其关键字等于给定值的数据元素 的过程或操作。
数组的定义和基本操作
数组的定义
数组(Array)是由相同类型的元素( element)的集合所组成的数据结构 ,分配一块连续的内存来存储。利用 元素的索引(index)可以计算出该 元素对应的存储位置。
数组的基本操作
数组的基本操作包括数组的创建、数 组的初始化、数组的访问、数组的遍 历、数组的排序和数组的查找等。
顺序表的基本操作实现
包括插入、删除、查找等操作,时间复杂度为 O(n)。
顺序表的特点
支持随机访问,存储密度高,但插入和删除操作需要移动大量元素。
大数据结构课后习题问题详解详解(C语言版_严蔚敏)

数据结构习题集答案(C 语言版严蔚敏)第1章 绪论1.1 简述下列术语:数据,数据元素、数据对象、数据结构、存储结构、数据类型和抽象数据类型。
解:数据是对客观事物的符号表示。
在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。
数据元素是数据的基本单位,在计算机程序常作为一个整体进行考虑和处理。
数据对象是性质相同的数据元素的集合,是数据的一个子集。
数据结构是相互之间存在一种或多种特定关系的数据元素的集合。
存储结构是数据结构在计算机中的表示。
数据类型是一个值的集合和定义在这个值集上的一组操作的总称。
抽象数据类型是指一个数学模型以及定义在该模型上的一组操作。
是对一般数据类型的扩展。
1.2 试描述数据结构和抽象数据类型的概念与程序设计语言中数据类型概念的区别。
解:抽象数据类型包含一般数据类型的概念,但含义比一般数据类型更广、更抽象。
一般数据类型由具体语言系统部定义,直接提供给编程者定义用户数据,因此称它们为预定义数据类型。
抽象数据类型通常由编程者定义,包括定义它所使用的数据和在这些数据上所进行的操作。
在定义抽象数据类型中的数据部分和操作部分时,要求只定义到数据的逻辑结构和操作说明,不考虑数据的存储结构和操作的具体实现,这样抽象层次更高,更能为其他用户提供良好的使用接口。
1.3 设有数据结构(D,R),其中{}4,3,2,1d d d d D =,{}r R =,()()(){}4,3,3,2,2,1d d d d d d r =试按图论中图的画法惯例画出其逻辑结构图。
解:1.4 试仿照三元组的抽象数据类型分别写出抽象数据类型复数和有理数的定义(有理数是其分子、分母均为自然数且分母不为零的分数)。
解:ADT Complex{ 数据对象:D={r,i|r,i 为实数} 数据关系:R={<r,i>} 基本操作: InitComplex(&C,re,im)操作结果:构造一个复数C ,其实部和虚部分别为re 和im DestroyCmoplex(&C)操作结果:销毁复数C Get(C,k,&e)操作结果:用e 返回复数C 的第k 元的值Put(&C,k,e)操作结果:改变复数C的第k元的值为eIsAscending(C)操作结果:如果复数C的两个元素按升序排列,则返回1,否则返回0 IsDescending(C)操作结果:如果复数C的两个元素按降序排列,则返回1,否则返回0 Max(C,&e)操作结果:用e返回复数C的两个元素中值较大的一个Min(C,&e)操作结果:用e返回复数C的两个元素中值较小的一个}ADT ComplexADT RationalNumber{数据对象:D={s,m|s,m为自然数,且m不为0}数据关系:R={<s,m>}基本操作:InitRationalNumber(&R,s,m)操作结果:构造一个有理数R,其分子和分母分别为s和mDestroyRationalNumber(&R)操作结果:销毁有理数RGet(R,k,&e)操作结果:用e返回有理数R的第k元的值Put(&R,k,e)操作结果:改变有理数R的第k元的值为eIsAscending(R)操作结果:若有理数R的两个元素按升序排列,则返回1,否则返回0 IsDescending(R)操作结果:若有理数R的两个元素按降序排列,则返回1,否则返回0 Max(R,&e)操作结果:用e返回有理数R的两个元素中值较大的一个Min(R,&e)操作结果:用e返回有理数R的两个元素中值较小的一个}ADT RationalNumber1.5 试画出与下列程序段等价的框图。
严蔚敏版数据结构(C语言版)PPT-第九章

2
第 9 章 查找 9.1 查找的基本概念 查找表的分类
数 据 结 构
静态查找表 仅作查询和检索操作 动态查找表
“不在查找表中”的数据元素插入到查找表中; 删除其“查询”结果为“在查找表中”的数据元 素。
查找还可分为:内查找和外查找。
3
第 9 章 查找 9.1 查找的基本概念
数 据 结 构
关键字: 是数据元素(或记录)中某个数据项的值, 用以标识(识别)一个数据元素(或记录)。
举例:
例1: key= 70 64 的查找过程如下:
数 据 结 构
05 13 19 21 37 56 64 75 80 88 92
1 2 3 4 5 6 7 8 9 10 11 12
low
low highhighmid mid low mid mid
high
high<low 查找不成功 low=mid+1=7 high=11 mid=(7+11)/2=9 ① ② high=mid-1=8 ③ low=1 key>mid key<mid key=mid 指向的记录值 所指向的记录值 mid=(8+7)/2=7 mid=(1+11)/2=6 查找成功
第 9 章 查找 9.1 查找的基本概念
查找表是由同一类型的数据元素(或记录)构
数 据 结 构
成的集合。 由于“集合”中的数据元素之间存在着松散 的关系,因此查找表是一种应用灵便的结构。
1
第 9 章 查找 9.1 查找的基本概念 对查找表常进行的操作:
数 据ቤተ መጻሕፍቲ ባይዱ结 构
1)查询某个“特定的”数据元素是否在查找表中 静态 2)检索某个“特定的”数据元素的各种属性 3)在查找表中插入一个数据元素 4)从查找表中删去某个数据元素 动态查找
严蔚敏数据结构课后习题及答案解析

严蔚敏数据结构课后习题及答案解析第一章绪论一、选择题1.组成数据的基本单位是()(A)数据项(B)数据类型(C)数据元素(D)数据变量2.数据结构是研究数据的()以及它们之间的相互关系。
(A)理想结构,物理结构(B)理想结构,抽象结构(C)物理结构,逻辑结构(D)抽象结构,逻辑结构3.在数据结构中,从逻辑上可以把数据结构分成()(A)动态结构和静态结构(B)紧凑结构和非紧凑结构(C)线性结构和非线性结构(D)内部结构和外部结构4.数据结构是一门研究非数值计算的程序设计问题中计算机的(①)以及它们之间的(②)和运算等的学科。
①(A)数据元素(B)计算方法(C)逻辑存储(D)数据映像②(A)结构(B)关系(C)运算(D)算法5.算法分析的目的是()。
(A)找出数据结构的合理性(B)研究算法中的输入和输出的关系(C)分析算法的效率以求改进(D)分析算法的易懂性和文档性6.计算机算法指的是(①),它必须具备输入、输出和(②)等5个特性。
①(A)计算方法(B)排序方法(C)解决问题的有限运算序列(D)调度方法②(A)可执行性、可移植性和可扩充性(B)可行性、确定性和有穷性(C)确定性、有穷性和稳定性(D)易读性、稳定性和安全性二、判断题1.数据的机内表示称为数据的存储结构。
()2.算法就是程序。
()3.数据元素是数据的最小单位。
()4.算法的五个特性为:有穷性、输入、输出、完成性和确定性。
()5.算法的时间复杂度取决于问题的规模和待处理数据的初态。
()三、填空题1.数据逻辑结构包括________、________、_________ 和_________四种类型,其中树形结构和图形结构合称为_____。
2.在线性结构中,第一个结点____前驱结点,其余每个结点有且只有______个前驱结点;最后一个结点______后续结点,其余每个结点有且只有_______个后续结点。
3.在树形结构中,树根结点没有_______结点,其余每个结点有且只有_______个前驱结点;叶子结点没有________结点,其余每个结点的后续结点可以_________。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、二叉排序树(Binary Sort Tree)(又称为二叉查找树)
1、BST定义: BST或者是一棵空树;或者是具有如下性质的BT:
•
• •
若左子树非空,则左子树上所有结点的值均小于根结点的值;
若右子树非空,则右子树上所有结点的值均大于根结点的值; 左、右子树也为BST
9.2
例如:
动态查找表
45 53 12 100
3) 所有索引项组成索引表
9.1
例. 查找表为:
静态查找表
22, 12, 13, 8, 9, 20, 33, 42, 44, 38, 24, 48, 60, 58, 74, 49, 86, 53
索引表为:
关键字项 指针项
22 1
48 7
86 13
9.1
查找分为两步:
静态查找表
1. 确定待查记录所在块; (可以用顺序或折半查找) 2. 在块内顺序查找. (只能用顺序查找) 例如: k=38 第1步: k=38 的记录只可能在块2中; 第2步: 从r[7]开始, 直到k=r[i].key 或i>12为止.
9.1
静态查找表
3. r[0]起监视哨作用 FUNC seqsrch(r:sqlisttp; k:keytype):integer; r[0].key:=k; i:=n; WHILE r[i].key <>k DO i:=i-1; RETURN(i) ENDF; {seqsrch}
i:=n; WHILE i>=1 CAND r[i].key<>k DO i:=i-1; RETURN(i);
9.2
算法描述为:
动态查找表
FUNC bstsrch (t:bitreptr ; k:keytype):bitreptr; {查找不成功时返回NIL } IF (t=NIL) COR (t↑.key=k) THEN RETURN(t) ELSE IF t↑.key<k THEN RETURN(bstsrch(t↑.rchild, k)) ELSE RETURN(bstsrch(t↑. lchild, k))
查找成功 (table 中存在给定值的记录) 查找不成功 (table 中不存在给定值的记录)
查找表分为:
• 静态查找表 (对查找表中的数据元素不进行插入和删 除操作)
• 动态查找表 (对查找表中的数据元素可进行插入和删 除操作)
9.1
查找表的类型描述:
静态查找表
TYPE rectype=RECORD key: keytype; …… END;
RETURN(i)
ENDF; {seqsrch}
9.1
平均查找长度(ASL):
静态查找表
查找过程中, 给定值需与关键字比较的次数的期望值.
n
ASL=∑PiCi
i =1
其中:
Pi 为查找第i 个记录的概率; Ci 为找到第i 个记录时, 已比较的次数.
顺序查找的平均查找长度ASLss=np1+(n-1)p2+……+pn
sqlisttp=ARRAY[0..n] OF rectype;
9.1
静态查找表
一. 顺序表的查找(顺序查找)
FUNC seqsrch(r:sqlisttp; k:keytype):integer;
r[0].key:=k; i:=n;
WHILE r[i].key <>k DO i:=i-1; RETURN(i) ENDF; {seqsrch}
条件控制式 i = 0 计数控制式
9.1
常规解决办法:
静态查找表
(1) 条件循环为主 WHILE r[i].key <> k DO IF i = 1 THEN RETURN ( 0 ) ELSE i: = i - 1 ; (2) 复合条件 WHILE r[i].key <> k AND i>=1 DO i: = i - 1 ; (3) 计数循环为主 FOR i:=n DOWNDO 1 DO IF r[i].key=k THEN RETURN(i) ;
关键字项 指针项
22 1
48 7
86 13
22, 12, 13, 8, 9, 20, 33, 42, 44, 38, 24, 48, 60, 58, 74, 49, 86, 53
9.1
一个示意算法:
静态查找表
PROC bsb(T,r,n,b,s,k);{T为升序排列的块最大关键字表(索引表),b 为块数,r为查找表,n为r的元素个数,s为每块元素个数,k为关 键字} T[b+1]:=k;i:=1; WHILE T[i]<k DO i:=i+1; IF i≤b THEN 【 j:=(i-1)s+1;i:=is; WHILE j≤i CAND r[j].key≠k DO j:=j+1; IF j≤i THEN WRITE(‘SUCC’) ELSE WRITE(‘UNSUCC’) 】 ELSE WRITE(‘UNSUCC’) ENDP;{bsb}
ELSE RETURN(0) ENDF; {seqsrch3}
9.1
静态查找表
有序表的顺序查找(设置监视哨) FUNC seqsrch4(r:sqlisttp; k:keytype):integer; r[0].key:=k; i:=n; WHILE k<r[i].key DO i:=i-1; IF k=r[i].key THEN RETURN(i) ELSE RETURN(0) ENDF; {seqsrch4}
≈log2(n+1)-1
9.1
静态查找表
三. 索引顺序表的查找(分块查找)
索引表 :
1) 按表中记录的关键字分块, R1,R2,…,RL
要求: 第Rk 块中的所有关键字< Rk+1块中的所有关键字 k=1,2,…,L-1, 称为“分块有序” 2) 对每块建立一个索引项, 包含有两项内容:
① 关键字项 : 为该块中最大关键字值; ② 指针项 : 为该块第一个记录在表中位置.
的值, 用它可以标识(识别)一个数据元素(或记 录)。
主关键字(primary key): 可以唯一地标识一个数据
元素(或记录)的关键字。
次关键字(secondary key): 用以标识若干数据元素
(或记录)的关键字。
9.1
静态查找表
查找 : 根据给定的值,在查找表中确定关键字与给定
值相等的DE的过程。 查找结果: • •
ENDF; {bstsrch}
9.2
3. BST的插入
动态查找表
ห้องสมุดไป่ตู้
插入原则:记下查找不成功时比较的最后一个结点的位 置,将插入结点作为该结点的左或右孩子。 PROC insbst (VAR bst :bitreptr; k:keytype); f:=NIL ; found:=false;
f:= srch_bstree (f, bst, k, found)
ASL成功=(n+1)/2+1 ASL不成功=(n+1+1)/2+1=n/2+1+1
9.1
静态查找表
二. 有序表的查找(折半查找)
有序表 : 查找表中记录按关键字有序排列的表.
即: r[i].key<=r[i+1].key i=1,2,…,n-1
折半查找 :
• 要求: 查找表为有序表;
•
查找过程: 先确定待查记录范围;
9.2
一个改进的非递归算法:
动态查找表
FUNC srch_bstree1 (VAR f:bitreptr; bst:bitreptr; k:keytype; VAR found:boolean):bitreptr; IF bst=NIL THEN [ found:=false; RETURN(f)] ELSE [ p:=f:=bst; { 查找不成功时, f记载插入点的双亲 } WHILE p<>NIL DO IF p↑.key=k THEN [ found:=true; RETURN(p)] ELSE IF p↑.key<k THEN [ f:=p; p:=p↑.rchild ] ELSE [ f:=p; p:=p↑.lchild ];
n
当pi=1/n时, ASLss=∑PiCi =(n+1)/2
i =1
9.1
有序表的顺序查找
静态查找表
FUNC seqsrch3(r:sqlisttp; k:keytype):integer; i:=1; WHILE i<=n CAND k>r[i].key DO i:=i+1;
IF i<=n CAND k=r[i].key THEN RETURN(i)
第九章
查找
• 静态查找表 • 动态查找表 • 哈希查找表
9.1
静态查找表
查找表(table):由同类型的DE(或记录)构成的集合. 查找表上的基本运算:
• • 建立查找表create(ST, n) 查找search(ST, k)
•
遍历查找表traverse(ST)
9.1
静态查找表
关键字(key): 是数据元素(或记录)中某个数据项
9.1
静态查找表
1. 查找过程: 从n开始,依次与k进行比较, 若相等则查找
成功; 否则, 继续进行,直到与r[0].key比较为止. 2. 算法分析: (1) 算法结构由一个循环构成;
9.1
静态查找表
(2) 循环结束有两种可能: • 查找成功 r[i].key = k • 查找不成功 这两种可能形成两种不同类型的循环控制: • 条件循环 WHILE 条件 DO 循环体 REPEAT 循环体 UNTIL 条件 • 计数循环 FOR i: = n DOWNTO 0