数据结构与简单算法_第1页
数据结构与简单算法_第2页
数据结构与简单算法_第3页
数据结构与简单算法_第4页
数据结构与简单算法_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数据结构与简单算法广东汕头华侨中学 欧阳玲用计算机解决问题一般步骤:具体问题数学模型算法编程、调试得到答案一般来说,用计算机解决一个具体问题时,大致经过以下几个步骤:首先要从具体问题抽象出一个适当的数学模型,然后设计一个解此数学模型的算法,最后编出程序进行测试调整知道的到最终解答。寻求数学模型的实质就是分析问题,从中提取操作的对象,并找出这些操作对象之间含有的关系,然后用数学的语言加以描述。三种经典的数学模型图书书目自动检索系统线性关系博弈问题树城市道路问题图数据结构(data structure)简单的解释:相互之间存在一种或多种特定关系的数据元素的集合。数据间的联系有逻辑关系、存储联系,通

2、常的数据结构指的是逻辑结构。 前面提到的三种经典的数学模型体现了数据结构的基本结构,数据结构通常有如下四种关系:(1)集合结构 (2)线性结构 (3)树形结构 (4)图状结构 线性表(一)N个数据元素的有限序列存储结构:顺序存储结构、链式存储结构(1)(2)(3)(4)(5)(6)(7)(8)1213152234384320当需要在顺序存储的线性表中插入一个数据元素时,需要顺序移动后续的元素以“腾”出某个合适的位置放置新元素。删除元素呢? 线性表(二)链式存储插入新元素的时候只需要改变指针所指向的地址。 二维数组与线性表如果某一线性表,它的每一个数据元素分别是一个线性表,这样的二维表在数据实现

3、上通常使用二维数组。二维数组的一个形象比喻多个纵队形成的方块 m * n 数组地址计算问题题目描述:已知N*(N+1) / 2个数据,按行的顺序存入数组b1,b2,中。其中第一个下标表示行,第二个下标表示列。若aij (i>=j ,j=1,2,n)存于bk中,问:k,i,j之间的关系如何表示?给定k值,写出能决定相应i,j的算法。答案 K=i*(i-1)/2+j Read(k);For i:=1 to k do for j:=1 to i do if k=(trunc(I*(I-1)/2)+j) then writeln(k,对应的i,j为:,i,j) 栈特殊的线性表操作特点:后进先出(

4、Last In First Out)栈顶表尾栈底表头空栈 栈 (考题分析)(1998) 栈S初始状态为空,现有5个元素组成的序列1,2,3,4,5,对该序列在栈S上一次进行如下操作(从序列中的1开始,出栈后不再进栈):进栈、进栈、进栈、出栈、进栈、出栈、进栈。问出栈的元素序列是_D(A) 5,4,3,2,1 (B) 2,1 (C) 2,3 (D) 3,4 队列先进先出允许插入的一端称为队尾(rear),允许删除的一端称为队头(front)。 循环队列头指针指向队列中队头元素的前一个位置,尾指针指示队尾元素在队列中的当前位置。(R-F+N) mod N 树根、叶子、子树结点的度:结点拥有的子树数

5、二叉树 二叉树特点:每个结点至多只有二棵子树,并且二叉树的子树有左右之分。第i层至多有 2i-1 个结点(i>=1)深度为K的二叉树最多有 2k-1 个结点(K>=1) 二叉树的遍历先(根)序遍历ABDFGCEH中(根)序遍历BFDGACHE后(根)序遍历FGDBHECA 例题分析给出一棵二叉树的中序遍历:DBGEACHFI 与后序遍历:DGEBHIFCA ,画出此二叉树。 图 图的存储结构邻接矩阵有向图、无向图、带权图的邻接矩阵 排序冒泡排序选择排序快速排序希尔排序一、插入排序(Insertion Sort)1. 基本思想: 每次将一个待排序的数据元素,插入到前面已经排好序的数列

6、中的适当位置,使数列依然有序;直到待排序数据元素全部插入完为止。2. 排序过程: 【示例】:初始关键字 49 38 65 97 76 13 27 49 J=2(38) 38 49 65 97 76 13 27 49 J=3(65) 38 49 65 97 76 13 27 49 J=4(97) 38 49 65 97 76 13 27 49 J=5(76) 38 49 65 76 97 13 27 49 J=6(13) 13 38 49 65 76 97 27 49 J=7(27) 13 27 38 49 65 76 97 49 J=8(49) 13 27 38 49 49 65 76 97

7、Procedure InsertSort(Var R : FileType);/对R1.N按递增序进行插入排序, R0是监视哨/ Begin for I := 2 To N Do /依次插入R2,.,Rn/ begin R0 := RI; J := I - 1; While R0 < RJ Do /查找RI的插入位置/ begin RJ+1 := RJ; /将大于RI的元素后移/ J := J - 1 end RJ + 1 := R0 ; /插入RI / end End; /InsertSort /二、选择排序1. 基本思想:每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放

8、在已排好序的数列的最后,直到全部待排序的数据元素排完。2. 排序过程: 【示例】: 初始关键字 49 38 65 97 76 13 27 49第一趟排序后 13 38 65 97 76 49 27 49第二趟排序后 13 27 65 97 76 49 38 49第三趟排序后 13 27 38 97 76 49 65 49第四趟排序后 13 27 38 49 49 97 65 76第五趟排序后 13 27 38 49 49 97 97 76第六趟排序后 13 27 38 49 49 76 76 97第七趟排序后 13 27 38 49 49 76 76 97最后排序结果 13 27 38 49

