logo

O que é uma pilha?

Uma pilha é uma estrutura de dados linear que segue o LIFO (último a entrar, primeiro a sair) princípio. A pilha tem uma extremidade, enquanto a fila tem duas extremidades ( dianteiro e traseiro ). Ele contém apenas um ponteiro ponteiro superior apontando para o elemento mais alto da pilha. Sempre que um elemento é adicionado à pilha, ele é adicionado ao topo da pilha e o elemento só pode ser excluído da pilha. Em outras palavras, um pilha pode ser definida como um contêiner no qual a inserção e exclusão podem ser feitas a partir de uma extremidade conhecida como topo da pilha.

Alguns pontos-chave relacionados à pilha

  • É chamado de pilha porque se comporta como uma pilha do mundo real, pilhas de livros, etc.
  • Uma pilha é um tipo de dados abstrato com capacidade predefinida, o que significa que pode armazenar elementos de tamanho limitado.
  • É uma estrutura de dados que segue alguma ordem de inserção e exclusão dos elementos, e essa ordem pode ser LIFO ou FILO.

Trabalho de pilha

Stack funciona no padrão LIFO. Como podemos observar na figura abaixo existem cinco blocos de memória na pilha; portanto, o tamanho da pilha é 5.

modelos de aprendizado de máquina

Suponha que queiramos armazenar os elementos em uma pilha e vamos supor que a pilha esteja vazia. Pegamos a pilha de tamanho 5 conforme mostrado abaixo, na qual empurramos os elementos um por um até que a pilha fique cheia.

Introdução à pilha DS

Como nossa pilha está cheia porque o tamanho da pilha é 5. Nos casos acima, podemos observar que ela vai de cima para baixo quando inserimos o novo elemento na pilha. A pilha é preenchida de baixo para cima.

Quando realizamos a operação de exclusão na pilha, existe apenas uma forma de entrada e saída, pois a outra extremidade é fechada. Segue o padrão LIFO, o que significa que o valor inserido primeiro será removido por último. No caso acima, o valor 5 é inserido primeiro, portanto será removido somente após a exclusão de todos os demais elementos.

Operações de pilha padrão

A seguir estão algumas operações comuns implementadas na pilha:

    empurrar():Quando inserimos um elemento em uma pilha, a operação é conhecida como push. Se a pilha estiver cheia, ocorre a condição de overflow.pop():Quando excluímos um elemento da pilha, a operação é conhecida como pop. Se a pilha estiver vazia significa que não existe nenhum elemento na pilha, esse estado é conhecido como estado de underflow.está vazia():Determina se a pilha está vazia ou não.está cheio():Determina se a pilha está cheia ou não.'olhadinha():Ele retorna o elemento na posição fornecida.contar():Retorna o número total de elementos disponíveis em uma pilha.mudar():Ele muda o elemento na posição determinada.mostrar():Imprime todos os elementos disponíveis na pilha.

Operação PUSH

As etapas envolvidas na operação PUSH são fornecidas abaixo:

número do palíndromo
  • Antes de inserir um elemento em uma pilha, verificamos se a pilha está cheia.
  • Se tentarmos inserir o elemento em uma pilha e a pilha estiver cheia, então o transbordar condição ocorre.
  • Quando inicializamos uma pilha, definimos o valor de top como -1 para verificar se a pilha está vazia.
  • Quando o novo elemento é colocado em uma pilha, primeiro, o valor do topo é incrementado, ou seja, topo = topo + 1, e o elemento será colocado na nova posição do principal .
  • Os elementos serão inseridos até chegarmos ao máx. tamanho da pilha.
Introdução à pilha DS

Operação POP

As etapas envolvidas na operação POP são fornecidas a seguir:

  • Antes de excluir o elemento da pilha, verificamos se a pilha está vazia.
  • Se tentarmos excluir o elemento da pilha vazia, então o estouro negativo condição ocorre.
  • Se a pilha não estiver vazia, primeiro acessamos o elemento apontado pelo principal
  • Uma vez executada a operação pop, o topo é decrementado em 1, ou seja, topo = topo-1 .
Introdução à pilha DS

Aplicações de pilha

A seguir estão as aplicações da pilha:

    Balanceamento de símbolos:Stack é usado para equilibrar um símbolo. Por exemplo, temos o seguinte programa:
 int main() { cout&lt;<'hello'; cout<<'javatpoint'; } < pre> <p>As we know, each program has <em>an opening</em> and <em>closing</em> braces; when the opening braces come, we push the braces in a stack, and when the closing braces appear, we pop the opening braces from the stack. Therefore, the net value comes out to be zero. If any symbol is left in the stack, it means that some syntax occurs in a program.</p> <ul> <tr><td>String reversal:</td> Stack is also used for reversing a string. For example, we want to reverse a &apos; <strong>javaTpoint</strong> &apos; string, so we can achieve this with the help of a stack. <br> First, we push all the characters of the string in a stack until we reach the null character. <br> After pushing all the characters, we start taking out the character one by one until we reach the bottom of the stack. </tr><tr><td>UNDO/REDO:</td> It can also be used for performing UNDO/REDO operations. For example, we have an editor in which we write &apos;a&apos;, then &apos;b&apos;, and then &apos;c&apos;; therefore, the text written in an editor is abc. So, there are three states, a, ab, and abc, which are stored in a stack. There would be two stacks in which one stack shows UNDO state, and the other shows REDO state. <br> If we want to perform UNDO operation, and want to achieve &apos;ab&apos; state, then we implement pop operation. </tr><tr><td>Recursion:</td> The recursion means that the function is calling itself again. To maintain the previous states, the compiler creates a system stack in which all the previous records of the function are maintained. </tr><tr><td>DFS(Depth First Search):</td> This search is implemented on a Graph, and Graph uses the stack data structure. </tr><tr><td>Backtracking:</td> Suppose we have to create a path to solve a maze problem. If we are moving in a particular path, and we realize that we come on the wrong way. In order to come at the beginning of the path to create a new path, we have to use the stack data structure. </tr><tr><td>Expression conversion:</td> Stack can also be used for expression conversion. This is one of the most important applications of stack. The list of the expression conversion is given below: <pre>Infix to prefix Infix to postfix Prefix to infix Prefix to postfix Postfix to infix</pre> </tr><tr><td>Memory management:</td> The stack manages the memory. The memory is assigned in the contiguous memory blocks. The memory is known as stack memory as all the variables are assigned in a function call stack memory. The memory size assigned to the program is known to the compiler. When the function is created, all its variables are assigned in the stack memory. When the function completed its execution, all the variables assigned in the stack are released. </tr></ul> <hr></'hello';>
Gerenciamento de memória:A pilha gerencia a memória. A memória é atribuída nos blocos de memória contíguos. A memória é conhecida como memória de pilha, pois todas as variáveis ​​são atribuídas em uma memória de pilha de chamadas de função. O tamanho da memória atribuído ao programa é conhecido pelo compilador. Quando a função é criada, todas as suas variáveis ​​são atribuídas na memória da pilha. Quando a função completa sua execução, todas as variáveis ​​atribuídas na pilha são liberadas.