leecode栈和队列相关题目c++

简单:

232 用栈实现队列

https://leetcode.cn/problems/implement-queue-using-stacks/submissions/
在这里插入图片描述
在这里插入图片描述

解答:
思路:用两个栈来实现,倒一下即刻。

class MyQueue {
   
public:
    stack<int> in;
    stack<int> out;
    MyQueue() {
   

    }
    
    void push(int x) {
   
        in.push(x);
    }
    
    int pop() {
   
        if(out.empty()){
   
            while(!in.empty()){
   
                out.push(in.top());
                in.pop();
            }
        }
        int reslut = out.top();
        out.pop();
        return reslut;
    }
    
    int peek() {
   
        int reslut = this->pop();
        out.push(reslut);  //因为pop函数弹出了元素res,所以再添加回去
        return reslut;

    }
    
    bool empty() {
   
        return in.empty() && out.empty();

    }
};

/**
 * Your MyQueue object will be instantiated and called as such:
 * MyQueue* obj = new MyQueue();
 * obj->push(x);
 * int param_2 = obj->pop();
 * int param_3 = obj->peek();
 * bool param_4 = obj->empty();
 */

225. 用队列实现栈

在这里插入图片描述
在这里插入图片描述
解答:
思路:
两个队列来实现栈。其中一个队列是用来暂存数据的。也就是先将队列1中的元素都放到队列2中,只留下最后一个元素作为输出,然后在讲队列2中的元素放回队列1后,将队列2清空;反复此操作。

class MyStack {
   
public:
    queue<int> q1;
    queue<int> q2;
    MyStack() {
   

    }
    
    void push(int x) {
   
        q1.push(x);
    }
    
    int pop() {
   
        int size=q1.size();
        while(size!=1){
   
            q2.push(q1.front());
            q1.pop();
            size--;
        }
        int result=q1.front();
        q1.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是C++栈和队列的基本操作: 栈的基本操作: 1.创建栈:stack<int> s; 2.入栈:s.push(元素); 3.出栈:s.pop(); 4.取栈顶元素:s.top(); 5.判断栈是否为空:s.empty(); 6.获取栈的大小:s.size(); 队列的基本操作: 1.创建队列:queue<int> q; 2.入队:q.push(元素); 3.出队:q.pop(); 4.取队头元素:q.front(); 5.取队尾元素:q.back(); 6.判断队列是否为空:q.empty(); 7.获取队列的大小:q.size(); 以下是一个使用栈求进制转换的例子: ```c++ #include <iostream> #include <stack> using namespace std; int main() { stack<int> s; int num, base; cout << "请输入一个十进制数:"; cin >> num; cout << "请输入要转换的进制:"; cin >> base; while (num) { s.push(num % base); num /= base; } cout << "转换后的结果为:"; while (!s.empty()) { cout << s.top(); s.pop(); } cout << endl; return 0; } ``` 以下是一个使用队列打印杨辉三角形的例子: ```c++ #include <iostream> #include <queue> using namespace std; int main() { int n; cout << "请输入要打印的行数:"; cin >> n; queue<int> q; q.push(1); for (int i = 1; i <= n; i++) { int pre = 0; for (int j = 0; j < i; j++) { int cur = q.front(); q.pop(); cout << cur - pre << " "; pre = cur; q.push(cur + pre); } q.push(1); cout << endl; } return 0; } ``` 以下是一个使用栈计算后缀表达式的例子: ```c++ #include <iostream> #include <stack> #include <string> using namespace std; int main() { string s; cout << "请输入后缀表达式:"; getline(cin, s); stack<int> nums; for (int i = 0; i < s.size(); i++) { if (s[i] == ' ') continue; if (isdigit(s[i])) { int num = 0; while (i < s.size() && isdigit(s[i])) { num = num * 10 + s[i] - '0'; i++; } nums.push(num); i--; } else { int b = nums.top(); nums.pop(); int a = nums.top(); nums.pop(); switch (s[i]) { case '+': nums.push(a + b); break; case '-': nums.push(a - b); break; case '*': nums.push(a * b); break; case '/': nums.push(a / b); break; } } } cout << "计算结果为:" << nums.top() << endl; return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值