顺序队列

    今天,我们一起实现一个顺序队列,通过它来熟练一下C++编程。

SeqQueue.h具体内容如下:

template<typename Type> class SeqQueue{
public:
	SeqQueue(int sz) :m_nrear(0), m_nfront(0), m_ncount(0), m_nMaxSize(sz){
		m_pelements = new Type[sz];
		if (m_pelements == NULL){
			cout << "Application Error!" << endl;
			exit(1);
		}
	}
	~SeqQueue(){
		delete[] m_pelements;
	}
	void MakeEmpty();               //make the queue empty
	bool IsEmpty();
	bool IsFull();
	bool Append(const Type item);   //insert data
	Type Delete();                  //delete data
	Type Get();                     //get data
	void Print();                   //print the queue

private:
	int m_nrear;
	int m_nfront;
	int m_ncount;
	int m_nMaxSize;
	Type *m_pelements;

};

template<typename Type> void SeqQueue<Type>::MakeEmpty(){
	this->m_ncount = 0;
	this->m_nfront = 0;
	this->m_nrear = 0;
}

template<typename Type> bool SeqQueue<Type>::IsEmpty(){
	return m_ncount == 0;
}

template<typename Type> bool SeqQueue<Type>::IsFull(){
	return m_ncount == m_nMaxSize;
}

template<typename Type> bool SeqQueue<Type>::Append(const Type item){
	if (IsFull()){
		cout << "The queue is full!" << endl;
		return 0;
	}
	m_pelements[m_nrear] = item;
	m_nrear = (m_nrear + 1) % m_nMaxSize;
	m_ncount++;
	return 1;
}

template<typename Type> Type SeqQueue<Type>::Delete(){
	if (IsEmpty()){
		cout << "There is no element!" << endl;
		exit(1);
	}
	Type temp = m_pelements[m_nfront];
	m_nfront = (m_nfront + 1) % m_nMaxSize;
	m_ncount--;
	return temp;
}

template<typename Type> Type SeqQueue<Type>::Get(){
	if (IsEmpty()){
		cout << "There is no element!" << endl;
		exit(1);
	}
	return m_pelements[m_nfront];
}

template<typename Type> void SeqQueue<Type>::Print(){
	cout << "front";
	for (int i = 0; i < m_ncount; i++){
		cout << "--->" << m_pelements[(m_nfront + i + m_nMaxSize) % m_nMaxSize];
	}
	cout << "--->rear" << endl << endl << endl;
}
main.cpp具体内容如下:

#include <iostream>
using namespace std;

#include "SeqQueue.h"

int main(){
	SeqQueue<int> queue(10);
	int init[10] = { 1, 6, 9, 0, 2, 5, 8, 3, 7, 4 };
	for (int i = 0; i < 5; i++){
		queue.Append(init[i]);
	}
	queue.Print();

	cout << queue.Delete() << endl;
	queue.Print();

	for (int i = 5; i < 10; i++){
		queue.Append(init[i]);
	}
	queue.Print();

	cout << queue.Get() << endl;

	queue.MakeEmpty();
	queue.Print();

	queue.Append(1);
	queue.Print();
	cin.get();

	return 0;
}
运行效果如图1所示:

图1 运行效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尹成

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值