в чому основна відмінність стека від черги?


130

У чому полягає основна відмінність стека від черги ??

Будь ласка, допоможіть мені, я не можу знайти різницю.

Як ви розмежуєте стек та чергу?

Я шукав відповідь у різних посиланнях і знайшов цю відповідь.

У програмуванні високого рівня,

стек визначається як список або послідовність елементів, які подовжуються шляхом розміщення нових елементів «зверху» існуючих елементів і скорочуються шляхом видалення елементів зверху існуючих елементів. Це ADT [абстрактний тип даних] з математичними операціями "push" і "pop".

Черга - це послідовність елементів, до якої додається, розміщуючи новий елемент на задній частині існуючих та скорочуючи, видаляючи елементи перед чергою. Це ADT [абстрактний тип даних]. Існує більше цих термінів, що розуміються в програмуванні Java, C ++, Python тощо.

Чи можу я отримати відповідь, яка є більш детальною? Будь ласка, допоможи мені.


12
Здається, ви відповіли на власне запитання - стек є контейнером Last-In First-Out (LIFO), а черга - контейнером First-In First-Out (FIFO).
Ірідіум

Відповіді:


151

Стек - це структура даних LIFO (остання вперше). Пов'язане посилання на вікіпедію містить детальний опис та приклади.

Черга - це структура даних FIFO (перша в першу чергу). Пов'язане посилання на вікіпедію містить детальний опис та приклади.


131

Уявіть стопку паперу . Останній шматок, покладений у стопку, знаходиться вгорі, тому він перший вийшов. Це LIFO . Додавання аркуша паперу називається "штовханням", а виймання аркуша паперу називається "вискочив".

Уявіть чергу в магазині . Перша людина в черзі - перша людина, яка вийшла з ладу. Це FIFO . Людина, що вступає в чергу, "зачаровується", а людина, яка виходить з ладу, "відлучається".


3
Одна з найкращих аналогій, яку я можу придумати.
Єйкель

83

Візуальна модель

Млинець стек (LIFO)

Єдиний спосіб додати його та / або видалити його - зверху.

млинець стек

Лінія черзі (FIFO)

Коли хтось приїжджає, вони прибувають наприкінці черги, а коли хтось виходить, вони виходять з передньої частини черги.

dmv лінія

Веселий факт: англійці відносять людей до черги


6
Jee, це має бути відповідь imo. Спасибі @Jacksonkr
Куласангар

Ха-ха, впевнений, що це ідеальний опис черги та стека, але просто заради аргументів, що робити, якщо я хочу, щоб перший млинець був доданий до тарілки? Я знаю, що це можна доповнити stack.size () vs. if (! Stack.isEmpty ()), але все-таки цей перший млинець може бути найкращим:) ... У будь-якому випадку, приємна відповідь, і я згоден, що це Ясніше ... здається цікавим, що британці позначають рядки як черги, хоча (якщо це точно), мовою, що не програмує, я б все-таки вважав, що рядок, де перший запис повинен вийти першим (після виходу з рядка / черги )
ViaTech

Зачекайте, їх не називають чергами в іншому місці?
jaunt

37

Ви можете розглядати обидва як упорядкований список речей (упорядкований часом, коли вони були додані до списку). Основна відмінність між ними - це те, як нові елементи входять до списку, а старі елементи залишають його.

Щодо стека, якщо у мене є список a, b, c, і я додаю d, він закінчується в кінці, тому я закінчую a,b,c,d. Якщо я хочу з’явити елемент списку, я видаляю останній доданий елемент, який є d. Після попу, мій список тепер a,b,cзнову

Для черги я додаю нові елементи таким же чином. a,b,cстає a,b,c,dпісля додавання d. Але тепер, коли я спливу, мені доводиться брати елемент з передньої частини списку, так це стає b,c,d.

Це дуже просто!


14

Черга

Черга - це упорядкована колекція предметів.

Елементи видаляються в одному кінці під назвою "передній" кінець черги.

Елементи вставляються на іншому кінці, званому "тилом" черги.

Перший вставлений елемент - перший, який буде видалений (FIFO).

Стек

Стек - це сукупність предметів.

Це дозволяє отримати доступ лише до одного елемента даних: останнього вставленого елемента.

Елементи вставляються та видаляються на одному кінці під назвою "Верх стека".

Це динамічний і постійно мінливий об'єкт.

Усі елементи даних ставляться на вершину стека і знімаються зверху

Ця структура доступу відома як структура останнього в першому (LIFO)


Отже, в основному "черга" - це "FIFO" - спочатку в першій черзі. Хоча "стек" - це "LIFO" - останній у першій черзі. Я прав?
Себастьян Нільсен

@SebastianNielsen Так правильно, як згадується у відповіді.
Dissanayake