9、49 76 76 97Procedure SelectSort(Var R : FileType); /对R1.N进行直接选择排序 / Begin for I := 1 To N - 1 Do /做N - 1趟选择排序/ begin K := I; For J := I + 1 To N Do /在当前无序区RI.N中选最小的元素RK/ begin If RJ < RK Then K := J end; If K <> I Then /交换RI和RK / begin Temp := RI; RI := RK; RK := Temp; end; end End; /Select

10、Sort /三、冒泡排序(BubbleSort)1. 基本思想:两两比较待排序数据元素的大小,发现两个数据元素的次序相反时即进行交换,直到没有反序的数据元素为止。2. 排序过程:设想被排序的数组R1.N垂直竖立,将每个数据元素看作有重量的气泡,根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R,凡扫描到违反本原则的轻气泡,就使其向上"漂浮",如此反复进行,直至最后任何两个气泡都是轻者在上,重者在下为止。 【示例】:49 13 13 13 13 13 13 13 38 49 27 27 27 27 27 2765 38 49 38 38 38 38 3897 65 38 4

11、9 49 49 49 4976 97 65 49 49 49 49 4913 76 97 65 65 65 65 6527 27 76 97 76 76 76 7649 49 49 76 97 97 97 97 Procedure BubbleSort(Var R : FileType) /从下往上扫描的起泡排序/Begin For I := 1 To N-1 Do /做N-1趟排序/ begin NoSwap := True; /置未排序的标志/ For J := N - 1 DownTo 1 Do /从底部往上扫描/ begin If RJ+1< RJ Then /交换元素/ beg

12、in Temp := RJ+1; RJ+1 := RJ; RJ := Temp; NoSwap := False end; end; If NoSwap Then Return/本趟排序中未发生交换,则终止算法/ endEnd; /BubbleSort/四、快速排序(Quick Sort)1. 基本思想:在当前无序区R1.H中任取一个数据元素作为比较的"基准"(不妨记为X),用此基准将当前无序区划分为左右两个较小的无序区:R1.I-1和RI+1.H,且左边的无序子区中数据元素均小于等于基准元素,右边的无序子区中数据元素均大于等于基准元素,而基准X则位于最终排序的位置上,即R

13、1.I-1X.KeyRI+1.H(1IH),当R1.I-1和RI+1.H均非空时,分别对它们进行上述的划分过程,直至所有无序子区中的数据元素均已排序为止。2. 排序过程: 【示例】:初始关键字 49 38 65 97 76 13 27 49第一次交换后 27 38 65 97 76 13 49 49 第二次交换后 27 38 49 97 76 13 65 49 J向左扫描,位置不变,第三次交换后 27 38 13 97 76 49 65 49 I向右扫描,位置不变,第四次交换后 27 38 13 49 76 97 65 49J向左扫描 27 38 13 49 76 97 65 49(一次划分过

14、程) 初始关键字 49 38 65 97 76 13 27 49一趟排序之后 27 38 13 49 76 97 65 49 二趟排序之后 13 27 38 49 49 6576 97三趟排序之后 13 27 38 49 49 6576 97最后的排序结果 13 27 38 49 49 65 76 97 各趟排序之后的状态Procedure Parttion(Var R : FileType; L, H : Integer; Var I : Integer);/对无序区R1,H做划分,I给以出本次划分后已被定位的基准元素的位置 /Begin I := 1; J := H; X := RI ;/

15、初始化,X为基准/ Repeat While (RJ >= X) And (I < J) Do begin J := J - 1 /从右向左扫描,查找第1个小于 X的元素/ If I < J Then /已找到RJ X/ begin RI := RJ; /相当于交换RI和RJ/ I := I + 1 end; While (RI <= X) And (I < J) Do I := I + 1 /从左向右扫描,查找第1个大于 X的元素/ end; If I < J Then /已找到RI > X / begin RJ := RI; /相当于交换RI和RJ

16、/ J := J - 1 end Until I = J; RI := X /基准X已被最终定位/End; /Parttion /Procedure QuickSort(Var R :FileType; S,T: Integer); /对RS.T快速排序/Begin If S < T Then /当RS.T为空或只有一个元素是无需排序/ begin Partion(R, S, T, I); /对RS.T做划分/ QuickSort(R, S, I-1);/递归处理左区间RS,I-1/ QuickSort(R, I+1,T);/递归处理右区间RI+1.T / end;End; /Quick

17、Sort/五、堆排序(Heap Sort)1. 基本思想: 堆排序是一树形选择排序,在排序过程中,将R1.N看成是一颗完全二叉树的顺序存储结构,利用完全二叉树中双亲结点和孩子结点之间的内在关系来选择最小的元素。2. 堆的定义: N个元素的序列K1,K2,K3,.,Kn.称为堆,当且仅当该序列满足特性:KiK2i Ki K2i+1(1 I N/2)六、几种排序算法的比较和选择 1. 选取排序方法需要考虑的因素:(1) 待排序的元素数目n;(2) 元素本身信息量的大小;(3) 关键字的结构及其分布情况;(4) 语言工具的条件,辅助空间的大小等。2. 小结:(1) 若n较小(n <= 50),则可以采用直接插入排序或直接选择排序。由于直接插入排序所需的记录移动操作较直接选择排序多,因而当记录本身信息量较大时,用直接选择排序较好。(2) 若文件的初始状态已按关键字基本有序

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论