vb小学期讲义

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

( c)非完全二叉树
图 完全二叉树
完全二叉树的特点是:
(1)所有的叶结点都出现在第k层或k-1层。 (2)具有n个结点的完全二叉树的深度为[log2n]+1。 符号[x]表示不大于x的最大整数。
遍历二叉树
在二叉树的一些应用中,常常要求在树中查找具有某 种特征的结点,或者对树中全部结点逐一进行某种处 理。这就引入了遍历二叉树的问题,即如何按某条搜 索路径巡访树中的每一个结点,使得每一个结点均被 访问一次,而且仅被访问一次。


数据结构主要指逻辑结构和物理结构 数据之间的相互关系称为逻辑结构。通常分 为四类基本结构: 一、集合 结构中的数据元素除了同属于一种 类型外,别无其它关系。 二、线性结构 结构中的数据元素之间存在一 对一的关系。 三、树型结构 结构中的数据元素之间存在 一对多的关系。 四、图状结构或网状结构 结构中的数据元素 之间存在多对多的关系。 数据结构在计算机中的表示称为数据的物理结 构,又称为存储结构。
定义:二叉树是由n(n>=0)个结点的有限集合
构成,此集合或者为空集,或者由一个根结点及 两棵互不相交的左右子树组成,并且左右子树都 是二叉树。
树的深度:树的最大层次; 结点的度:结点拥有的子树数
二叉树结点的子树要区分左子树和右子树,即使只有一棵子树 也要进行区分,说明它是左子树,还是右子树。这是二叉树与 树的最主要的差别。图列出二差树的5种基本形态,图 (C) 和 图(d)是不同的两棵二叉树。 A B (a) 空二叉树 A
满 二 叉 树
如果深度为k、n个结点组成的二叉树中的结点能够与深 度为k的顺序编号的满二叉树从1到n标号的结点相对应,则
称这样的二叉树为完全二叉树,图(b)、(c)是 2棵非完全二叉树。满二叉树是完全二叉树的 特例。
1
2 3 5 6 2
1
3 5 2
1
3 6 7
4
4
7
(a)完全二叉树
(b)非完全二叉树
例1、线性 表:(bat,cat, eat,fat, hat,jat, lat,mat)的 单链表示意 图如下:
…… …
…… 200 …… 135 170 …… Null 130 110 …… 205 160 ……
110
hat ……. cat eat …. mat bat fat …… jat lat ……
A
B B
A
C
(b) (c) (d) 根和空的 左右子树 根和左子树 根和右子树
(e) 根和左右子树
二叉树的5种形式
二叉树的性质: 性质1: 在二叉树的第i层上至多有2i-1个结点(i>=1)。 性质2:深度为k的二叉树至多有2k-1个结点(k>=1). 两种特殊形态的二叉树:满二叉树和完全二叉树。 一棵深度为k且由2k-1个结点的二叉树称为满二叉树。图就 是一棵满二叉树,对结点进行了顺序编号。 1 2 4 5 3 6 7
线性链表 链表是指用一组任意的存储单元来依次 存放线性表的结点,这组存储单元即可以是连续 的,也可以是不连续的,甚至是零散分布在内存 中的任意位置上的。因此,链表中结点的逻辑次 序和物理次序不一定相同。为了能正确表示结点 间的逻辑关系,在存储每个结点值的同时,还必 须存储指示其后继结点的地址(或位置)信息, 这个信息称为指针(pointer)或链(link)。这两 部分组成了链表中的结点结构:
…… 130 135 …… 160 头指针 head 165 170 165 …… 200 205 ……

head
bat cat eat