Але в чому тоді різниця між пов'язаним списком і стеком? Хіба це не те саме?
Себастьян Нільсен

@SebastianNielsen Стек є ADT, це означає, що він відкриває інтерфейс, який є операцією push і pop, але основний механізм (реалізація) прихований від кінцевого користувача. Стек може бути реалізований з масивом або з пов'язаним списком.
gdyrrahitis

13

СТЕК:

  1. Стек визначається як список елементів, в який ми можемо вставляти або видаляти елементи лише у верхній частині стека.
  2. Поведінка стека схожа на систему Last-In First-Out (LIFO).
  3. Стек використовується для передачі параметрів між функцією. Під час виклику функції параметри та локальні змінні зберігаються у стеку.
  4. Мови програмування високого рівня, такі як Pascal, c тощо, що забезпечують підтримку рекурсії, використовують стек для ведення бухгалтерського обліку. Пам'ятайте, що в кожному рекурсивному виклику є необхідність збереження поточного значення параметрів, локальних змінних та зворотної адреси (адреса, до якої керування має повернутися після виклику).

ЧЕРГА:

  1. Черга - це сукупність однотипних елементів. Це лінійний список, в якому вставки можуть відбуватися в одному кінці списку, який називається тилом списку, а видалення можуть відбуватися лише на іншому кінці, називаючись передньою частиною списку
  2. Поведінка черги схожа на систему «Перший-у-першому» (FIFO).

Я впевнений, що ви також можете вставити кінець чи початок стека, я думаю, що тут важливо відзначити FIFO проти LIFO
Майк

6

Стек - це сукупність елементів, які можна зберігати та отримувати один за одним. Елементи отримують у зворотному порядку часу їх зберігання, тобто останній елемент, що зберігається, є наступним елементом, який слід отримати. Стек іноді називають структурою "Останній-в-першому" (LIFO) або "Перший-в-останньому" (FILO). Попередньо збережені елементи не можна отримати доти, доки не буде знайдено останній елемент (зазвичай його називають "верхнім" елементом).

Черга - це сукупність елементів, які можна зберігати та отримувати один за одним. Елементи отримують у порядку їх зберігання, тобто перший збережений елемент є наступним елементом, який слід отримати. Чергу іноді називають структурою «перший-у-першому» (FIFO) або «останній-в-останній-вихід» (LILO). Згодом збережені елементи не можуть бути отримані до того моменту, поки перший елемент (зазвичай його називають "передній" елемент) не буде знайдено.


2

STACK: Стек визначається як список елементів, в який ми можемо вставляти або видаляти елементи лише у верхній частині стека

Стек використовується для передачі параметрів між функцією. Під час виклику функції параметри та локальні змінні зберігаються у стеку.

Стек - це сукупність елементів, які можна зберігати та отримувати один за одним. Елементи отримують у зворотному порядку часу їх зберігання, тобто останній елемент, що зберігається, є наступним елементом, який слід отримати. Стек іноді називають структурою "Останній-в-першому" (LIFO) або "Перший-в-останньому" (FILO). Попередньо збережені елементи не можна отримати доти, доки не буде знайдено останній елемент (зазвичай його називають "верхнім" елементом).

ЧЕРГА:

Черга - це сукупність однотипних елементів. Це лінійний список, в якому вставки можуть відбуватися в одному кінці списку, який називається тилом списку, а видалення можуть відбуватися лише на іншому кінці, називаючись передньою частиною списку

Черга - це сукупність елементів, які можна зберігати та отримувати один за одним. Елементи отримують у порядку їх зберігання, тобто перший збережений елемент є наступним елементом, який слід отримати. Чергу іноді називають структурою «перший-у-першому» (FIFO) або «останній-в-останній-вихід» (LILO). Згодом збережені елементи не можуть бути отримані до того моменту, поки перший елемент (зазвичай його називають "передній" елемент) не буде знайдено.


2

Щоб спробувати і надто спростити опис стека та черги, вони є обома динамічними ланцюжками інформаційних елементів, до яких можна отримати доступ з одного кінця ланцюга, і єдиною реальною різницею між ними є той факт, що:

при роботі зі штабелем

  • ви вставляєте елементи на одному кінці ланцюга і
  • ви отримуєте та / або виймаєте елементи з того самого кінця ланцюга

при цьому з чергою

  • ви вставляєте елементи на одному кінці ланцюга і
  • ви отримуєте / видаляєте їх з іншого кінця

ПРИМІТКА . У цьому контексті я використовую абстрактне формулювання вилучення / видалення, оскільки є випадки, коли ви просто витягаєте елемент з ланцюга або в певному сенсі просто читаєте його або отримуєте доступ до його значення, але також є випадки, коли ви видаляєте елемент з ланцюг, і, нарешті, є випадки, коли ви виконуєте обидві дії з одним і тим самим дзвінком.

