這一篇實現的是普通的順序隊列,實現很簡單,其實就是對線性表的限制,從隊首出隊,從隊尾入隊,缺點也很明顯,那就是假溢出現象,假溢出現象意思是明明還有空的空間,但是卻無法再往裏存數據了,主要是兩個遊標的移動導致的,因此爲了克服這個問題,在我的下一篇博客中我會實現一下環形隊列。
代碼實現如下,供參考:
#include<iostream>
#include<vector>
using namespace std;
class Queue
{
private:
vector<int> q;
int maxSize;
int size;
int front;
int back;
public:
Queue(int max);
~Queue();
bool enQueue(int value);
bool deQueue();
int getFront();
bool isEmpty();
void move();
};
Queue::Queue(int max=100)
{
size = 0;
front =0;
back =0;
maxSize = max;
q = vector<int> (max);
}
bool Queue::enQueue(int value)
{
size++;
q[back++] = value;
return true;
}
bool Queue::deQueue()
{
if (size == 0)
{
return false;
}
else
{
front++;
size--;
return true;
}
}
int Queue::getFront()
{
if (size == 0)
{
return 0;
}
else
{
return q[front];
}
}
bool Queue::isEmpty()
{
if (size == 0)
{
return true;
}
else
{
return false;
}
}
void Queue::move()
{
if (size == 0)
{
front = 0;
back = 0;
return;
}
else
{
int length = front;
for (int i = front; i <= back; i++)
{
q[i - length] = q[i];
}
front = 0;
back = back - length;
return;
}
}
int main()
{
Queue *queue = new Queue(5000);
for (int i = 0; i < 5000; i++)
{
queue->enQueue(i);
}
for (int i = 0; i < 5000; i++)
{
cout << queue->getFront() << endl;
queue->deQueue();
}
queue->move(); //否則會溢出
for (int i = 0; i < 5000; i++)
{
queue->enQueue(i);
}
for (int i = 0; i < 5000; i++)
{
cout << queue->getFront() << endl;
queue->deQueue();
}
system("pause");
return 0;
}