mat ^
插入/删除运算 插入运算是将值为x的新结点插入 到表的第i个结点的位置上,即插入到ai1与ai之间。因此,我们必须首先找到ai-1 的存储位置p; 链表上实现插入和删除运算,无须 移动结点,仅需修改指针。
2、删除
线性表的删除运算是指将表的第 i(1≦i≦n)结点删除,使长度为n的线性表: (a1,…a i-1,ai,a i+1…,an) 变成长度为n-1的线性表 (a1,…a i-1,a i+1,…,an)
线性表的链式表示和实现
为避免大量结点的移动,我们介绍线性表的另 一种存储方式,链式存储结构,简称为链表 (Linked List)。
数据结构
基本概念和术语
为了计算机编写出一个“好”的程序,必须分 析待处理的对象的特征及各对象之间存在的关 系,这就是数据结构这门课所要研究的问题。 数据结构就是研究数据的逻辑结构和物理结构 以及它们之间相互关系,并对这种结构定义相 应的运算,而且确保经过这些运算后所得到的 新结构仍然是原来的结构类型。

(4)效率与存储量需求 效率指的是算法执行的 时间(时间复杂度) ;存储量需求指算法执行 过程中所需要的最大存储空间(空间复杂度)。
几种线性结构

一、线性表


线性表的逻辑结构

线性表(Linear List) :由n(n≧)个数据元素(结 点)a1,a2, …an组成的有限序列。其中数据元 素的个数n定义为表的长度。当n=0时称为空表, 常常将非空的线性表(n>0)记作: (a1,a2,…an) 这里的数据元素ai(1≦i≦n)只是一个抽象的符 号,其具体含义在不同的情况下可以不同。 例1、26个英文字母组成的字母表 (A,B,C、…、Z) 例2、某校从1978年到1983年各种型号的计算 机拥有量的变化情况。 (6,17,28,50,92,188)
循环链表 循环链表时一种头尾相接的链表。其特点 是无须增加存储量,仅对表的链接方式稍 作改变,即可使得表处理更加方便灵活。 单循环链表:在单链表中,将终端结点的指 针域NULL改为指向表头结点的或开始结 点,就得到了单链形式的循环链表,并简 单称为单循环链表。
head
a1
….
an
⑴ 非空表
⑵ 空表 在用头指针表示的单链表中,要找到终端结 点an,则需从头指针开始遍历整个链表.


线性表的顺序存储结构
线性表 把线性表的结点按逻辑顺序依次存放在一组 地址连续的存储单元里。用这种方法存储的线 性表简称顺序表。

