数据结构 类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.在树形结构中,树根结点没有_______结点,其余每个结点有且只有_______个前驱结点;叶子结点没有________结点,其余每个结点的后续结点可以_________。
严蔚敏数据结构(排序)ppt课件
j j j ji ij ij ij i i i 1 2 3 4 5 6 7 8 9 10 二趟排序:13 4 48 38 27 49 55 65 97 76
❖希尔排序特点
子序列的构成不是简单的“逐段分割”, 而是将相隔某个增量的记录组成一个子序 列
希尔排序可提高排序速度,因为
分组后n值减小,n²更小,而T(n)=O(n²), 所以T(n)从总体上看是减小了
i i i iij j j j j 完成一趟排序: ( 27 38 13) 49 (76 97 65 50)
分别进行快速排序: ( 13) 27 (38) 49 (50 65) 76 (97)
快速排序结束: 13 27 38 49 50 65 76 97
x.key=49 例 初始关键字: 2479 38 1635 4997 76 9173 6257 50
i=8 20 (6
i=8 20 (6
13 30 39 42 70 85 ) 20
13 30 39 m
13 302 70 42 70 42 70
85 ) 20 j 85 ) 20
85 ) 20
13 30 39 42 70 85 ) 20 js
13 20 30 39 42 70 85 )
kik2i+1
(i=1,2,…...n/2)
例 (96,83,27,38,11,9) 例 (13,38,27,50,76,65,49,97)
96
13
83
27
38
27
38 11 9
50 76 65 49
97
可将堆序列看成完全二叉树,则堆顶 元素(完全二叉树的根)必为序列中 n个元素的最小值或最大值
❖堆排序:将无序序列建成一个堆,得到关键字最小 (或最大)的记录;输出堆顶的最小(大)值后,使 剩余的n-1个元素重又建成一个堆,则可得到n个元素 的次小值;重复执行,得到一个有序序列,这个过程 叫~
严蔚敏《数据结构题集》习题解析第01章绪论
1.4❷ 试仿照三元组的抽象数据类型分别写出抽象数据类型复数和有理数的定义(有理数是其分子、分母均为自然数且分母不为 零的分数) 。 复数定义:
ADT Complex //复数定义 a±bi { 数据对象:D = {a, b | a,b 为实数} 数据关系:R = {<a, b>} 基本操作: InitComplex(&C, re, im) 操作结果:构造一个复数 C,其实部和虚部分别为 re 和 im DestroyCmoplex(&C) 操作结果:销毁复数 C Get(C, k, &e) 初始条件:复数 C 已存在 操作结果:用 e 返回复数 C 的第 k 元的值 Put(&C, k, e) 初始条件:复数 C 已存在 操作结果:改变复数 C 的第 k 元的值为 e IsAscending(C) 初始条件:复数 C 已存在 操作结果:如果复数 C 的两个元素按升序排列,则返回 1,否则返回 0 IsDescending(C) 初始条件:复数 C 已存在 操作结果:如果复数 C 的两个元素按降序排列,则返回 1,否则返回 0 Max(C, &e) 初始条件:复数 C 已存在 操作结果:用 e 返回复数 C 的两个元素中值较大的一个 Min(C, &e) 初始条件:复数 C 已存在 操作结果:用 e 返回复数 C 的两个元素中值较小的一个 }ADT Complex 有理数定义: ADT RationalNumber //有理数定义 { 数据对象:D={s, m | s,m 为自然数,且 m 不为 0} 数据关系:R={<s, m>} 基本操作: InitRationalNumber(&R, s, m) 操作结果:构造一个有理数 R,其分子和分母分别为 s 和 m DestroyRationalNumber(&R) 操作结果:销毁有理数 R Get(R, k, &e) 初始条件:有理数 R 已存在 操作结果:用 e 返回有理数 R 的第 k 元的值 Put(&R, k, e) 初始条件:有理数 R 已存在 操作结果:改变有理数 R 的第 k 元的值为 e IsAscending(R) 初始条件:有理数 R 已存在 操作结果:若有理数 R 的两个元素按升序排列,则返回 1,否则返回 0 IsDescending(R) 初始条件:有理数 R 已存在 操作结果:若有理数 R 的两个元素按降序排列,则返回 1,否则返回 0
数据结构严蔚敏ppt课件
数据结构(严蔚敏)版●资料上传者:安徽大学研究生●资料使用范围:各大学考研及本科教学●欢迎报考安徽大学研究生●“星光考研书屋”祝您学习愉快[学习目标]掌握线性表的顺序存储结构和抽象数据类型中定义的每一种操作的含义,在顺序存储方式下每一种操作的具体实现和相应的时间复杂度;掌握链接存储的概念,线性表的单、双链接存储结构,对它们进行插入和删除结点的方法,循环单、双链表和带表头附加结点的单、双链表的结构和操作特点;掌握每一种线性表操作在由动态结点构成的单链表上具体实现的算法以及相应的时间复杂度。
2第2章线性表线性结构是最常用、最简单的一种数据结构。
而线性表是一种典型的线性结构。
其基本特点是线性表中的数据元素是有序且是有限的。
在这种结构中:① 存在一个唯一的被称为“第一个”的数据元素;② 存在一个唯一的被称为“最后一个”的数据元素;③ 除第一个元素外,每个元素均有唯一一个直接前驱;④ 除最后一个元素外,每个元素均有唯一一个直接后继。
32.1 线性表的逻辑结构线性表(Linear List ) :是由n(n ≧0)个数据元素(结点)a 1,a 2, …a n 组成的有限序列。
该序列中的所有结点具有相同的数据类型。
其中数据元素的个数n 称为线性表的长度。
当n=0时,称为空表。
当n>0时,将非空的线性表记作: (a 1,a 2,…a n ) a 1称为线性表的第一个(首)结点,a n 称为线性表的最后一个(尾)结点。
2.1.1 线性表的定义4a1,a2,…a i-1都是a i(2≦i≦n)的前驱,其中a i-1是a i的直接前驱;a i+1,a i+2,…a n都是a i(1≦i ≦n-1)的后继,其中a i+1是a i的直接后继。
2.1.2线性表的逻辑结构线性表中的数据元素a i所代表的具体含义随具体应用的不同而不同,在线性表的定义中,只不过是一个抽象的表示符号。
◆线性表中的结点可以是单值元素(每个元素只有一个数据项) 。
严蔚敏版数据结构课后习题答案
第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和imDestroyCmoplex(&C)操作结果:销毁复数CGet(C,k,&e)操作结果:用e返回复数C的第k元的值Put(&C,k,e)操作结果:改变复数C的第k元的值为eIsAscending(C)操作结果:如果复数C的两个元素按升序排列,则返回1,否则返回0IsDescending(C)操作结果:如果复数C的两个元素按降序排列,则返回1,否则返回0Max(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,否则返回0IsDescending(R)操作结果:若有理数R的两个元素按降序排列,则返回1,否则返回0Max(R,&e)操作结果:用e返回有理数R的两个元素中值较大的一个Min(R,&e)操作结果:用e返回有理数R的两个元素中值较小的一个}ADT RationalNumber1.5 试画出与下列程序段等价的框图。
数据结构 类Pascal版 严蔚敏 chapt1-兰州大学信息院
2.for(i=1;i<=n;i++)x=x+1;
n+1
O(n) 线性阶
3. for(i=1;i<=n;i++) n+1 for(j=1;j<=n;j++)x=x+1; n(n+1)
O(n2) 平方阶
算法分析示例
4. for(i=2;i<=n;i++)
for(j=2;j<=i;j++)
x:=x+1;
物理结构
物理结构(Physical Structure):指数据结构
在机内的表示。也称存储结构,通常有顺序存 储结构和链式存储结构。
顺序存储结构用一维数组表示;链式存储结构用指 针表示 虚拟存储结构
有四类结构:顺序、链式、索引、散列
算法的设计取决于逻辑结构; 算法的实现依赖于存储结构。
数据类型
步骤的一种描述,是指令的有限序列。 算法5个重要特性:
有穷性:算法经有限步后结束; 确定性:每一步必须有明确的含义; 可行性:每一步是可执行的; 输入: 零个或多个; 输出: 一个或多个。
算法与程序
算法与程序的区别 算法是解决问题的一种方法或一个过程,考虑 如何将输入转换成输出,一个问题可以有多种 算法。
时间复杂度(Time Complexity):
设算法中所有语句的语句频度为t(n),f(n)是当n 趋向无穷大时与t(n)为同阶无穷大,则算法的(渐 进)时间复杂度T(n)=O(f(n)) 其中:n为算法计算量或称为规模(size); f(n)是运算时间随n增大时的增长率; O(f(n))是算法时间特性的量度。
数据结构 C语言版(严蔚敏版)第9章 查找
若大于,查找范围的高端数据元素指针high 不变,低端数据元素指针low更新为mid+1; (4)重复步骤(2)、(3)直到查找成功或 查找范围空(low>high),即查找失败为止。 (5)如果查找成功,返回找到元素的存放位 置,即当前的中间项位置指针 mid;否则返回 查找失败标志。
折半查找的c语言算法程序: int Search_Bin( SSTable ST, int n, int key) {int low, high,mid;
查找:在数据元素集合中查找满足某种条 件的数据元素的过程称为查找。最简单且最常 用的查找条件是“关键字值等于某个给定值” ,在查找表搜索关键字等于给定值的数据元素 (或记录)。若表中存在这样的记录,则称查 找成功,此时的查找结果应给出找到记录的全 部信息或指示找到记录的存储位置;若表中不 存在关键字等于给定值的记录,则称查找不成 功,此时查找的结果可以给出一个空记录或空 指针。若按主关键字查找,查找结果是唯一的 ;若按次关键字查找,结果可能是多个记录, 即结果可能不唯一。
while(ST[i].key!=key) i- -;
return i; }
0 1 0
/*从表尾往前查*/ 找到:返回元素 的存 1 2 3 4 在线 5 性表 6 中7 10 20 40 80 储位置; 30 60 25 (a) 初态 未找到:返回0。
2 3 4 5 6 7
80
监视哨 0
10
1
20
动态查找表:若在查找过程中可以将查找 表中不存在的 数据元素插入 ,或者从查找表中 删除某个数据元素 ,则称这类查找表为动态查 找表。动态查找表在查找过程中查找表可能会 发生变化。对动态查找表进行的查找操作称为 动态查找。 关键字:是数据元素中的某个数据项。唯 一能标识数据元素(或记录)的关键字,即每 个元素的关键字值互不相同,我们称这种关键 字为主关键字;若查找表中某些元素的关键字 值相同,称这种关键字为次关键字。例如,银 行帐户中的帐号是主关键字,而姓名是次关键 字。
数据结构 类Pascal版 严蔚敏 chapt4-兰州大学信息院
4.3 串基本操作的实现
3. 求子串的定位函数INDEX(s,t)
FUNC index(s,t:strtp):integer; i:=1; j:=1; WHILE (i<=s.curlen) AND (j<=t.curlen) DO IF s.ch[i]=t.ch[j] THEN [ i:=i+1; j:=j+1 ] ELSE [ i:=i-j+2; j:=1 ]; IF j>t.curlen THEN RETURN(i-t.curlen) ELSE RETURN(0) ENDF; {index}
i-(j-1)+1
s
i-(j-1) i
t
j-1个 j
4.3 串基本操作的实现
一个改进的算法
FUNC index(s,t:strtp):integer; k:=1; j:=1; i:=k; { 注意变量k的使用 }
WHILE (k<=s.curlen-t.curlen+1) AND (j<=t.curlen) DO
4.1 串及其操作
插入操作: INSERT(s,pos,t) ——在第pos个字符之前插入t 1posLENGTH(s)+1 删除操作: DELETE(s,pos,len) ——删除第pos个字符起长度为len的子串 1posLENGTH(s) 0lenLENGTH(s)-pos+1
4.1 串及其操作
子串和主串: 串中任意个连续的字符组成的 子序列称为该串的子串。包含子串的串相 应地称为主串。如: 串‘abc’的子串有 ‘’、 ‘a’、’b’、’c’、’ab’、’bc’、 ’abc’。 位置: 字符在序列中的序号称为该字符在串 中的位置。子串在主串中的位置则以子串 的第一个字符在主串中的位置来表示。
严蔚敏数据结构(排序)ppt课件
重复上述过程,直到“在一趟排序过程中没有进行 过交换记录的操作”为止
例 1 4398 38 38 38 3183 13
2 3489 49 49 4193 132387 27
3 65 65 6153 142397 23780 30 4 9776 7163 162357 243790 3308 38 5 719637 172367 263750 3409 49 6 19237 732607 3605 65 7 293770 3706 76 8 3907 97
i=7 27 (13 2378 3489 4695 6756 7967) 9277 jjjjjj
排序结果:(13 27 38 49 65 76 97)
❖算法评价
时间复杂度
若待排序记录按关键字从小到大排列(正序) n
关键字比较次数: 1 n 1
i2
记录移动次数:
n
2 2(n 1)
ห้องสมุดไป่ตู้i2
0 1 2 34 5 6 7 13 27 38 49 65 76 97
j j j ji ij ij ij i i i 1 2 3 4 5 6 7 8 9 10 二趟排序:13 4 48 38 27 49 55 65 97 76
❖希尔排序特点
子序列的构成不是简单的“逐段分割”, 而是将相隔某个增量的记录组成一个子序 列
希尔排序可提高排序速度,因为
分组后n值减小,n²更小,而T(n)=O(n²), 所以T(n)从总体上看是减小了
49
50
65
97 76 38 27
13 输出:13 27 38
76
- 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