一、C++队列Queue类成员函数如下:
back()返回最后一个元素
empty()如果队列空则返回真
front()返回第一个元素
pop()删除第一个元素
push()在末尾加入一个元素
size()返回队列中元素的个数
二、queue 的基本操作举例如下:
queue入队,如例:q.push(x); 将x 接到队列的末端。
queue出队,如例:q.pop(); 弹出队列的第一个元素,注意,并不会返回被弹出元素的值。
访问queue队首元素,如例:q.front(),即最早被压入队列的元素。
访问queue队尾元素,如例:q.back(),即最后被压入队列的元素。
判断queue队列空,如例:q.empty(),当队列空时,返回true。
访问队列中的元素个数,如例:q.size()
三、用两个队列实现一个栈
(1)offer2Stack.h
//========================================
//用两个队列实现一个栈
//Violet 2018-3-12
//========================================
#pragma once
#include <queue>
#include<exception>
using namespace std;
template<typename T> class CStack{
public:
CStack(void);
~CStack(void);
void appendTop(const T& element);
T deleteTop();
private:
queue<T> queue1;
queue<T> queue2;
};
template<typename T> CStack<T>::CStack(void){}
template<typename T> CStack<T>::~CStack(void){}
template<typename T> void CStack<T>::appendTop(const T& element)
{
queue1.push(element);
}
template<typename T> T CStack<T>::deleteTop()
{
if (queue2.size() <= 0)
{
while (queue1.size() > 1)
{
T& data = queue1.front();
queue1.pop();
queue2.push(data);
}
}
if (queue2.size() == 0 && queue1.size()>1)//异常判断
throw new exception("queue2 is empty");
if (queue1.size() == 1)
{
T head = queue1.front();
queue1.pop();
return head;
}
if (queue1.size() <= 0)
{
while (queue2.size() > 1)
{
T& data = queue2.front();
queue2.pop();
queue1.push(data);
}
}
if (queue1.size() == 0&& queue2.size()>1)
throw new exception("queue1 is empty");
if (queue2.size() == 1)
{
T head = queue2.front();
queue2.pop();
return head;
}
}
(2)offer2Stack.cpp
#include "offer2Stack.h"
// ====================测试代码====================
template<typename T>void Test(T actual, T expected)
{
if (actual == expected)
printf("Test passed.\n");
else
printf("Test failed.\n");
}
int main(int argc, char* argv[])
{
CStack<char> stack1;
//CStack<int> stack2;
stack1.appendTop('a');
stack1.appendTop('b');
stack1.appendTop('c');
//stack2.appendTop(1);
//stack2.appendTop(2);
char head = stack1.deleteTop();
//int head2 = stack2.deleteTop();
Test(head, 'c');
//Test(head2, 1);
head = stack1.deleteTop();
Test(head, 'b');
stack1.appendTop('d');
head = stack1.deleteTop();
Test(head, 'd');
stack1.appendTop('e');
head = stack1.deleteTop();
Test(head, 'e');
head = stack1.deleteTop();
Test(head, 'a');
return 0;
}