logo

Qu'est-ce qu'une pile ?

Une pile est une structure de données linéaire qui suit le LIFO (dernier entré, premier sorti) principe. La pile a une extrémité, alors que la file d'attente a deux extrémités ( devant et derrière ). Il ne contient qu'un seul pointeur pointeur supérieur pointant vers l’élément le plus haut de la pile. Chaque fois qu'un élément est ajouté dans la pile, il est ajouté en haut de la pile et l'élément ne peut être supprimé que de la pile. Autrement dit, un la pile peut être définie comme un conteneur dans lequel l'insertion et la suppression peuvent être effectuées à partir d'une extrémité connue sous le nom de haut de la pile.

Quelques points clés liés au stack

  • On l'appelle pile car elle se comporte comme une pile du monde réel, des piles de livres, etc.
  • Une Stack est un type de données abstrait avec une capacité prédéfinie, ce qui signifie qu'elle peut stocker des éléments d'une taille limitée.
  • Il s'agit d'une structure de données qui suit un certain ordre pour insérer et supprimer les éléments, et cet ordre peut être LIFO ou FILO.

Fonctionnement de la pile

Stack fonctionne sur le modèle LIFO. Comme nous pouvons le constater dans la figure ci-dessous, il y a cinq blocs de mémoire dans la pile ; par conséquent, la taille de la pile est de 5.

tri à bulles en Java

Supposons que nous voulions stocker les éléments dans une pile et supposons que cette pile soit vide. Nous avons pris la pile de taille 5 comme indiqué ci-dessous dans laquelle nous poussons les éléments un par un jusqu'à ce que la pile soit pleine.

Présentation de la pile DS

Puisque notre pile est pleine car la taille de la pile est de 5. Dans les cas ci-dessus, nous pouvons observer qu'elle va du haut vers le bas lorsque nous entrions le nouvel élément dans la pile. La pile se remplit de bas en haut.

Lorsque nous effectuons l'opération de suppression sur la pile, il n'y a qu'un seul moyen d'entrée et de sortie car l'autre extrémité est fermée. Il suit le modèle LIFO, ce qui signifie que la valeur saisie en premier sera supprimée en dernier. Dans le cas ci-dessus, la valeur 5 est saisie en premier, elle ne sera donc supprimée qu'après la suppression de tous les autres éléments.

Opérations de pile standard

Voici quelques opérations courantes implémentées sur la pile :

    pousser():Lorsque nous insérons un élément dans une pile, l’opération est appelée push. Si la pile est pleine, la condition de débordement se produit.populaire():Lorsque nous supprimons un élément de la pile, l’opération est appelée pop. Si la pile est vide, cela signifie qu'aucun élément n'existe dans la pile, cet état est appelé état de dépassement inférieur.est vide():Il détermine si la pile est vide ou non.est rempli():Il détermine si la pile est pleine ou non.coup d'oeil() :Il renvoie l'élément à la position donnée.compter():Il renvoie le nombre total d'éléments disponibles dans une pile.changement():Il change l'élément à la position donnée.afficher():Il imprime tous les éléments disponibles dans la pile.

Fonctionnement POUSSER

Les étapes impliquées dans l’opération PUSH sont indiquées ci-dessous :

  • Avant d'insérer un élément dans une pile, on vérifie si la pile est pleine.
  • Si nous essayons d'insérer l'élément dans une pile et que la pile est pleine, alors le débordement la condition se produit.
  • Lorsque nous initialisons une pile, nous définissons la valeur de top sur -1 pour vérifier que la pile est vide.
  • Lorsque le nouvel élément est placé dans une pile, la valeur du sommet est d'abord incrémentée, c'est-à-dire : haut=haut+1, et l'élément sera placé à la nouvelle position du haut .
  • Les éléments seront insérés jusqu'à ce que nous atteignions le maximum taille de la pile.
Présentation de la pile DS

Opération POP

Les étapes impliquées dans l'opération POP sont indiquées ci-dessous :

exemples de machine Moore
  • Avant de supprimer l'élément de la pile, on vérifie si la pile est vide.
  • Si nous essayons de supprimer l'élément de la pile vide, alors le sous-verse la condition se produit.
  • Si la pile n'est pas vide, on accède d'abord à l'élément qui est pointé par le haut
  • Une fois l'opération pop effectuée, le sommet est décrémenté de 1, c'est-à-dire haut=haut-1 .
Présentation de la pile DS

Applications de la pile

Voici les applications de la pile :

    Équilibrage des symboles :La pile est utilisée pour équilibrer un symbole. Par exemple, nous avons le programme suivant :
 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';>
Gestion de la mémoire:La pile gère la mémoire. La mémoire est affectée dans les blocs mémoire contigus. La mémoire est appelée mémoire de pile car toutes les variables sont affectées dans une mémoire de pile d'appel de fonction. La taille de la mémoire attribuée au programme est connue du compilateur. Lorsque la fonction est créée, toutes ses variables sont affectées dans la mémoire de la pile. Lorsque la fonction a terminé son exécution, toutes les variables affectées dans la pile sont libérées.