stack和queue

1.stsck 的介绍和使用
一种容器适配器,专门用在有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作
2.stack的使用

stack() 构造空的栈
empty() 检测stack是否为空
size() 返回stack重元素的个数
top() 返回栈顶元素的引用
push() 将val压入stack中
pop() 将stack中尾部的元素弹出

用两个栈实现队列

template<typename T> class CQueue
{
public:
	CQueue(void);
	~CQueue(void);
 
	void appendTail(const T& node);
	T deleteHead();
 
private:
	stack<T> stack1;
	stack<T> stack2;
};
 
template<typename T> 
void CQueue<T>::appendTail(const& T& element)//尾插
{
	stack1.push(element);
}
 
template<typename T> 
T CQueue<T>::deleteHead()
{
	if (stack2.size() <= 0)
	{
		while (stack1.size > 0)
		{
			T& data = stack1.top();
			stack1.pop();
			stack2.push(data);
		}
	}
	
	T head = stack2.top();
	stack2.pop();
 
	if (stack2.size() == 0)//当stack2为空时,抛异常
		throw new exception("queue is empty");
 
	return head;
}

2.1queue的介绍使用
队列是一种容器适配器,专门用于在FIFO上下文(先进先出)中操作,其中从容器一端插入元素,另一端
提取元素。
2. 队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的
成员函数来访问其元素。元素从队尾入队列,从队头出队列。

queue的使用
queue() 构造空的队列
empty() 检测队列是否为空,是返回true,否则返回false
size() 返回队列中有效元素的个数
front() 返回对头元素的引用
back() 返回队尾元素的引用
push() 在队尾将元素val入队列
pop() 将队头元素出队列

用对列实现栈

template<typename T>class CStack
{
public:
	CStack(void);
	~CStack(void);

	void appendTail(const T& node);
	T delete();

private:
	queue<T> q1;
	queue<T> q2;

};
template<typename T>
void CStack<T>::appendTail(const T& node) //实现栈元素的插入
{
	//数据的插入原则:保持一个队列为空,一个队列不为空,往不为空的队列中插入元素
	if (!q1.empty())
	{
		q1.push(node);
	}
	else
	{
		q2.push(node);
	}
}

template <typename T>
T CStack<T>::deleteHead()  //实现栈元素的删除
{
	int ret = 0;
	if (!q1.empty())
	{
		int num = q1.size();
		while (num > 1)
		{
			q2.push(q1.front());
			q1.pop();
			--num;
		}
		ret = q1.front;
		q1.pop();
	}
	else
	{
		int num = q2.size();
		while (num > 1)
		{
			q1.push(q2.front());
			q2.pop();
			--num;
		}
		ret = q2.front();
		q2.pop();
	}
	return ret;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值