栈与队列理论基础:
栈的理论基础:
栈是一种线性的数据结构,因为具有 先进后出 的特征而又被称为“先进后出表(last in first out)” 简称 LIFO 表。
STL中栈的定义:
#include <iostream>
#include <stack>
using namespace std;
int main(){
stack<int> st;
}
STL中stack的一些基本的函数调用:
/**元素访问**/
st.top(); //返回栈顶元素的值
/**元素修改**/
st.push(x)//将x元素,放入栈顶
st.pop()//将栈顶元素弹出
/**空间**/
st.size()//返回该栈的元素数量
st.empty()//判断该栈是否为空
队列的理论基础:
队列是具有先进先出的性质的表,因而被称为先进先出表(first in first out)即FIFO 表
STL中队列的定义:
#include <iostream>
#include <queue>
using namespace std;
int main(){
queue<int> q;
}
STL中queue的一些基本的函数调用:
/**元素访问**/
q.peek(); //返回队列首的元素。
q.front(); //返回队首元素的值
q.back();// 返回队尾元素的值
/**修改**/
q.push(); // 在队尾插入元素
q.pop(); //弹出队首元素
/**容量**/
q.empty(); //队列是否为空
q.size(); //返回队列中元素的数量
232. 用栈实现队列
本题是用栈实现队列,没什么算法,主要是掌握栈的一些基本操作
具体代码如下
class MyQueue {
public:
stack<int>InStack;
stack<int>OutStack;
MyQueue() {
}
void push(int x) {
InStack.push(x);
}
int pop() {
if(OutStack.empty()){
while(!InStack.empty()){
auto a=InStack.top();
OutStack.push(a);
InStack.pop();
}
}
int result=OutStack.top();
OutStack.pop();
return result;
}
int peek() {
int res=this->pop();
OutStack.push(res);
return res;
}
bool empty() {
return InStack.empty()&&OutStack.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. 用队列实现栈
本题是用队列实现栈,没什么算法,主要是掌握队列的一些基本操作
具体代码如下:
class MyStack {
public:
queue<int>que1;
MyStack() {
}
void push(int x) {
que1.push(x);
}
int pop() {
int size=que1.size();
size-=1;
while(size--){
que1.push(que1.front());
que1.pop();
}
int result=que1.front();
que1.pop();
return result;
}
int top() {
return que1.back();
}
bool empty() {
return que1.empty();
}
};
/**
* Your MyStack object will be instantiated and called as such:
* MyStack* obj = new MyStack();
* obj->push(x);
* int param_2 = obj->pop();
* int param_3 = obj->top();
* bool param_4 = obj->empty();
*/