Також елемент слова цілеспрямовано використовується для того, щоб якомога більше абстрагувати уявний ланцюг і відокремити його від конкретних термінів мови програмування. Цей абстрактний об'єкт інформації, який називається елементом, може бути будь-яким, від вказівника, значення, рядка або символів, об'єкта, ... залежно від мови.

У більшості випадків, хоча це фактично або значення, або місце пам'яті (тобто вказівник). А решта просто приховують цей факт за мовним жаргоном <

Черга може бути корисною, коли порядок елементів важливий і повинен бути точно таким же, як коли елементи вперше потрапили у вашу програму. Наприклад, коли ви обробляєте аудіопотік або буферуєте мережеві дані. Або коли ви робите будь-який тип зберігання та переробки вперед. У всіх цих випадках потрібно, щоб послідовність елементів виводилася в тому ж порядку, як вони потрапили у вашу програму, інакше інформація може перестати мати сенс. Отже, ви можете зламати свою програму на частину, яка читає дані з якогось вводу, виконує деяку обробку і записує їх у чергу, і частина, яка отримує дані з черги, обробляє їх і зберігає їх в іншій черзі для подальшої обробки або передачі даних .

Стек може бути корисним, коли вам потрібно тимчасово зберігати елемент, який буде використовуватися в безпосередньому кроці вашої програми. Наприклад, мови програмування зазвичай використовують структуру стека для передачі змінних функціям. Те, що вони насправді роблять, - це зберігати (або проштовхувати) аргументи функції у стеку, а потім переходити до функції, де вони видаляють та отримують (або виводять) однакову кількість елементів із стека. Таким чином, розмір стека залежить від кількості вкладених викликів функцій. Крім того, після виклику функції та закінчення того, що вона робила, вона залишає стек у точно такому ж стані, як і раніше. Таким чином, будь-яка функція може працювати зі стеком, ігноруючи, як інші функції працюють з нею.

Нарешті, ви повинні знати, що існують і інші терміни, які використовуються там же для подібних понять. Наприклад, стек можна назвати купою. Існують також гібридні версії цих понять, наприклад, черга з подвійним завершенням може вести себе одночасно як стек і як чергу, оскільки до неї можна отримати доступ обома кінцями одночасно. Крім того, те, що структура даних надається вам як стек або як черга, це не обов'язково означає, що вона реалізована як така, є випадки, коли структура даних може бути реалізована як будь-що і надаватися як специфічна структура даних просто тому, що вона може бути змушена вести себе таким. Іншими словами, якщо ви надаєте метод push і pop для будь-якої структури даних, вони чарівно стають стеками!


Не використовуйте форматування коду для тексту, який не є кодом.
Маркіз Лорн

1

STACK - це список LIFO (останній у, перший вихід). означає, припустимо, 3 елементи вставлені в стек, тобто 10,20,30. 10 вставляється перший, а 30 вставляється останній, тому 30 вперше видаляється зі стека, а 10 - останній, видаляється із stack.це список LIFO (Last In First Out).

QUEUE - це список FIFO (First In First Out). Значить, перший елемент вставляється першим, який слід видалити first.eg чергою людей.


1

Стеки вважаються вертикальною колекцією. Спочатку зрозумійте, що колекція - ОБ'ЄКТ, який збирає та організовує інші менші ОБ'ЄКТИ. Ці менші ОБ'ЄКТИ зазвичай називають Елементами. Ці елементи "натиснуті" на стек у порядку ABC, де A - перший, а C - останній. вертикально це виглядатиме так: 3-й елемент додано) C доданий 2-й елемент) B доданий 1-й елемент) A

Зауважте, що "A", який був вперше доданий до стеку, знаходиться внизу. Якщо ви хочете видалити "A" зі стека, спочатку потрібно видалити "C", потім "B", а потім нарешті ваш цільовий елемент "A". Стек вимагає підходу LIFO під час вирішення складності стеку (Last In First Out) При видаленні елемента зі стека правильний синтаксис є pop. ми не видаляємо елемент зі стека, ми його "вискакуємо".

Нагадаємо, що "A" був першим елементом, натиснутим на стек, а "C" - останнім елементом, натиснутим на стек. Якщо ви вирішите, що ви хочете побачити те, що знаходиться внизу стека, оскільки 3 елементи знаходяться на стеку, впорядкований A, а перший B - другий, а C - третій елемент, верхній слід зіскочити, тоді Другий елемент додано для того, щоб переглянути нижню частину стека.


Будь ласка, відформатуйте своє запитання, щоб воно виглядало кращим і читабельнішим.
Нееку
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.