Главная страница

ИГА. Понятие базы данных


Скачать 0.77 Mb.
НазваниеПонятие базы данных
Дата05.04.2022
Размер0.77 Mb.
Формат файлаdocx
Имя файлаИГА.docx
ТипДокументы
#445246
страница10 из 37
1   ...   6   7   8   9   10   11   12   13   ...   37

Циклические списки.


В процессе разработки может встретиться задача, где данные необходимо обрабатывать циклично, и конец цикла не зависит от конца данных, а выход из цикла контролируется внешними условиями. Примером может служить список задач, которые должны выполняться по очереди бесконечно. В этом случае может подойти список, у которого нет логического конца, т.к. последний элемент замкнут на первый (т.е. указатель следующего элемента у последнего элемента указывает на первый элемент списка). Список этого рода называется «замкнутый» или «кольцевой». Основой для замкнутого списка может быть как однонаправленный, так и двунаправленный список. На рис. 5 приведён пример логической реализации замкнутого списка на примере двунаправленного. [6]



Процесс добавления или удаления элемента между двумя другими не отличается от описанного процесса списка, на котором основан замкнутый список (однонаправленный или двунаправленный).

В строгом смысле нельзя назвать какой-либо элемент замкнутого списка (если он не единственный) первым или последним, поэтому адресуя к замкнутому списку, начальный элемент считается первым (на который установлен указатель начала списка), а последним тот, который указывает на начальный элемент. Исходя из этого, добавление или удаление крайних элементов отличается от базовых списков только необходимостью замыкания последнего элемента на первый в соответствии с рис. 5.

Замкнутый список наследует доступные операции, достоинства и недостатки своих базовых списков и легко реализуем на их основе.

Стек и его организация.


Механизм работы со стеками появился в компьютерной сфере с введением четырёхуровневого стека в процессорах Intel 4004 15 ноября 1971 года (конечно, существовали примеры стеков и до появления процессора). С тех пор стеки стали применяться и в разработке программного обеспечения [1][6].

Механизм работы стека прост – элемент, помещённый в начало стека последним должен быть извлечён первым. Добавление, извлечение и удаление элементов с конца списка не допускается. Этот принцип обозначен аббревиатурой LIFO «last-in first-out» («последним пришёл – первым ушёл»). В литературе так же встречаются отсылки к старым названиям этого списка: магазин, гнездовая память, реверсивная память, push-down list. Применительно к стекам используются следующие названия доступных операций: push (положить) и pop (извлечь). В своей основе стек содержит однонаправленный список [6][7]. На рис. 8 проиллюстрирована работа стека.



Необходимо обозначить все базовые операции, доступные при оперировании со стеком (унаследованные от базового списка и специфические). Операции со стеком [6][16]:

  • Создание нулевого (пустого) стека

  • Проверка на пустоту

  • Проверка на существование первого элемента

  • Извлечение данных первого элемента

  • Удаление первого элемента и взятие следующего как текущего

  • Вставка нового элемента первым

  • Очистка стека

У стека существуют следующие ограничения на операции:

  • Добавление и удаление элемента между двумя другими запрещено.

  • Перестановка элементов местами запрещена

  • Реверсирование списка запрещено

  • Сортировка запрещена

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

Очереди, организация очередей.


Сначала важно дать определение понятию «очередь», т.к. в некоторых разделах математики уже даётся определение этому термину, которое не полностью отражает суть построения этого вида списка. В математике под очередью может пониматься любой список, в который включаются или исключаются элементы. Под это определение так же попадают рассмотренные нами ранее виды списков, но к ним с математической точки зрения должно примениться определение «очереди с различными дисциплинами» [1][3]. В данном случае, добавление или удаление элементов допустимо только с концов списка и по особым правилам, когда первый добавленный элемент удаляется первым. В литературе это правило обозначают аббревиатурой «FIFO», что расшифровывается как «First-in – First Out» (первым пришёл – первым ушёл). Поэтому, в этой работе приводится общее определение очереди: Очередь – список с методом оперирования данными по принципу «первым пришёл – первым ушёл». [8]

Конечно, в реальной жизни очереди встречаются повсеместно, поэтому естественно, что в программировании потребность в реализации списков этого типа встречается часто. Наиболее очевидный пример – очередь задач на выполнение программой.

Очереди в их каноническом виде реализуются на основе однонаправленного списка с разрешением добавления элементов только одного конца, а удаления только с другого. На рис. 6 приведена расширенная схема работы однонаправленного списка, чтобы проиллюстрировать приведённый принцип.



В литературе встречаются термины, которые обозначают начало и конец очереди: «голова» (head) и «хвост» (tail). Элемент, добавляемый в очередь, добавляется в хвост, в то время как первый элемент (элемент для извлечения) находится в голове очереди.

Резюмируя, важно отметить, что хотя очередь представлена по своей структуре однонаправленным списком и наследует его достоинства и недостатки, работать с ней проще в силу ограничений, накладываемых принципом FIFO. Необходимо переоформить операции, которые не могут быть унаследованы от однонаправленного списка:[1][13]

  • Проверка на существование элемента в начале очереди

  • Выборка и извлечение данных элемента в начале очереди

  • Удаление элемента в начале очереди и взятие предыдущего как текущего

  • Вставка нового элемента в конец очереди

Дополнительно обозначим ограничения, накладываемые принципами FIFO:

  • Добавление и удаление элемента между двумя другими запрещено.

  • Удаление элемента в конце очереди запрещено

  • Добавление элемента в начало очереди запрещено

  • Перестановка элементов местами запрещена

  • Реверсирование списка запрещено

  • Сортировка запрещена

В практическом программировании очередь удобна свой относительной простотой реализации, т.к. за основу можно взять однонаправленный список и запретить использование операций, которые противоречат FIFO.
1   ...   6   7   8   9   10   11   12   13   ...   37


написать администратору сайта