北大数据结构课讲义.pptx
《北大数据结构课讲义.pptx》由会员分享,可在线阅读,更多相关《北大数据结构课讲义.pptx(65页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、4.1 栈 栈的定义栈(stack)又称堆栈,是限定只在表尾进行插入或删除操作的线性表。栈S=(a1,a2,,an)是按a1,a2,,an次序进栈的,a1为栈底元素,an为栈顶元素。第1页/共65页栈与递归递归可使问题及求解步骤的描述变得简洁而清晰。特别是对于复杂问题,用递归方法分析描述,比较自然,利于理解。递归包括递归步骤和终止出口。递归问题转化为非递归往往要用栈来实现,把在递归中用到的变量入栈出栈,如书上【习题4-4】之9,10第2页/共65页4.7 队列队列是一种先进先出(FIFO)线性表。只允许在其一端删除元素,即队头(front),只允许在其另一端插入元素,即队尾(rear)。第3页
2、/共65页图 4-10 顺序队列的插入和删除操作第4页/共65页0 1 2 3 4 M-2 M-101234M-1M-2:循环队列循环队列 把队列把队列(数组数组)设想成头尾相连的循环表,使得数组前设想成头尾相连的循环表,使得数组前部由于删除操作而导致的无用空间尽可能得到重复利用,部由于删除操作而导致的无用空间尽可能得到重复利用,这样的队列称为这样的队列称为循环队列循环队列。入队时需先修改入队指针(队尾指针)rear=(rear+1)%QueueMaxSize出队时需要修改队头指针front=(front+1)%QueueMaxSize第5页/共65页 初始时初始时,队列为空队列为空,有有 f
3、ront=0 rear=0测试队列为空的条件是测试队列为空的条件是 front=rear 1 Mab c dfrontrearad约定约定 rear 指出实际队尾元素所在的位置指出实际队尾元素所在的位置,front 指出实际队头元素所在位置的前一个位置指出实际队头元素所在位置的前一个位置.第6页/共65页队列的静态数组一般是循环使用的。队列的静态数组一般是循环使用的。为了判别队列满和队列空的指针状况,令为了判别队列满和队列空的指针状况,令front指向队指向队首元素的前一个位置。首元素的前一个位置。入队时需先修改入队指针(入队时需先修改入队指针(队尾指针)队尾指针)rear=(rear+1)%
4、QueueMaxSize 然后判断队列满的条件然后判断队列满的条件(rear+1)%QueueMaxSize=front最后将元素入队。最后将元素入队。出队时先出队时先判断队列空的条件判断队列空的条件 front=rear然后修改队头指针然后修改队头指针 front=(front+1)%QueueMaxSize 最后将元素出队。最后将元素出队。第7页/共65页第8页/共65页在顺序队列中插入和删除,不需要比较和移动任何元素,只需修改队尾和队首指针,并向队尾写入元素或从队首取出元素时间复杂度为:O(1)若存储队列的数组的长度为N,则队列长度(即所含元素个数)为:(N+rear-front)%N第
5、9页/共65页(2)队列的链式存储结构struct LinkQueue LNode*front;LNode*rear;struct LNode ElmeType data;LNode*next;struct LNode ElemTypedata;/数据域 Lnode*next;/指针域 ;第10页/共65页第11页/共65页在链队中插入和删除,不需要比较和移动任何元素,只需修改个别相关指针和进行结点的动态分配或回收操作时间复杂度为:O(1)第12页/共65页4.4.4 队列运算的实现1.队列运算在顺序存储结构上的实现(1)初始化队列void InitQueue(Queue&Q)Q.MaxSiz
6、e=10;Q.queue=new ElemTypeQ.MaxSiize;Q.front=Q.rear=0;第13页/共65页(2)将队列清空,并释放动态存储空间void ClearQueue(Queue&Q)if(Q.queue!=NULL)delete Q.queue;Q.front=Q.rear=0;Q.queue=NULL;Q.MaxSize=0;第14页/共65页(3)检查队列是否为空int QueueEmpty(Queue&Q)return Q.front=Q.rear;(4)读取队头元素/让front指针不是指向队首元素,而是指向它的前一个位置即:队首元素是队首指针front的下一
7、个位置中的元素ElemType PeekQueue(Queue&Q)if(Q.front=Q.rear)cerrQueue is Empty.endl;exit(1);return Q.queue(Q.front+1)%QueueMaxSize;第15页/共65页(5)向队列插入新元素-1void EnQueue(Queue&Q,const ElemType&item)int k=(Q.rear+1)%QueueMaxSize;/队尾的下一位置if(k=Q.front)cerrQueue is overflow.endl;exit(1);Q.rear=k;Q.queuek=item;入队时入队
8、时需先修改入队指针(队尾指针)rear=(rear+1)%QueueMaxSize 然后判断队列满队列满的条件(rear+1)%QueueMaxSize=front最后将元素入队。第16页/共65页(5)向队列插入新元素-2void EnQueue(queue&Q,const ElemType&item)if(Q.rear+1)%QueueMaxSize=Q.front)/扩大2倍的存储空间int k=sizeof(ElemType);Q.queue=(ElemType*)realloc(Q.queue,2*Q.MaxSize*k);/把原队列尾部内容后移MaxSize个位置if(Q.rear
9、!=Q.MaxSize-1)第17页/共65页 for(int i=0;i=q.rear;i+)Q.queuri+Q.MaxSize=Q.queuri;Q.rear+=Q.MaxSize;Q.MaxSize=2*Q.MaxSize;/求出队尾的下一个位置Q.rear=(Q.rear+1)%Q.MaxSize;/把item的值赋给新的队尾位置Q.queueQ.rear=item;入队时入队时需先修改入队指针(队尾指针)rear=(rear+1)%QueueMaxSize 然后判断队列满队列满的条件(rear+1)%QueueMaxSize=front最后将元素入队。第18页/共65页(6)从队列
10、中删除元素ElemType OutQueue(Queue&Q)if(Q.front=Q.rear)cerrQueue is empty.next;delete p;p=HQ.front;HQ.rear=NULL;struct LNode ElemTypedata;/数据域 Lnode*next;/指针域 ;第20页/共65页(3)判断链队是否为空int QueueEmpty(LinkQueue&HQ)return HQ.front=NULL;(4)读取队首元素ElemType PeekQueue(LinkQueue&HQ)if(HQ.front=NULL)cerr“Linked queue i
11、s empty.data;第21页/共65页(5)向链队中插入一个元素void EnQueue(LinkQueue&HQ,const ElemType&item)LNode*newptr=new LNode;if(newptr=NULL)cerr“Memory alocation failure.data=item;newptr-next=NULL;if(HQ.rear=NULL)HQ.front=HQ.rear=newptr;else HQ.rear=HQ.rear-next=newptr;/不妨与书上P78的算法9(ppt4,算法9):向单链表的末尾插入一个元素“相对照学习/思考与书上P1
12、37的算法2(ppt6,算法5):向链栈中插入一个元素“的不同第22页/共65页(6)从队列中删除一个元素ElemType OutQueue(LinkQueue&HQ)if(HQ.front=NULL)cerr“Linked queue is empty.data;Lnode*p=HQ.front;HQ.front=p-next;if(HQ.front=NULL)HQ.rear=NULL;delete p;return temp;/不妨与书上P79的算法10(ppt4,算法12):从单链表中删除表头元素“相对照学习/也可对照书上P137的算法3(ppt6,算法6):从链栈中删除一个元素”第23
13、页/共65页4.4.6 队列应用简介第一:解决主机与外设之间速度不匹配的问题如:打印输出。设置一个打印数据缓冲区,用队列存储待输出的数据,解决主机与外设速度不匹配的问题。第二:解决多用户引起的资源竞争问题如:多用户CPU资源竞争。操作系统通常按照每个请求在时间上的先后顺序,把它们排成一个队列第24页/共65页1.熟悉栈的含义,掌握基本概念、存储结构和运算的实现。2.熟悉队列的含义,掌握基本概念、存储结构和运算的实现。本章学习要点本章学习要点第25页/共65页本章习题本章习题(第第173177页页)(!)4.1.14.1.4 请独立完成该题4个问题(!)4.2 请独立完成该题(#)4.3 课外思
14、考该题(!)4.4.12,7 能在书上程序的基础上编写 程序实现(#)4.4.36,811 有兴趣者课外思考第26页/共65页书面回答,请以纸面形式上交课代表,要求整洁清楚,时间期限:5月10日 格式提头:学号/序号/姓名/第四章1、对于一个栈,如果输入项序列由A,B,C组成,给出全部可能和不可能的输出序列。2、设栈S和队列Q的初始状态为空,元素a1,a2,a3,a4,a5,a6,a7,a8依次通过栈S,一个元素出栈后立即进入队列Q,若8个元素出队列的次序是a3,a6,a7,a5,a8,a4,a2,a1,则栈S的容量至少应该是多少?(即至少应该容纳多少个元素?)3、设有算术表达式x+a*(y-
15、b)-c/d,将其转换为后缀表达式。4、有字符串序列为3*-y-a/y2,试利用栈给出将次序改变为3y-*ay2/-的操作步骤。(用X代表扫描字符串函数中顺序取一字符进栈的操作,S代表从栈中取出一个字符加入到新字符串尾的出栈操作。)例如,ABC变为BCA,则操作步骤为XXSXSS。5、假设Q0.10是一个线性队列,初始状态为front=rear=0,画出做完下列操作后队列的头尾指针的状态变化情况,若不能入队,请指出其元素,并说明理由。(要求明确标出各元素在队列中的位置序号,头、尾指针)(a)d,e,b,g,h入队(b)d,e出队(c)i,j,k,l,m入队(d)b出队(e)n,o,p入队课课后
16、后作作业业 第第四四章章 第27页/共65页约定约定:进栈进栈X,X,出栈出栈S S4个元素依次进栈个元素依次进栈,任何时候任何时候都可以出栈都可以出栈,请写出所有请写出所有可能的出栈序列可能的出栈序列1.XXXXSSSS2.XXXSXSSS3.XXXSSXSS4.XXXSSSXS5.XXSXXSSS6.XXSXSXSS7.XXSXSSXS8.XXSSXSXS9.XXSSXXSS10.XSXSXSXS11.XSXXXSSS12.XSXXSXSS13.XSXXSSXS14.XSXSXXSS方法提示方法提示第28页/共65页第五章 树5.1 树的概念5.2 二叉树5.3 二叉树的遍历 5.4 二叉
17、树的其他运算5.5 树的存储结构和运算退出第29页/共65页校长校长一一系系二二系系三三系系六六系系教教务务处处科科研研处处总总务务处处601 602教教务务科科603ABCD张张三三李李四四王王五五例例1工工厂厂第30页/共65页(根目录)f1f2f3fnd1d2dm例例2f11f12f1kd11d12 第31页/共65页例例3第32页/共65页例例4 au ee cn edutsinghua cspandabuaapku第33页/共65页一个数据元素一个数据元素:一个一个结点结点A数据元素数据元素(结点结点)之间的关系之间的关系:分支分支AB第34页/共65页5.1树的概念5.1.1 树的
18、定义 树Tree:是由n0 个结点组成的有穷集合以及结点之间关系组成的集合构成的结构。递归的数据结构树的递归定义:(1)树由具有相同特性的数据元素(称为结点)组成,结点个数为0时,称为空树;(2)在一棵非空树中有且仅有一个根root结点,除根结点外,其余结点可分为m(m 0)个互不相交的子集,每个子集也是一棵树,称为子树SubTree。第35页/共65页第36页/共65页tree=(K,R)K=ki|1in,n0,ki ElemTypeR=rElemType是具有相同特性的数据元素。关系r满足:(1)有且仅有一个结点没有前驱,这个结点即树根;(2)除树根外,其余结点有且仅有一个前驱;(3)包括
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北大 数据结构 讲义
限制150内