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