数据结构与算法。第3章栈 和队 列3.ppt

数据结构与算法。第3章栈 和队 列3.ppt

ID:50999643

大小:548.50 KB

页数:35页

时间:2020-03-17

数据结构与算法。第3章栈 和队 列3.ppt_第1页
数据结构与算法。第3章栈 和队 列3.ppt_第2页
数据结构与算法。第3章栈 和队 列3.ppt_第3页
数据结构与算法。第3章栈 和队 列3.ppt_第4页
数据结构与算法。第3章栈 和队 列3.ppt_第5页
资源描述:

《数据结构与算法。第3章栈 和队 列3.ppt》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、2021年7月25日数据结构讲义1从上图所示的循环队可以看出:可见在队满和队空情况下都有:front==rear,这显然是必须要解决的一个问题。方法之一是:附设一个存储队中元素个数的变量如num,当num==0时队空,当num==MAXSIZE时为队满。另一种方法是:少用一个元素空间,把图(d)所示的情况就视为队满,此时的状态是队尾指针加1就会从后面赶上队头指针,这种情况下队满的条件是:(rear+1)%MAXSIZE==front,也能和空队区别开。我们采用第一种方法。2021年7月25日数据结构讲义

2、2循环队列的类型定义如下:typedefstruct{datatypedata[MAXSIZE];/*数据的存储区*/intfront,rear;/*队头队尾指针*/intnum;/*队中元素的个数*/}CSeQueue;/*循环队*/2021年7月25日数据结构讲义3⑴置空队【算法3-14】构建一个空的循环队算法CSeQueue*Init_SeQueue(){CSeQueue*q;q=(CSeQueue*)malloc(sizeof(CSeQueue));q>front=q>rear=MAXSIZ

3、E-1;q>num=0;returnq;}2021年7月25日数据结构讲义4⑵入队【算法3-15】循环队入队算法intIn_SeQueue(CSeQueue*q,datatypex){if(q>num==MAXSIZE){printf("队满");return-1;/*队满不能入队*/}else{q->rear=(q>rear+1)%MAXSIZE;q>data[q>rear]=x;q>num++;return1;/*入队完成*/}}2021年7月25日数据结构讲义5⑶出队【算法3-16】循

4、环队出队算法intOut_SeQueue(CSeQueue*q,datatype*x){if(q>num==0){printf("队空");return-1;/*队空不能出队*/}else{q>front=(q>front+1)%MAXSIZE;*x=q>data[q>front];/*读出队头元素*/q>num--;return1;/*出队完成*/}}2021年7月25日数据结构讲义6⑷判队空【算法3-17】判循环队空队算法intEmpty_SeQueue(CSeQueue*q){if(q

5、>num==0)return1;elsereturn0;}2021年7月25日数据结构讲义7⒉链队链式存储的队称为链队。和链栈类似,用单链表来实现链队,根据队的FIFO原则,为了操作上的方便,我们分别需要一个头指针和尾指针,如图所示。图中头指针front和尾指针rear是两个独立的指针变量,从结构性上考虑,通常将二者封装在一个结构中。2021年7月25日数据结构讲义8链队的描述如下:typedefstructnode{datatypedata;structnode*next;}QNode;/*链队结点

6、的类型*/typedefstruct{QNnode*front,*rear;}LQueue;/*将头尾指针封装在一起的链队*/定义一个指向链队的指针:LQueue*q;2021年7月25日数据结构讲义9带头结点的链队如图所示:2021年7月25日数据结构讲义10(1)创建一个带头结点的空队【算法3-18】置一个空链队算法LQueue*Init_LQueue(){LQueue*q;Qnode*p;q=(LQueue*)malloc(sizeof(LQueue));/*申请头尾指针结点*/p=(QNode*

7、)malloc(sizeof(QNode));/*申请链队头结点*/p>next=NULL;q>front=p;q>rear=p;returnq;}2021年7月25日数据结构讲义11(2)入队【算法3-19】链队入队算法voidIn_LQueue(LQueue*q,datatypex){QNode*p;p=(QNode*)malloc(sizeof(QNode));p>data=x;p>next=NULL;q>rear>next=p;q>rear=p;}2021年7月25日数据结构讲义

8、12(3)判队空【算法3-20】判链队空算法intEmpty_LQueue(LQueue*q){if(q>front==q>rear)return1;elsereturn0;}2021年7月25日数据结构讲义13(4)出队【算法3-21】链队出队算法intOut_LQueue(LQueue*q,datatype*x){QNode*p;if(Empty_LQueue(q)){printf("队空");return0;/*队空,出队失败*/

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。