每日一题:编程题思路解析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;
}

#每日一题#
全部评论

相关推荐

威猛的小饼干正在背八股:挂到根本不想整理
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务