Щоб спробувати і надто спростити опис стека та черги, вони є обома динамічними ланцюжками інформаційних елементів, до яких можна отримати доступ з одного кінця ланцюга, і єдиною реальною різницею між ними є той факт, що:
при роботі зі штабелем
- ви вставляєте елементи на одному кінці ланцюга і
- ви отримуєте та / або виймаєте елементи з того самого кінця ланцюга
при цьому з чергою
- ви вставляєте елементи на одному кінці ланцюга і
- ви отримуєте / видаляєте їх з іншого кінця
ПРИМІТКА . У цьому контексті я використовую абстрактне формулювання вилучення / видалення, оскільки є випадки, коли ви просто витягаєте елемент з ланцюга або в певному сенсі просто читаєте його або отримуєте доступ до його значення, але також є випадки, коли ви видаляєте елемент з ланцюг, і, нарешті, є випадки, коли ви виконуєте обидві дії з одним і тим самим дзвінком.
Також елемент слова цілеспрямовано використовується для того, щоб якомога більше абстрагувати уявний ланцюг і відокремити його від конкретних термінів мови програмування. Цей абстрактний об'єкт інформації, який називається елементом, може бути будь-яким, від вказівника, значення, рядка або символів, об'єкта, ... залежно від мови.
У більшості випадків, хоча це фактично або значення, або місце пам'яті (тобто вказівник). А решта просто приховують цей факт за мовним жаргоном <
Черга може бути корисною, коли порядок елементів важливий і повинен бути точно таким же, як коли елементи вперше потрапили у вашу програму. Наприклад, коли ви обробляєте аудіопотік або буферуєте мережеві дані. Або коли ви робите будь-який тип зберігання та переробки вперед. У всіх цих випадках потрібно, щоб послідовність елементів виводилася в тому ж порядку, як вони потрапили у вашу програму, інакше інформація може перестати мати сенс. Отже, ви можете зламати свою програму на частину, яка читає дані з якогось вводу, виконує деяку обробку і записує їх у чергу, і частина, яка отримує дані з черги, обробляє їх і зберігає їх в іншій черзі для подальшої обробки або передачі даних .
Стек може бути корисним, коли вам потрібно тимчасово зберігати елемент, який буде використовуватися в безпосередньому кроці вашої програми. Наприклад, мови програмування зазвичай використовують структуру стека для передачі змінних функціям. Те, що вони насправді роблять, - це зберігати (або проштовхувати) аргументи функції у стеку, а потім переходити до функції, де вони видаляють та отримують (або виводять) однакову кількість елементів із стека. Таким чином, розмір стека залежить від кількості вкладених викликів функцій. Крім того, після виклику функції та закінчення того, що вона робила, вона залишає стек у точно такому ж стані, як і раніше. Таким чином, будь-яка функція може працювати зі стеком, ігноруючи, як інші функції працюють з нею.
Нарешті, ви повинні знати, що існують і інші терміни, які використовуються там же для подібних понять. Наприклад, стек можна назвати купою. Існують також гібридні версії цих понять, наприклад, черга з подвійним завершенням може вести себе одночасно як стек і як чергу, оскільки до неї можна отримати доступ обома кінцями одночасно. Крім того, те, що структура даних надається вам як стек або як черга, це не обов'язково означає, що вона реалізована як така, є випадки, коли структура даних може бути реалізована як будь-що і надаватися як специфічна структура даних просто тому, що вона може бути змушена вести себе таким. Іншими словами, якщо ви надаєте метод push і pop для будь-якої структури даних, вони чарівно стають стеками!