quelle est la différence fondamentale entre pile et file d'attente?


130

Quelle est la différence fondamentale entre pile et file d'attente?

S'il vous plaît, aidez-moi, je ne parviens pas à trouver la différence.

Comment différenciez-vous une pile et une file d'attente?

J'ai cherché la réponse dans divers liens et j'ai trouvé cette réponse.

Dans la programmation de haut niveau,

une pile est définie comme une liste ou une séquence d'éléments qui est allongée en plaçant de nouveaux éléments "au-dessus" d'éléments existants et raccourcie en supprimant des éléments du haut des éléments existants. Il s'agit d'un ADT [Abstract Data Type] avec des opérations mathématiques de "push" et "pop".

Une file d'attente est une séquence d'éléments qui est ajoutée en plaçant le nouvel élément à l'arrière de l'existant et raccourcie en supprimant des éléments devant la file d'attente. C'est un ADT [Abstract Data Type]. Il y a plus à ces termes compris dans la programmation de Java, C ++, Python et ainsi de suite.

Puis-je avoir une réponse plus détaillée? Aidez-moi, s'il vous plaît.


12
Vous semblez avoir répondu à votre propre question - une pile est un conteneur Last-In First-Out (LIFO), et une file d'attente est un conteneur First-In First-Out (FIFO).
Iridium du

Réponses:


151

Stack est une structure de données LIFO (dernier entré, premier sorti). Le lien associé vers wikipedia contient une description détaillée et des exemples.

La file d'attente est une structure de données FIFO (premier entré, premier sorti). Le lien associé vers wikipedia contient une description détaillée et des exemples.


131

Imaginez une pile de papier . La dernière pièce mise dans la pile est sur le dessus, c'est donc la première à sortir. C'est LIFO . Ajouter un morceau de papier s'appelle «pousser», et retirer un morceau de papier s'appelle «éclater».

Imaginez une file d'attente au magasin . La première personne en ligne est la première personne à sortir de la ligne. C'est FIFO . Une personne qui fait la queue est «mise en file d'attente» et une personne qui sort de la file est «retirée de la file d'attente».


3
Une des meilleures analogies auxquelles je puisse penser.
Yeikel

83

Un modèle visuel

Pile de crêpes (LIFO)

La seule façon d'en ajouter un et / ou d'en supprimer un est d'en haut.

pile de crêpes

File d'attente de ligne (FIFO)

Quand on arrive, ils arrivent au bout de la file et quand on part, ils partent du devant de la file.

ligne DMV

Fait amusant: les Britanniques désignent les lignes de personnes comme une file d'attente


6
Jee, ça doit être la réponse imo. Merci @Jacksonkr
Kulasangar

