数据结构与算法题目集7-22——堆栈模拟队列

版权声明:我的GitHub:https://github.com/617076674。真诚求星! https://blog.csdn.net/qq_41231926/article/details/84798671

我的数据结构与算法题目集代码仓:https://github.com/617076674/Data-structure-and-algorithm-topic-set

原题链接:https://pintia.cn/problem-sets/15/problems/837

题目描述:

知识点:栈、队列

思路:双栈实现队列

设置两个栈stack1和stack2,其容量分别是N1和N2,且满足N1 <= N2。

入栈操作如下:

(1)如果stack1未满,则将新元素压入stack1中。

(2)如果stack1满了且stack2为空,将stack1中的元素倒压入stack2中,由于N1 <= N2,我们不必担心stack2容量不够的问题。将新元素压入stack1中。

(3)如果stack1满了且stack2不为空,说明此时已满,无法压入新元素,输出"ERROR:Full"。

出栈操作如下:

(1)如果stack2不为空,弹出stack2的栈顶元素。

(2)如果stack2为空且stack1不为空,则将stack1中的元素倒压入stack2中,再弹出stack2的栈顶元素。

(3)如果stack2为空且stack1也为空,说明此时无任何元素,输出"ERROR:Empty"。

时间复杂度和输入的数据规模及操作有关。空间复杂度是O(N1 + N2)。

C++代码:

#include<iostream>
#include<string>
#include<stack>

using namespace std;

int main() {
	int N1, N2;
	cin >> N1 >> N2;
	if(N1 > N2) {	//确保N1 <= N2
		int temp = N1;
		N1 = N2;
		N2 = temp;
	}
	string str1, str2;
	stack<string> stack1, stack2;	//stack1的容量为N1,stack2的容量为N2
	while(true) {
		cin >> str1;
		if(str1[0] == 'T') {
			break;
		} else if(str1[0] == 'A') {
			cin >> str2;
			if(stack1.size() < N1) {
				stack1.push(str2);
			} else if(stack1.size() == N1 && stack2.empty()) {
				while(!stack1.empty()) {
					stack2.push(stack1.top());
					stack1.pop();
				}
				stack1.push(str2);
			} else if(stack1.size() == N1 && !stack2.empty()) {
				cout << "ERROR:Full" << endl;
			}
		} else if(str1[0] == 'D') {
			if(!stack2.empty()) {
				cout << stack2.top() << endl;
				stack2.pop();
			} else {
				if(stack1.empty()) {
					cout << "ERROR:Empty" << endl;
				} else {
					while(!stack1.empty()) {
						stack2.push(stack1.top());
						stack1.pop();
					}
					cout << stack2.top() << endl;
					stack2.pop();
				}
			}
		}
	}
	return 0;
}

C++解题报告:

猜你喜欢

转载自blog.csdn.net/qq_41231926/article/details/84798671
今日推荐