顺序表上实现的基本操作 在顺序表存储结构中,很容易实现线 性表的一些操作, 1、插入 线性表的插入运算是指在表的第 I(1≦i≦n+1个位置上,插入一个新结点x, 使长度为n的线性表 (a1,…a i-1,ai,…,an) 变成长度为n+1的线性表 (a1,…a i-1,x,ai,…,an)
例、一叠书或一叠盘子。
栈顶
an
a n-1
……
a2
栈底
a1
三、
队列
队列(Queue)也是一种运算受限的线性表。它 只允许在表的一端进行插入,而在另一端进行删除。 允许删除的一端称为队头(front),允许插入的一端 称为队尾(rear)。 例如:排队购物。操作系统中的作业排队。先进 入队列的成员总是先离开队列。因此队列亦称作先 进先出(First In First Out)的线性表,简称FIFO 表。 当队列中没有元素时称为空队列。在空队列中依 次加入元素a1,a2,…an之后,a1是队头元素,an是队 尾元素。显然退出队列的次序也只能是a1,a2,…an , 也就是说队列的修改是依先进先出的原则进行的。
(2)其余的结点可分为m(m>=0)个互不相交的子集 T1,T2,T3…Tm,其中每个子集又是一棵树,并称 其为子树(Subtree)。
二叉树:二叉树在树结构的应用中起着非常重
要的作用,因为对二叉树的许多操作算法简单, 而任何树都可以与二叉树 相互转换,这样就解决 了树的存储结构及其运算中存在的复杂性。
data
link
其中:data域是数据域,用来存放结点的值。 next是指针域(亦称链域),用来存放结点的直接 后继的地址(或位置)。链表正是通过每个结点的 链域将线性表的n个结点按其逻辑次序链接在一起的。 由于上述链表的每一个结只有一个链域,故将这种 链表称为单链表(Single Linked)。 显然,单链表中每个结点的存储地址是存 放在其前趋结点next域中,而开始结点无前趋,故 应设头指针head指向开始结点。同时,由于 终端结点无后继,故终端结点的指针域为空,即 null(图示中也可用^表示)。




数据(Data):是对信息的一种符号表示。在计 算机科学中是指所有能输入到计算机中并被 计算机程序处理的符号的总称。 数据元素(Data Element):是数据的基本单位, 在计算机程序中通常作为一个整体进行考虑 和处理。 一个数据元素可由若干个数据项组成。数 据项是数据的不可分割的最小单位。 数据对象(Data Object):是性质相同的数据元 素的集合。是数据的一个子集。 数据结构(Data Structure):是相互之间存在一 种或多种特定关系的数据元素的集合。
Hale Waihona Puke 下图是队列的示意图:出队
a1
a2 …
an
入队
队头
队尾
非线性结构:树
树型结构是一类重要的非线性结构。树型结构是
结点之间有分支,并且具有层次关系的结构,它 非常类似于自然界中的树。树结构在客观世界国 是大量存在的,例如家谱、行政组织机构都可用 树形象地表示。树在计算机领域中也有着广泛的 应用,例如在编译程序中,用树来表示源程序的 语法结构;在数据库系统中,可用树来组织信息; 在分析算法的行为时,可用树来描述其执行过程。 等等。 定义:树(Tree)是n(n>=0)个结点的有限集T, T为空时称为空树,否则它满足如下两个条件: (1)有且仅有一个特定的称为根(Root)的结点;


算法和算法分析 算法:是对特定问题求解步骤的一种描述 算法是指令的有限序列,其中每一条指令 表示一个或多个操作。 算法具有以下五个特性: (1)有穷性 一个算法必须总是在执行有穷步 之后结束,且每一步都在有穷时间内完成。 (2)确定性 算法中每一条指令必须有确切的 含义。不存在二义性。且算法只有一个入口和 一个出口。 (3)可行性 一个算法是可行的。即算法描述 的操作都是可以通过已经实现的基本运算执行 有限次来实现的。
双链表
双向链表(Double linked list):在单链表 的每个结点里再增加一个指向其直接前趋 的指针域prior。这样就形成的链表中有两 个方向不同的链,故称为双向链表。
二、

栈(Stack)是限制在表的一端进行插入和 删除运算的线性表,通常称插入、删除的这 一端为栈顶(Top),另一端为栈底(Bottom)。 当表中没有元素时称为空栈。 假设栈S=(a1,a2,a3,…an),则a1称为 栈底元素,an为栈顶元素。栈中元素按a1,a2, a3,…an的次序进栈,退栈的第一个元素应 为栈顶元素。换句话说,栈的修改是按后进 先出的原则进行的。因此,栈称为后进先出 表(LIFO)。

4)输入 一个算法有零个或多个输入,这些输 入取自于某个特定的对象集合。 5)输出 一个算法有一个或多个输出,这些输 出是同输入有着某些特定关系的量。 1.4.2 算法设计的要求 评价一个好的算法有以下几个标准: (1) 正确性(Correctness ) 算法应满足具体问题 的需求。 (2)可读性(Readability) 算法应该好读。以有利 于阅读者对程序的理解。 (3)健状性(Robustness) 算法应具有容错处理。 当输入非法数据时,算法应对其作出反应,而 不是产年莫名其妙的输出结果。
例3、学生健康情况登记表如下:
姓 名 王小林 陈 红


性 别 年龄 男 女 18 20
健康情况 健康 一般
790631 790632
刘建平
张立立 ……..
790633
790634 ……..

男 …….
21
17 …….
健康
神经衰弱 …….


例4、一副扑克的点数 (2,3,4,…,J,Q,K,A) 从以上例子可看出线性表的逻辑特征是: 在非空的线性表,有且仅有一个开始结点a1, 它没有直接前趋,而仅有一个直接后继a2; 有且仅有一个终端结点an,它没有直接后继, 而仅有一个直接前趋a n-1; 其余的内部结点ai(2≦i≦n-1)都有且仅有一个 直接前趋a i-1和一个直接后继a i+1。 线性表是一种典型的线性结构。 数据的运算是定义在逻辑结构上的,而运算 的具体实现则是在存储结构上进行的。
相关文档
最新文档