题目:用两个栈实现一个队列.
队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead,分别完成队列尾部插入结点 和 队列头部删除结点
AppendTail:直接将元素入栈stack1
DeleteHead:当stack2中不为空时,在stack2中的栈顶元素是最先进入队列的元素,可以弹出
如果stack2为空,我们把stack1中的元素逐个弹出并入栈stack2,由于先进入队列的元素被压到stack1的底端,经过弹栈和压入stack2之后就处于stack2的顶端
1 #include <stack>
2 #include <stdexcept>
3
4 template <typename T>
5 class MyQueue {
6 public:
7 MyQueue();
8 ~MyQueue();
9
10 void AppendTail(const T& node);
11 T DeleteHead();
12
13 private:
14 std::stack<T> stack1;
15 std::stack<T> stack2;
16 };
17
18 template<typename T>
19 void MyQueue<T>::AppendTail(const T& node)
20 {
21 stack1.push(node);
22 }
23
24 template<typename T>
25 T MyQueue<T>::DeleteHead()
26 {
27 if (stack2.size() <= 0) {
28 while (stack1.size() > 0) {
29 T& data = stack1.top();
30 stack1.pop();
31 stack2.push(data);
32 }
33 }
34 if (stack2.empty) {
35 throw runtime_error("queue is empty");
36 }
37
38 T head = stack2.top();
39 stack2.pop();
40 return head;
41 }
题目:用两个队列实现一个栈.
栈的声明如下,请实现它的两个函数 Push 和 Pop,分别完成入栈 和 出栈 功能
入栈:仅将元素push到 非空队列
出栈:将非空队列的元素逐个出队列,并且将 除了最后一个元素的其余所有元素 push到 另外的空队列
1 #include <stack>
2 #include <stdexcept>
3
4 template <typename T>
5 class MyStack {
6 public:
7 MyStack();
8 ~MyStack();
9
10 void Push(const T& data);
11 void Pop();
12 private:
13 std::queue<T> queue1;
14 std::queue<T> queue2;
15 };
16
17 template <typename T>
18 void MyStack<T>::Push(const T& data)
19 {
20 if (queue1.empty() && queue2.empty()) queue1.push(data);
21 if (queue1.empty() && !queue2.empty()) queue2.push(data);
22 if (!queue1.empty() && queue2.empty()) queue1.push(data);
23 if (!queue1.empty() && !queue2.empty()) throw runtime_error("tow queues cannot non-empty at same time");
24 }
25 template <typename T>
26 void MyStack<T>::Pop()
27 {
28 if (queue1.empty() && queue2.empty()) {
29 throw runtime_error("two queues are empty");
30 }
31
32 if (!queue1.empty() && !queue2.empty()) {
33 throw runtime_error("two queues cannot non-empty at same time");
34 }
35
36 if (!queue1.empty() && queue2.empty()) {
37 int nNodes = queue1.size();
38 int i = 0;
39 while (!queue1.empty()) {
40 T& node = queue1.front();
41 queue1.pop();
42 if (i < nNodes - 1) {
43 queue2.push(node);
44 ++i;
45 }
46 }
47 }
48
49 if (queue1.empty() && !queue2.empty()) {
50 int nNodes = queue2.size();
51 int i = 0;
52 while (!queue2.empty()) {
53 T& node = queue2.front();
54 queue2.pop();
55 if (i < nNodes - 1) {
56 queue1.push(node);
57 ++i;
58 }
59 }
60 }
61 }
时间: 2024-10-11 07:53:06