C++數(shù)據(jù)結(jié)構(gòu)之實現(xiàn)循環(huán)順序隊列
數(shù)據(jù)結(jié)構(gòu)–用C++實現(xiàn)循環(huán)順序隊列
- 隊列的操作特性:先進先出
- 隊列中元素具有相同類型
- 相鄰元素具有前驅(qū)和后繼關(guān)系
- 設(shè)置隊頭、隊尾兩個指針,以改進出隊的時間性能
約定:隊頭指針front指向隊頭元素的前一個位置,隊尾指針rear指向隊尾元素
為了解決假溢出,我們將存儲隊列的數(shù)組頭尾相接,從而產(chǎn)生了循環(huán)隊列。
如何判斷循環(huán)隊列隊空?
隊空:front=rear
如何盤對循環(huán)隊列堆滿?
隊滿:front=rear
那么問題就來了,隊空和隊滿的判斷條件相同,為了避免隊滿時產(chǎn)生隊空的判斷或者相反,我們需要修改隊滿條件使得隊空和堆滿的判定條件分開。
方法:浪費一個元素空間,隊滿時數(shù)組只有一個空閑單元。隊滿條件:(rear+1)%QueueSize==front
下面是實現(xiàn)代碼:
文件CirQueue.h
#ifndef CirQueue_byNim
#define CirQueue_byNim
#include<iostream>
using namespace std;
const int QueueSize=100; //循環(huán)隊列的最大存儲空間
template <class T>
class CirQueue
{
private:
T *data; //存儲數(shù)據(jù)的數(shù)組
int front,rear; //隊頭隊尾指針
public:
CirQueue()
{
data=new T[QueueSize];
front=rear=0;
}
~CirQueue()
{
delete []data;
front=rear=0;
}
void EnQueue(T e)
{
if((rear+1)%QueueSize==front) //隊滿條件
throw "上溢";
rear=(rear+1)%QueueSize;
data[rear]=e;
}
T DeQueue()
{
if(rear==front)//隊空條件
throw "下溢";
front=(front+1)%QueueSize;
return data[front];
}
T GetQueue()
{
if(rear==front)//隊空條件
throw "下溢";
return data[(front+1)%QueueSize];
}
bool empty()
{
if(front==rear) //隊空條件:front==rear
return true;
return false;
}
};
#endif
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
Linux系統(tǒng)下C語言中的標(biāo)準IO總結(jié)
最近用到了C語言的標(biāo)準IO庫,由于對其中的一些細節(jié)不是非常清楚,導(dǎo)致了許多Bug,花了好長時間來調(diào)試,所以在此做個筆記,這篇文章主要給大家介紹了關(guān)于Linux系統(tǒng)下C語言中標(biāo)準IO的相關(guān)資料,需要的朋友可以參考下2024-01-01
C++實現(xiàn)分水嶺算法(Watershed Algorithm)
這篇文章主要為大家詳細介紹了C++實現(xiàn)分水嶺算法Watershed Algorithm,具有一定的參考價值,感興趣的小伙伴們可以參考一 下2018-01-01

