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() 获取其尾部元素。
请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push
、top
、pop
和 empty
)。
实 现 MyStack
类:
void push(int x)
将元素 x 压入栈顶。int pop()
移除并返回栈顶元素。int top()
返回栈顶元素。boolean empty()
如果栈是空的,返回true
;否则,返回false
。
注意:
- 你只能使用队列的标准操作 —— 也就是
push to back
、peek/pop from front
、size
和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();
}
};
主要思路:先将元素加入栈顶。在获取队列元素个数。通过循环队列将头部出最后一个元素外依次取出添加到队尾。获取栈顶元素。返回元素。