队列

队列定义:

template <typename DataType>
class Queue{
private:
	int count;
	int maxSize;
	int front;
	int rear;
	DataType* elements;
public:
	Queue(int size)
	{
		maxSize = size;
		front = 0;
		rear = 0;
		count = 0;
		elements = new DataType[size];
		if(elements == NULL)
		exit(1);
	}
	~Queue()
	{
		delete[] elements;
	}
	bool insert(DataType);
	DataType delElement();
}; 

基本操作

template <typename DataType>
bool Queue<DataType>::insert(DataType)
{
	if(count == maxSize)
	{
		return false;
	}
	elements[rear] = DataType;
	rear = (rear+1)%maxSize;
	count++;
	return true;
}
template <typename DataType>
DataType Queue<DataType>::delElement()
{
	if(count == 0)
	return false;
	DataType temp = elements[front];
	front = (front+1)%maxSize;
	count--;
	return temp;
}

请设计程序实现利用栈实现队列。(思路是创建两个栈)

#include <iostream>
using namespace std;
template <typename DataType>
class Stack{
private:
	int maxSize;
	int top;
	DataType* elements;
public:
	Stack(int size)
	{
		top = -1;
		maxSize = size;
		elements = new DataType[size];
	}
	~Stack()
	{
		delete[] elements;
	}
	bool push(DataType data);
	DataType pop();
	bool isEmpty();
	int eleNumber();
};
template <typename DataType>
bool push(DataType data)
{
	if(top == maxSize-1)
	return false;
	elements[++top] = data;
	return true;
}
template <typename DataType>
DataType Stack<DataType>::pop()
{
	if(top == -1)
	{
	exit(1);
	}
	return elements[top--];
}
template <typename DataType>
bool Stack<DataType>::isEmpty()
{
	if(top == -1)
	return true;
	else
	return false;
}
template <typename DataType>
int Stack<DataType>::eleNumber()
{
	return top+1;
}
template <typename DataType>
class QueueFromStack{
private:
	Stack<DataType> *s1;
	Stack<DataType> *s2;
	int maxSize;
public:
	QueueFromStack(int size)
	{
		maxSize = size;
		s1 = new Stack<DataType>(size);
		s2 = new Stack<DataType>(size);
	}
	~QueueFromStack()
	{
		s1->~Stack();
		s2->~Stack();
	}
	bool push(DataType data);
	DataType pop();
};
template <typename DataType>
bool QueueFromStack<DataType>::push(DataType data)
{
	if(s2->isEmpty()||s1->eleNumber()< maxSize-s2->eleNumber())
	return s1->push(data);
	else
	{
		cout<<"error:the queue is full.\n"<<endl;
		return false;
	}
}
template <typename DataType>
DataType QueueFromStack<DataType>::pop()
{
	if(s1->isEmpty()&&s2->isEmpty())
	{
		cout<<"error: the queue is empty.\n"<<endl;
		exit(1);
	}else if(s2->isEmpty())
	{
		while(!s1->isEmpty())
		{
			s2->push(s1->pop())
		}
		return s2->pop();
	}else
	{
		return s2->pop();
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值