顺序循环队列队满队空的两种判别方式
寫在前面:博主是一位普普通通的19屆雙非軟工在讀生,平時(shí)最大的愛好就是聽聽歌,逛逛B站。博主很喜歡的一句話花開堪折直須折,莫待無花空折枝:博主的理解是頭一次為人,就應(yīng)該做自己想做的事,做自己不后悔的事,做自己以后不會(huì)留有遺憾的事,做自己覺得有意義的事,不浪費(fèi)這大好的青春年華。博主寫博客目的是記錄所學(xué)到的知識并方便自己復(fù)習(xí),在記錄知識的同時(shí)獲得部分瀏覽量,得到更多人的認(rèn)可,滿足小小的成就感,同時(shí)在寫博客的途中結(jié)交更多志同道合的朋友,讓自己在技術(shù)的路上并不孤單。
目錄:
1.方法一:少用一個(gè)元素空間
2.方法二:設(shè)置標(biāo)志位區(qū)分隊(duì)列的空和滿
1.方法一:少用一個(gè)元素空間
我們嚴(yán)蔚敏奶奶的書是使用的這種方法
當(dāng)我們的順序循環(huán)隊(duì)列空間大小是m那么有m-1個(gè)元素就可以認(rèn)為是隊(duì)滿,也就是:
(Q.rear+1)%MAXQSIZE==Q.front
那么隊(duì)空就是首尾指針相等,即:
Q.front==Q.rear
2.方法二:設(shè)置標(biāo)志位區(qū)分隊(duì)列的空和滿
我們看一道程序設(shè)計(jì)題:
假設(shè)以數(shù)組Q[m]存放循環(huán)隊(duì)列元素,同時(shí)設(shè)置一個(gè)標(biāo)志tag以tag== 0和tag==1來區(qū)別在隊(duì)頭指針(Q.front)和隊(duì)尾指針(Q.rear)相等時(shí),隊(duì)列狀態(tài)為空,還是滿,并試著寫出相應(yīng)插入刪除的算法
直接看代碼:
typedef struct{ElemType *base;int front;int rear;int tag; }SqQueue; Status InitQueue(SqQueue &Q) {Q.base=new ElemType[MAXSIZE];if(!Q.base)exit(1);Q.front=Q.rear=0;Q.tag=0;return OK; } Status EnQueue(SqQueue &Q,ElemType e) {if((Q.tag==1)&&(Q.rear==Q.front))//隊(duì)滿return ERROR;elseQ.base[Q.rear]=e;Q.rear=(Q.rear+1)%MAXSIZE;if(Q.tag==1)Q.tag=1;return OK; } Status DeQueue(SqQueue &Q,ElemType e) {if((Q.tag==0)&&(Q.rear==Q.front))//隊(duì)空return ERROR;e=Q.base[Q.front];Q.front=(Q.front+1)%MAXSIZE;if(Q.tag==1)Q.tag=0; return OK; }我們可以看到隊(duì)滿和空都需要具備兩個(gè)條件
隊(duì)滿:(Q.tag==1)&&(Q.rear==Q.front)
隊(duì)空:(Q.tag==0)&&(Q.rear==Q.front)
總結(jié)
以上是生活随笔為你收集整理的顺序循环队列队满队空的两种判别方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 递归时间/空间复杂度的分析(斐波那契为例
- 下一篇: 二叉树的四种遍历方式(递归和非递归双重实