[Estrutura de dados C++]: Use pilha para criar fila e use fila para implementar pilha
1. Conhecimento básico de pilhas e filas
3. Regras de passagem dos dois
2. Crie uma fila usando uma pilha
3. Crie uma pilha usando uma equipe
Você Terminou! Não é fácil escrever. Se você conseguir, siga ou curta. Obrigado~~
1. Conhecimento básico de pilhas e filas
A diferença entre pilha desenhada à mão e fila:
1. Pilha:
2. Fila:
3. Regras de passagem dos dois
Pilha: Somente os elementos superiores podem ser acessados, não sendo permitido percorrer um por um.
Fila: Somente o início e o fim da fila podem ser acessados e usados, e a passagem um por um não é permitida.
4. Interfaces STL comuns
栈:
stack<数据类型> name; //构造
push(值); //栈底添加
pop(); //出栈
top(); //返回栈顶元素
empty(); //判断栈是否为空
size(); //返回栈的大小
队列:
queue<类型> name; //构造
push(值) //队尾插入
pop() //从队头移除一个元素
back() //返回最后队尾第一个值
front() //返回第一个值
empty() //判断队列是否为空
size() //返回队列大小
2. Crie uma fila usando uma pilha
Recomenda-se estudar com base na questão 232 do Likou: 232. Usar pilha para implementar fila
Simule o processo de entrada e saída da fila:
class MyQueue {
public:
stack<int> queue_push; //定义入栈相当于入队的操作
stack<int> queue_back; //定义出栈相当于出队的操作
MyQueue()
{
}
void push(int x)
{
queue_push.push(x);
}
int pop()
{
if(queue_back.empty()) //如果为空则说明出队没有
{
while(!queue_push.empty()) //把入队中的所有数全部放入出队中
{
queue_back.push(queue_push.top()); //这个地方不能直接将pop()赋值传入,会报错
queue_push.pop();
}
}
int mid_num = queue_back.top();
queue_back.pop();
return mid_num;
}
int peek()
{
int pop_num = this->pop(); //复用pop()中返回队头的第一个元素
queue_back.push(pop_num); //因为该功能只是返回但是不移除,因此还要放进去
return pop_num;
}
bool empty()
{
return (queue_back.empty() && queue_push.empty());
}
};
Nota: Na função peek, ela não é redefinida, mas a função pop anterior é usada.Primeiro, se for reescrito, um erro será relatado ao enviar. Em segundo lugar, isso pode melhorar a reutilização do código.
3. Crie uma pilha usando uma equipe
Recomenda-se estudar com base na questão 225 do Likou: 225. Usar fila para implementar pilha
Simule o processo de empurrar e colocar na pilha: isso pode ser feito usando uma fila
class MyStack {
public:
queue<int> queue_stack;
MyStack()
{
}
void push(int x)
{
queue_stack.push(x);
}
int pop()
{
int peak = queue_stack.back();
while(queue_stack.front() != peak)
{
queue_stack.push(queue_stack.front());
queue_stack.pop();
}
int front_num = queue_stack.front();
queue_stack.pop();
return front_num;
}
int top()
{
return queue_stack.back();
}
bool empty()
{
return queue_stack.empty();
}
};
Eu mesmo escrevi, então é um pouco complicado, mas pelo menos está feito hehe. Se você tiver alguma otimização, discuta na área de comentários! !