Haha bien sûr que c'est une description parfaite de la file d'attente et de la pile, mais juste pour des arguments, que faire si je veux que la première crêpe soit ajoutée à l'assiette? Je sais que cela peut être complété avec un stack.size () vs if (! Stack.isEmpty ()), mais toujours cette première crêpe pourrait être la meilleure :) ... Quoi qu'il en soit, bonne réponse et je suis d'accord que c'est le plus clair ... semble intéressant que les Britanniques se réfèrent aux lignes comme des files d'attente (si cela est exact), dans un langage non-programmation, je considérerais toujours qu'une ligne où la première entrée doit sortir en premier (après avoir quitté la ligne / file d'attente )
ViaTech

Attendez, on ne les appelle pas des files d'attente ailleurs?
balade

37

Vous pouvez considérer les deux comme une liste ordonnée de choses (triées par l'heure à laquelle elles ont été ajoutées à la liste). La principale différence entre les deux réside dans la manière dont les nouveaux éléments entrent dans la liste et les anciens éléments quittent la liste.

Pour une pile, si j'ai une liste a, b, c, et j'ajoute d, elle est clouée à la fin, alors je me retrouve avec a,b,c,d. Si je veux faire apparaître un élément de la liste, je supprime le dernier élément que j'ai ajouté, qui est d. Après un pop, ma liste est à a,b,cnouveau

Pour une file d'attente, j'ajoute de nouveaux éléments de la même manière. a,b,cdevient a,b,c,daprès l'ajout d. Mais, maintenant, quand je pop, je dois prendre un élément du début de la liste, donc ça devient b,c,d.

C'est très simple!


14

Queue

La file d'attente est une collection ordonnée d'éléments.

Les éléments sont supprimés à une extrémité appelée «frontal» de la file d'attente.

Les éléments sont insérés à une autre extrémité appelée «arrière» de la file d'attente.

Le premier élément inséré est le premier à être supprimé (FIFO).

Empiler

Stack est une collection d'articles.

Il permet d'accéder à un seul élément de données: le dernier élément inséré.

Les éléments sont insérés et supprimés à une extrémité appelée «Haut de la pile».

C'est un objet dynamique et en constante évolution.

Tous les éléments de données sont placés sur le dessus de la pile et retirés du dessus

Cette structure d'accès est connue sous le nom de structure Last in First Out (LIFO)


Donc, fondamentalement, une «file d'attente» est une «FIFO» - file d'attente premier entré, premier sorti. Alors qu'une «pile» est un «LIFO» - file d'attente du dernier entré, premier sorti. Ai-je raison?
Sebastian Nielsen

@SebastianNielsen Oui, c'est correct comme mention dans la réponse.
Dissanayake

Mais quelle est alors la différence entre une liste chaînée et une pile? N'est-ce pas pareil?
Sebastian Nielsen

@SebastianNielsen La pile est un ADT, ce qui signifie qu'elle expose une interface, qui est l'opération push and pop, mais le mécanisme sous-jacent (implémentation) est caché à l'utilisateur final. Une pile peut être implémentée avec un tableau ou avec une liste chaînée.
gdyrrahitis

13

EMPILER:

  1. La pile est définie comme une liste d'éléments dans laquelle nous pouvons insérer ou supprimer des éléments uniquement en haut de la pile.
  2. Le comportement d'une pile ressemble à un système LIFO (Last-In First-Out).
  3. La pile est utilisée pour passer des paramètres entre les fonctions. Lors d'un appel à une fonction, les paramètres et les variables locales sont stockés sur une pile.
  4. Les langages de programmation de haut niveau tels que Pascal, c, etc. qui prennent en charge la récursivité utilisent la pile pour la comptabilité. N'oubliez pas que dans chaque appel récursif, il est nécessaire de sauvegarder la valeur actuelle des paramètres, les variables locales et l'adresse de retour (l'adresse à laquelle le contrôle doit retourner après l'appel).

QUEUE:

  1. La file d'attente est une collection du même type d'élément. C'est une liste linéaire dans laquelle des insertions peuvent avoir lieu à une extrémité de la liste, appelée arrière de la liste, et deletions peuvent avoir lieu seulement àautre extrémité, dite avant de la liste
  2. Le comportement d'une file d'attente est comme un système FIFO (First-In-First-Out).

Je suis à peu près sûr que vous pouvez également insérer à la fin ou au début d'une pile, je pense que la chose importante à noter ici est le FIFO vs LIFO
Mike

6

Une pile est une collection d'éléments, qui peuvent être stockés et récupérés un par un. Les éléments sont récupérés dans l'ordre inverse de leur temps de stockage, c'est-à-dire que le dernier élément stocké est le prochain élément à récupérer. Une pile est parfois appelée structure Last-In-First-Out (LIFO) ou First-In-Last-Out (FILO). Les éléments précédemment stockés ne peuvent pas être récupérés tant que le dernier élément (généralement appelé élément «top») n'a pas été récupéré.

Une file d'attente est un ensemble d'éléments qui peuvent être stockés et récupérés un par un. Les éléments sont récupérés dans l'ordre de leur temps de stockage, c'est-à-dire que le premier élément stocké est le prochain élément à récupérer. Une file d'attente est parfois appelée structure First-In-First-Out (FIFO) ou Last-In-Last-Out (LILO). Les éléments stockés par la suite ne peuvent pas être récupérés tant que le premier élément (généralement appelé élément «avant») n'a pas été récupéré.


2

PILE: La pile est définie comme une liste d'éléments dans laquelle on peut insérer ou supprimer des éléments uniquement en haut de la pile

La pile est utilisée pour passer des paramètres entre les fonctions. Lors d'un appel à une fonction, les paramètres et les variables locales sont stockés sur une pile.

Une pile est une collection d'éléments, qui peuvent être stockés et récupérés un par un. Les éléments sont récupérés dans l'ordre inverse de leur temps de stockage, c'est-à-dire que le dernier élément stocké est le prochain élément à récupérer. Une pile est parfois appelée structure Last-In-First-Out (LIFO) ou First-In-Last-Out (FILO). Les éléments précédemment stockés ne peuvent pas être récupérés tant que le dernier élément (généralement appelé élément «top») n'a pas été récupéré.

QUEUE:

La file d'attente est une collection du même type d'élément. Il s'agit d'une liste linéaire dans laquelle des insertions peuvent avoir lieu à une extrémité de la liste, appelée arrière de la liste, et les suppressions ne peuvent avoir lieu qu'à l'autre extrémité, appelée le début de la liste

Une file d'attente est un ensemble d'éléments qui peuvent être stockés et récupérés un par un. Les éléments sont récupérés dans l'ordre de leur temps de stockage, c'est-à-dire que le premier élément stocké est le prochain élément à récupérer. Une file d'attente est parfois appelée structure First-In-First-Out (FIFO) ou Last-In-Last-Out (LILO). Les éléments stockés par la suite ne peuvent pas être récupérés tant que le premier élément (généralement appelé élément «avant») n'a pas été récupéré.


2

Pour essayer de simplifier à l'extrême la description d'une pile et d'une file d'attente, ce sont deux chaînes dynamiques d'éléments d'information accessibles à partir d'un bout de la chaîne et la seule vraie différence entre elles est le fait que:

lorsque vous travaillez avec une pile

  • vous insérez des éléments à une extrémité de la chaîne et
  • vous récupérez et / ou supprimez des éléments du même bout de la chaîne

avec une file d'attente

  • vous insérez des éléments à une extrémité de la chaîne et
  • vous les récupérez / supprimez de l'autre extrémité

REMARQUE : J'utilise le libellé abstrait de récupérer / supprimer dans ce contexte car il y a des cas où vous récupérez simplement l'élément de la chaîne ou dans un sens, le lisez ou accédez à sa valeur, mais il existe également des cas où vous supprimez l'élément de la chaîne et enfin il y a des instances où vous effectuez les deux actions avec le même appel.

L'élément mot est également utilisé à dessein afin d'abstraire autant que possible la chaîne imaginaire et de la découpler des termes spécifiques du langage de programmation. Cette entité d'information abstraite appelée élément peut être n'importe quoi, à partir d'un pointeur, d'une valeur, d'une chaîne ou de caractères, d'un objet, ... selon la langue.

Dans la plupart des cas, bien qu'il s'agisse en fait d'une valeur ou d'un emplacement mémoire (c'est-à-dire un pointeur). Et les autres ne font que cacher ce fait derrière le jargon du langage <

Une file d'attente peut être utile lorsque l'ordre des éléments est important et doit être exactement le même que lorsque les éléments sont arrivés pour la première fois dans votre programme. Par exemple, lorsque vous traitez un flux audio ou lorsque vous mettez en mémoire tampon des données réseau. Ou lorsque vous effectuez tout type de traitement de stockage et de transfert. Dans tous ces cas, vous avez besoin que la séquence des éléments soit sortie dans le même ordre que dans votre programme, sinon les informations peuvent ne plus avoir de sens. Ainsi, vous pouvez casser votre programme dans une partie qui lit les données d'une entrée, effectue un certain traitement et les écrit dans une file d'attente et une partie qui récupère les données de la file d'attente les traite et les stocke dans une autre file d'attente pour un traitement ultérieur ou une transmission des données. .

Une pile peut être utile lorsque vous devez stocker temporairement un élément qui sera utilisé dans la ou les étapes immédiates de votre programme. Par exemple, les langages de programmation utilisent généralement une structure de pile pour passer des variables aux fonctions. Ce qu'ils font en réalité, c'est stocker (ou pousser) les arguments de la fonction dans la pile, puis passer à la fonction où ils suppriment et récupèrent (ou pop) le même nombre d'éléments de la pile. De cette façon, la taille de la pile dépend du nombre d'appels de fonctions imbriqués. De plus, une fois qu'une fonction a été appelée et a terminé ce qu'elle faisait, elle laisse la pile exactement dans le même état qu'avant son appel! De cette façon, n'importe quelle fonction peut fonctionner avec la pile en ignorant comment d'autres fonctions fonctionnent avec elle.

Enfin, vous devez savoir qu'il existe d'autres termes utilisés pour désigner les mêmes concepts similaires. Par exemple, une pile peut être appelée un tas. Il existe également des versions hybrides de ces concepts, par exemple une file d'attente à deux extrémités peut se comporter à la fois comme une pile et comme une file d'attente, car elle est accessible par les deux extrémités simultanément. De plus, le fait qu'une structure de données vous soit fournie sous forme de pile ou de file d'attente ne signifie pas nécessairement qu'elle est implémentée en tant que telle, il existe des cas dans lesquels une structure de données peut être implémentée comme n'importe quoi et être fournie en tant que structure de données simplement parce qu'elle peut se comporter comme telle. En d'autres termes, si vous fournissez une méthode push and pop à n'importe quelle structure de données, elles deviennent comme des piles!


N'utilisez pas de formatage de code pour du texte qui n'est pas du code.
Marquis of Lorne

1

STACK est une liste LIFO (dernier entré, premier sorti). les moyens supposent que 3 éléments sont insérés dans la pile, soit 10,20,30. 10 est inséré en premier et 30 est inséré en dernier, donc 30 est d'abord supprimé de la pile et 10 est supprimé en dernier de la pile. C'est une liste LIFO (dernier entré, premier sorti).

QUEUE est une liste FIFO (First In First Out). Signifie qu'un élément est inséré en premier qui doit être supprimé first.eg file d'attente de personnes.


1

Empile un considéré comme une collection verticale. Comprenez d'abord qu'une collection est un OBJET qui rassemble et organise d'autres OBJETS plus petits. Ces OBJETS plus petits sont communément appelés éléments. Ces éléments sont «poussés» sur la pile dans un ordre ABC où A est le premier et C est le dernier. verticalement cela ressemblerait à ceci: 3ème élément ajouté) C 2ème élément ajouté) B 1er élément ajouté) A

Notez que le "A" qui a été ajouté en premier à la pile est en bas. Si vous voulez supprimer le "A" de la pile, vous devez d'abord supprimer "C", puis "B", et enfin votre élément cible "A". La pile nécessite une approche LIFO tout en traitant les complexités d'une pile. (Last In First Out) Lors de la suppression d'un élément d'une pile, la syntaxe correcte est pop. nous ne supprimons pas un élément d'une pile, nous le «sautons».

Rappelez-vous que "A" était le premier élément poussé sur la pile et "C" était le dernier élément poussé sur la pile. Si vous décidez que vous souhaitez voir ce qui se trouve en bas de la pile, étant donné que les 3 éléments sont sur la pile, A étant le premier B étant le deuxième et C étant le troisième élément, le haut devrait être enlevé puis le deuxième élément ajouté afin de visualiser le bas de la pile.


Veuillez formater votre question pour qu'elle soit meilleure et plus lisible.
Neeku
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.