数据结构(C++)——队列

本文介绍了一个使用C++模板实现的循环队列类,并演示了如何通过简单的菜单选择进行队列的基本操作,如入队、出队、显示队列内容等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AllHead.h

#ifndef _ALLHEAD_H
#define _ALLHEAD_H

#include<iostream>
#include<assert.h>
using namespace std;

#endif

Queue.h

#ifndef _QUEUE_H
#define _QUEUE_H
#include"AllHead.h"
const int maxSize = 10;

template<class T>
class Queue
{
protected:
	int front;
	int rear;
	T *elements;
public:
	Queue();
	~Queue(){delete []elements;}
	void EnQueue(T x);
    bool DeQueue();
	T getFront();
	bool IsEmpty(){return rear == front?true:false;}
	bool IsFull(){return (rear+1)%maxSize == front?true:false;}
	int getSize(){return (rear-front+maxSize)%maxSize;}
	void showQueue();
	void clear(){front = rear = 0;}
};
template<class T>
void Queue<T>::showQueue()
{
	int i;
	if(!IsEmpty())
	{
		for(i=front;i!=rear;i = (i+1+maxSize)%maxSize)
		{
			cout<<elements[i]<<"\\";
		}
		cout<<endl;
	}
	else
	{
		cout<<"队列空(showQueue)..."<<endl;
	}
}
template<class T>
Queue<T>::Queue():front(0),rear(0)
{
	elements = new T[maxSize];
	assert(elements != NULL);
}
template<class T>
void Queue<T>::EnQueue(T x)
{
	if(!IsFull())
	{
      elements[rear] = x;
	  rear = (rear+1)%maxSize;
	}
	else
		cout<<"队列已满"<<endl;
}

template<class T>
bool Queue<T>::DeQueue()
{
	if(!IsEmpty())
	{
		front = (front+1)%maxSize;
	}
	else
	{
		cout<<"队列已空"<<endl;
	}
	return true;
}
template<class T>
T Queue<T>::getFront()
{
	T x;
	if(!IsEmpty())
	{
	  x = elements[front];
	  return x;
	}
	else
	{
		cout<<"队列已空"<<endl;
		return NULL;
	}
}


#endif

main.cpp


#include"Queue.h"
int main()
{
	Queue<int> q;
	int select = 1;
	while(select)
	{
		cout<<"==================================="<<endl;
		cout<<"==[1]EnQueue       [2]DeQueue======"<<endl;
		cout<<"==[3]showQueue     [4]getFront====="<<endl;
		cout<<"==[5]getSize       [6]clear========"<<endl;
		cout<<"==================================="<<endl;
		cout<<"请选择:>";
		cin>>select;
		switch(select)
		{
		case 1:
			int x;
			cout<<"输值以(-1)结束";
			while(cin>>x,x!=-1)
			{
				q.EnQueue(x);
			}
			break;
		case 2:
			q.DeQueue();break;
		case 3:
			q.showQueue();break;
		case 4:
			int head;
			head = q.getFront();
			cout<<head<<endl;
			break;
		case 5:
			int lenth;
			lenth = q.getSize();
			cout<<"队列长度:>"<<lenth<<endl;
			break;
		case 6:
			q.clear();
		}
	}

	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值