推免复习之数据结构与算法 顺序队列

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

代码实现如下,供参考:

#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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值