Линейные списки: стеки, очереди и деки

Будем рассматривать не только структуру данных, но и операции, которые выполняются с этими данными.

Линейный список — это множество, состоящее из n> 0 узлов X [1], X [2], ..., X [n],

если n >0, то X [1] является первым узлом; если l< k <. n, то k-му узлу X [k] предшествует X [k -1] и за ним следует X [k + 1]; X [n] является последним узлом.

Операции, которые мы можем выполнять с линейными списками, включают, например, следующие:

  • Получить доступ к k-му узлу списка, чтобы проанализировать и/или изменить содержимое его полей.
  • Включить новый узел непосредственно перед k-м узлом.
  • Исключить k-й узел.
  • Объединить два (или более) линейных списка в один список.
  • Разбить линейный список на два (или более) списка.
  • Сделать копию линейного списка.
  • Определить количество узлов в списке.
  • Выполнить сортировку узлов списка в возрастающем порядке по некоторым полям в узлах.
  • Найти в списке узел с заданным значением в некотором поле.

Очень часто встречаются линейные списки, в которых включение, исключение или доступ к значениям почти всегда производятся в первом или последнем узлах, и мы дадим им специальные названия:

Стек — линейный список, в котором все включения и исключения делаются в одном конце списка.

Очередь — линейный список, в котором все включения производятся на одном конце списка, а все исключения делаются на другом его конце.

Дек (очередь с двумя концами) — линейный список, в котором все включения и делаются на обоих концах списка.

Из стека мы всегда исключаем "младший" элемент из имеющихся в списке, т. е. тот, который был включен позже других.

Для очереди справедливо в точности противоположное правило: исключается всегда самый "старший" элемент; узлы покидают список в том порядке, в котором они в него вошли.

Стек называли пуш-даун (push-down) списком, реверсивной памятью, гнездовой памятью, магазином, списком типа LIFO ("last-in-first-out" — "последним включается — первым исключается). Очередь иногда называют — циклической памятью или списком типа FIFO ("first-in-first-out" — "первым включается — первым исключается").

 

 


Выход из стека Вход 8 стек

 

Стек, представленный в виде железнодорожного разъезда. •


Процесс входов в подпрограммы и выходов из них при выполнении машинной программы подобен процессу функционирования стека. Стеки особенно полезны при обработке языков программирования и арифметических выражений. Вообще, стеки чаще всего возникают в связи с алгоритмами, имеющими явно или неявно рекурсивный характер.

 









Дата добавления: 2016-01-20; просмотров: 1989;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.004 сек.