第3章堆栈、队列、二叉树.ppt
《第3章堆栈、队列、二叉树.ppt》由会员分享,可在线阅读,更多相关《第3章堆栈、队列、二叉树.ppt(82页珍藏版)》请在三一办公上搜索。
1、堆栈、队列、二叉树,线性表堆栈队列二叉树,栈的逻辑结构,空栈:不含任何数据元素的栈。,(a1,a2,an),栈:限定仅在表尾进行插入和删除操作的线性表。,允许插入和删除的一端称为栈顶,另一端称为栈底。,栈,栈,a1,a2,a3,入栈,出栈,插入:入栈、进栈、压栈删除:出栈、弹栈,栈的示意图,栈,栈的操作特性:后进先出,a1,a2,a3,入栈,出栈,插入:入栈、进栈、压栈删除:出栈、弹栈,栈的示意图,栈操作函数包括:栈的初始化、栈的释放、弹栈压栈。,存储方式:连续存储(基于数组):顺序栈动态存储(基于链表):链栈,/stack.h#ifndef STACK_T_H#define SATCK_T_
2、H#include/结构定义struct Stack int*data;/栈数据存储 int memNum;/栈元素个数 int size;/栈大小;int InitStack(Stack/函数原型#endif STACK_T_H,顺序栈的定义(1),/stack.cpp#include“stack.h”/初始化栈int InitStack(Stack,顺序栈栈的定义(2),/弹栈,无数据时返回0,否则返回1int PopStack(Stack,顺序栈的定义(3),/test.cpp#include#include“stack.h”int main()int i,num;Stack newSt
3、ack;InitStack(newStack,10);coutPush integers to stack:endl;for(i=0;i10;+i)couti;PushStack(newStack,i);coutendl;coutFrom function popStack:endl;for(i=0;i10;+i)if(PopStack(newStack,num)coutnum;,顺序栈的测试(1),coutendlendl;for(i=10;i20;+i)newStack.datanewStack.memNum+=i;coutReading from struct newStack:endl
4、;for(i=0;i10;+i)coutnewStack.datai;coutendl;for(i=10;i20;+i)coutnewStack.datai;coutendl;DelStack(newStack);return 0;,顺序栈的测试(2),顺序栈的测试输出(3),使用结构时的一些缺陷通过专门的函数使用时没有问题直接操作时可能会出错,任何函数都可以直接操作可能会被赋予不恰当的值,或破坏默认的操作流程,如栈的先进后出数据和函数的相关性也没有体现,所有函数都是平等的根本原因对数据的访问权限问题封装和隐藏机制可以克服该问题,队列,队列的逻辑结构,空队列:不含任何数据元素的队列。,队列:只
5、允许在一端进行插入操作,而另一端进行删除操作的线性表。,允许插入(也称入队、进队)的一端称为队尾,允许删除(也称出队)的一端称为队头。,(a1,a2,an),队列,队列的操作特性:先进先出,a1,a2,a3,入队,队尾,队头,出队,队头,队列的逻辑结构,队列操作函数包括:(1)队列的初始化(2)队列的释放、(3)插入一个新的队尾元素,称为进队;(4)删除队头元素,称为出队;(5)读取队头元素;,队列,队列的顺序存储结构及实现,顺序队列:队列的顺序存储结构,如何改造数组实现队列的顺序存储?,例:a1a2a3a4依次入队,a1,a2,a3,a4,入队操作时间性能为O(1),队列,如何改造数组实现队
6、列的顺序存储?,例:a1a2依次出队,队列的顺序存储结构及实现,a1,a2,a3,a4,队列,如何改造数组实现队列的顺序存储?,例:a1a2依次出队,队列的顺序存储结构及实现,a2,a3,a4,队列,如何改造数组实现队列的顺序存储?,例:a1a2依次出队,队列的顺序存储结构及实现,a3,a4,出队操作时间性能为O(n),队列,队列的顺序存储结构及实现,如何改进出队的时间性能?,队列,队列的顺序存储结构及实现,例:a1a2a3a4依次入队,a1,a2,a3,a4,入队操作时间性能仍为O(1),队列,例:a1a2依次出队,队列的顺序存储结构及实现,a1,a2,a3,a4,出队操作时间性能提高为O(
7、1),队列,例:a1a2依次出队,队列的顺序存储结构及实现,a3,a4,队列的移动有什么特点?,队列,例:a1a2依次出队,队列的顺序存储结构及实现,a3,a4,队列,假溢出:当元素被插入到数组中下标最大的位置上之后,队列的空间就用尽了,尽管此时数组的低端还有空闲空间,这种现象叫做假溢出。,队列的顺序存储结构及实现,继续入队会出现什么情况?,a3,a4,a5,队列,循环队列:将存储队列的数组头尾相接。,队列的顺序存储结构及实现,如何解决假溢出?,0 1 2 3 4,入队,出队,a3,a4,a5,a6,逻辑上的循环队列,队列,不存在物理的循环结构,用软件方法实现。求模:(41)mod 50,队列
8、的顺序存储结构及实现,如何实现循环队列?,0 1 2 3 4,入队,出队,a3,a4,a6,队列,如何判断循环队列队空?,队空的临界状态,队列的顺序存储结构及实现,0 1 2 3 4,入队,出队,a3,队列,如何判断循环队列队空?,执行出队操作,队空:front=rear,队列的顺序存储结构及实现,0 1 2 3 4,入队,出队,a3,队列,如何判断循环队列队满?,队满的临界状态,队列的顺序存储结构及实现,0 1 2 3 4,入队,出队,a3,a4,a5,a6,队列,如何判断循环队列队满?,执行入队操作,队满:front=rear,队列的顺序存储结构及实现,0 1 2 3 4,入队,出队,a3
9、,a4,a5,a6,a7,队列,方法一:附设一个存储队列中元素个数的变量num,当num=0时队空,当num=QueueSize时为队满;方法二:修改队满条件,浪费一个元素空间,队满时数组中只有一个空闲单元;方法三:,如何确定不同的队空、队满的判定条件?为什么要将队空和队满的判定条件分开?,队列的顺序存储结构及实现,队列,循环队列类的声明,const int QueueSize=100;template class CirQueue public:CirQueue();CirQueue();void EnQueue(T x);T DeQueue();T GetQueue();bool Empt
10、y();private:T dataQueueSize;int front,rear;,队列,template void CirQueue:EnQueue(T x)if(rear+1)%QueueSize=front)throw 上溢;rear=(rear+1)%QueueSize;datarear=x;,循环队列的实现入队,a3,a4,a5,队列,0 1 2 3 4,入队,a4,a5,a6,出队,template T CirQueue:DeQueue()if(rear=front)throw 下溢;front=(front+1)%QueueSize;return datafront;,循环队
11、列的实现出队,a3,队列,template T CirQueue:GetQueue()if(rear=front)throw 下溢;i=(front+1)%QueueSize;return datai;,循环队列的实现读队头元素,0 1 2 3 4,入队,a4,a5,a6,出队,a3,树,树的基本概念和术语二叉树的基本概念和性质二叉树的存储结构和各种遍历算法,树的基本概念,什么是树?什么是子树、树根?树的深度?什么是结点、双亲结点、孩子结点、结点的度、兄弟、祖先和子孙?,树的定义,树(Tree)是由一个或多个结点组成的有限集合T。其中:(1)有一个特定的结点,称为该树的根(root)结点;,(
12、2)根结点之外的其余结点可分为m(m0)个互不相交的有限集合T1,T2,Tm,且其中每一个集合本身又是一棵树,称之为根的子树(Sub Tree)。这是递归定义。仅有一个根结点的树是最小树。,树的常用术语,子女:若结点的子树非空,结点子树即为该结点的子女。双亲:若结点有子女,该结点是子女双亲。,树的常用术语,兄弟:同一结点的子女互称为兄弟。度:结点的子女个数即为该结点的度;树中各个结点的度的最大值称为树的度。分支结点:度不为0的结点即为分支结点,亦称为非终端结点。叶结点:度为0的结点即为叶结点,亦称为终端结点。祖先:某结点到根结点的路径上的各个结点都是该结点的祖先。子孙:某结点的所有下属结点,都
13、是该结点的子孙。,树的常用术语,结点的层次:规定根结点在第一层,其子女结点的层次等于它的层次加一。以下类推。深度:结点的深度即为结点的层次;离根最远结点的层次即为树的深度。,树的常用术语,高度:规定叶结点的高度为1,其双亲结点的高度等于它的高度加一。树的高度:等于根结点的高度,即根结点所有子女高度的最大值加一。有序树:树中结点的各棵子树 T0,T1,是有次序的,即为有序树。无序树:树中结点的各棵子树之间的次序是不重要的,可以互相交换位置。森林:森林是m(m0)棵树的集合。,树的表示形式,树形结构法,如前面图(a);集合包含关系文氏图法,如图(b);凹入法,如图(c)。,二叉树,二叉树的定义:二
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 堆栈 队列 二叉
链接地址:https://www.31ppt.com/p-5953141.html