[Estrutura de dados C++]: Use filas para implementar pilhas e use pilhas para criar filas

 [Estrutura de dados C++]: Use pilha para criar fila e use fila para implementar pilha

1. Conhecimento básico de pilhas e filas

1. Pilha:

2. Fila: 

3. Regras de passagem dos dois

4. Interfaces STL comuns

 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! !

Você Terminou! Não é fácil escrever. Se você conseguir, siga ou curta. Obrigado~~


Acho que você gosta

Origin blog.csdn.net/Callme_TeacherPi/article/details/127489901
Recomendado
Clasificación