每日一题:编程题思路解析AB1
描述
请你实现一个栈。
操作:
push x:将 加x\x 入栈,保证 x\x 为 int 型整数。
pop:输出栈顶,并让栈顶出栈
top:输出栈顶,栈顶不出栈
输入描述:
第一行为一个正整数 n,代表操作次数。(1≤n≤100000)
接下来的 n,每行为一个字符串,代表一个操作。保证操作是题目描述中三种中的一种。
输出描述:
如果操作为push,则不输出任何东西。
如果为另外两种,若栈为空,则输出 "error“
否则按对应操作输出。
eg1.
输入:
6
push 1
pop
top
push 2
push 3
pop
eg2.
输出:
1
error
3
疑问:不要直接
#include<stack>
,是什么意思?
#include <iostream>
#include <string>
using namespace std;
class类的简单结构;
class name{
//访问限定符,作用域从当前位置开始到下一个访问限定符或者类的结束。
public: //共有,可被外界访问,可以做为外界访问类内private的中介,安全性差,
private: //私有,不可直接被外界访问,安全性高
protected: //保护,与私有成员相似,但可被派生类(子类)访问。
};
类·的延申:class的成员默认访问方式是private、而Struct的成员默认访问方式是public。
class stack {
private:
int s[100000]; //操作次数
int top_index = -1; //初始栈顶为-1,即为空栈
public:
void push(int x) {
top_index += 1; //栈顶后移从0开始,为后面元素进展留出储存空间
s[top_index] = x; //将输入的x值放入留出的储存空间内
} //进栈操作
void pop() {
if (top_index >= 0) { //>=0的条件即表示此栈不为空
cout << s[top_index] << endl; //输出栈内栈顶元素值,知道栈内无元素
top_index -= 1; //栈顶指针减1
} else
cout << "error" << endl;
} //出栈操作 注意:出栈操作只是删除栈顶的元素,并不返回该元素。
void top() {
if (top_index >= 0)
cout << s[top_index] << endl; //有栈顶元素则输出
else
cout << "error" << endl; //无栈顶元素时输出
} //取栈顶元素
};
int main() {
stack的作用
stack是一个比较简单易用的数据结构,其最大的特性就是先进后出。就好比一个桶,先放进出的数据就在底部,如果想要取出就先要把上面的数据取出,现在不懂没关系,看完本文就可以理解了。
stack适用于许多算法,比较常用的是单调栈算法,也可以用来计算算术表达式
stack s; //定义stack型变量s
int n; //操作次数
cin >> n; //输入操作次数n
for (int i = 0; i < n; i++) { //条件保证不会栈满·溢出
string op;
cin >> op; //输入string型变量op
if (op == "push") {
int x;
cin >> x; //输入栈元素 int型
s.push(x); //x进栈
}
if (op == "pop") s.pop(); //出栈
if (op == "top") s.top(); //取栈顶
}
return 0; //栈为空则”error“
}
对此代码的疑问:string op;stack s;是用来干嘛的?
#include <iostream> #include <string> using namespace std; class stack { private: int s[100000]; int top_index = -1; public: void push(int x) { top_index += 1; s[top_index] = x; } void pop() { if (top_index >= 0) { cout << s[top_index] << endl; top_index -= 1; } else cout << "error" << endl; } void top() { if (top_index >= 0) cout << s[top_index] << endl; else cout << "error" << endl; } }; int main() { stack s; int n; cin >> n; for (int i = 0; i < n; i++) { string op; cin >> op; if (op == "push") { int x; cin >> x; s.push(x); } if (op == "pop") s.pop(); if (op == "top") s.top(); } return 0; }#每日一题#