Реализация очереди на основе массива .



Лекция 5.

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

· по структуре:

=данные статической структуры, которые получают структуру при описании и сохраняют её (не нарушая) до конца программы: данные стандартного типа (например, int), массив сохраняет количество элементов, объявленное в описании, и др.

=данные динамической структуры, в которых не фикситруется количество элементов, они могут быть пустые, могут состоять из одного, двух и более элементов, которые могут добавляться и удаляться из этих данных.

· по способу размещения:

= статически размещаемые данные: int X; float a[100], память которых сохраняется за ними в течении всей программы, пока работает их область действия.

=динамически размещаемые данные:  память для них выделяется по операции new, существуют они пока эта память не будет освобождена.

Динамические структуры данных.

Элементы в них однотипные, но количество их не фиксируется в структуре. Динамические структуры – это:

последовательность, стек, очередь, дек, список, деревья, графы (на 2 курсе)

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

1) Последовательность – характерен последовательный доступ к элементам,последовательно расположенным, так, что добраться до какого–то элемента можно только просмотрев все предшествующие ему. Поступающие элементы встают в конец последовательности, а читаются из её начала Этот тип данных реализован в языках  в типе “последовательный файл” , все операции соответствуют операциям чтения из файла, записи в файл. Последовательность может быть закрыта, либо открыта для чтения из неё элементов, либо открыта для записи в неё элементов..

Операции: пусть   S – последовательность элементов типа T.

1.Открыть последовательность S для чтения.

2.Читать элемент x типа T из последовательности S, если есть непрочитанные.

3. Проверить , есть ли непрочитанные элементы в последовательности.

4. Открыть последовательность S для  записи.

5. Добавить элемент x типа T в последовательность S.

6. Закрыть последовательность S.

2) Стек – структура данных, в которой могут накапливаться однотипные данные, при этом выполняется условие: элементы можно выбирать из стека в порядке, обратном порядку их поступления. Это условие называют принципом LIFO: Last –In- First- Out (последний пришел, первый уйдёшь).

дно стека                          вершина

Пусть S – стек элементов типа Т.

Операции для работы со стеком:

1. Сделать стек S пустым: clrst (S).

2.  Добавить элемент x типа Т в стек S: push(S, x).

3.  Удалить элемент из непустого стека S: pop(S).

4.  Проверить стек S на пустоту: 

                    true , если S пустой

emptyst(S)= .

5. Выбрать элемент x типа Т из вершины стека без удаления: x = topst(S).

Типа стек  в языках нет. Такие совокупности можно моделировать, например на базе массива, тогда получается ограниченный стек.

3)  Очередь – структура данных, в которой элементы накапливаются в соответствии с принципом FIFO:

First –In- First- Out (первый пришел, первый уйдешь)

    

 


Операции для очереди q с элементами типа Т:

1. Сделать очередь q  пустой: clrqu(q).

2.  Добавить элемент a типа Т в очередь q  : insqu(q,a).

3.  Удалить элемент из непустой очереди q: remqu(q).

4.  Проверить очередь q  на пустоту: 

                    true , если q пустая

emptyqu(q)= .

5. Выбрать элемент a типа Т из непустой очереди без удаления: a= topqu(q).

4. Дек – очередь с двумя концами (double ended queue)

                         
           

 


Самим записать операции для дека

Реализация очереди на основе массива .

0 1 2  3 4 . . . . . . . . . .        size          . . . . . . . . . . . . . . . . NN -1

                х х х х х            

                        beg

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

1-ый файл – заголовочный –описывает тип структуры-очереди, объявляет прототипы функций - операций, это интерфейсный файл.

2-ой файл –  файл реализации содержит  описание функций- операций, спецификации этого типа данных

3-ий файл – главный файл с алгоритмом, использующим очереди.

Абстрактный тип данных (АТД) – это тип данных (набор значений и совокупность операций для этих значений), доступ к которому осуществляется только через интерфейс. Программа, которая использует АТД, называется клиентской (3-ий файл).


Дата добавления: 2021-03-18; просмотров: 135; Мы поможем в написании вашей работы!

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






Мы поможем в написании ваших работ!