这一篇实现的是普通的顺序队列,实现很简单,其实就是对线性表的限制,从队首出队,从队尾入队,缺点也很明显,那就是假溢出现象,假溢出现象意思是明明还有空的空间,但是却无法再往里存数据了,主要是两个游标的移动导致的,因此为了克服这个问题,在我的下一篇博客中我会实现一下环形队列。
代码实现如下,供参考:
#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;
}