用队列实现栈

queue:是队列容器。

push:向模拟栈中添加元素。

front:

1. 在 queue 容器中的用法 
 queue 是一种先进先出(FIFO)的数据结构, front 函数用来访问队头元素。

int main() {
    queue<int> q;
    q.push(10);
    q.push(20);
    int frontElement = q.front();  // 获取队头元素,此时frontElement的值为10
    cout << "Queue front element: " << frontElement << endl;
    return 0;
}

在这段代码中,先创建了一个 queue 对象 q ,并向其中压入两个元素。然后通过 q.front() 获取队头元素,注意 front 函数只是获取元素,不会改变队列结构,若要移除队头元素需调用 pop 函数。
2. 在 deque 容器中的用法
 deque (双端队列 )允许在两端进行插入和删除操作, front 函数用于获取其头部元素。

int main() {
    deque<int> dq = {1, 2, 3};
    int first = dq.front();  // 获取双端队列头部元素,此时first的值为1
    cout << "Deque front element: " << first << endl;
    return 0;
}

这里创建了一个包含元素 {1, 2, 3} 的 deque 容器 dq ,通过 dq.front() 获取其头部元素。
3. 在 list 容器中的用法
 list 是双向链表容器, front 函数用于获取链表头部元素。

int main() {
    list<int> lst = {4, 5, 6};
    int head = lst.front();  // 获取链表头部元素,此时head的值为4
    cout << "List front element: " << head << endl;
    return 0;
}

代码中创建了 list 容器 lst ,并通过 lst.front() 获取其头部元素。

back:

1. 在 vector 容器中的用法
 vector 是一种动态数组, back 函数用来访问其末尾元素。

int main() {
    vector<int> v = {1, 2, 3};
    int lastElement = v.back();  // 获取vector末尾元素,此时lastElement的值为3
    cout << "Vector back element: " << lastElement << endl;
    return 0;
}

 此代码先创建了包含元素 {1, 2, 3} 的 vector 对象 v ,然后通过 v.back() 获取末尾元素, back 函数不会改变 vector 结构,若要删除末尾元素可调用 pop_back 函数。
2. 在 deque 容器中的用法
 deque (双端队列 )支持在两端进行操作, back 函数用于获取其尾部元素。

int main() {
    deque<int> dq = {4, 5, 6};
    int endElement = dq.back();  // 获取双端队列尾部元素,此时endElement的值为6
    cout << "Deque back element: " << endElement << endl;

    return 0;
}

这里创建了 deque 容器 dq ,并通过 dq.back() 获取其尾部元素。
3. 在 list 容器中的用法
 list 是双向链表, back 函数用于获取链表尾部元素。

int main() {
    list<int> lst = {7, 8, 9};
    int tail = lst.back();  // 获取链表尾部元素,此时tail的值为9
    cout << "List back element: " << tail << endl;
    return 0;
}

代码创建了 list 容器 lst ,并使用 lst.back() 获取其尾部元素。

225. 用队列实现栈

请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(pushtoppop 和 empty)。

实 现 MyStack 类:

  • void push(int x) 将元素 x 压入栈顶。
  • int pop() 移除并返回栈顶元素。
  • int top() 返回栈顶元素。
  • boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。

注意:

  • 你只能使用队列的标准操作 —— 也就是 push to backpeek/pop from frontsize 和 is empty 这些操作。
  • 你所使用的语言也许不支持队列。 你可以使用 list (列表)或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。

示例:

输入:
["MyStack", "push", "push", "top", "pop", "empty"]
[[], [1], [2], [], [], []]
输出:
[null, null, null, 2, 2, false]

解释:
MyStack myStack = new MyStack();
myStack.push(1);
myStack.push(2);
myStack.top(); // 返回 2
myStack.pop(); // 返回 2
myStack.empty(); // 返回 False 

方法一:用两个队列

class MyStack {
public:
    queue<int>que1;
    queue<int>que2;
    MyStack() {
        
    }
    
    void push(int x) {
        que1.push(x);
    }
    
    int pop() {
        int size=que1.size();
        size--;
        while(size--){
            que2.push(que1.front());
            que1.pop();
        }
        int result=que1.front();
        que1=que2;
        while(!que2.empty()){
            que2.pop();
        }
        return result;

    }
    
    int top() {
        return que1.back();
    }
    
    bool empty() {
        return que1.empty();
    }
};

方法二:用一个队列  

class MyStack {
public:
    queue<int>que;
    MyStack() {
        
    }
    
    void push(int x) {
        que.push(x);
    }
    
    int pop() {
        int size=que.size();
        size--;
        while(size--){
            que.push(que.front());
            que.pop();
        }
        int result=que.front();
        que.pop();
        return result;

    }
    
    int top() {
        return que.back();
    }
    
    bool empty() {
        return que.empty();
    }
};

 主要思路:先将元素加入栈顶。在获取队列元素个数。通过循环队列将头部出最后一个元素外依次取出添加到队尾。获取栈顶元素。返回元素。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值