Содержание
- 2. Стек – это последовательный список переменной длины, включение и исключение элементов из которого производится только с
- 3. Абстрактное понятие стека допускает неопределенно большой список. Логически подносы в столовой могут складываться бесконечно. В действительности
- 4. ADT Stack (абстрактный тип данных) Данные Список элементов с позицией top, указывающей на вершину стека. Операции
- 5. Pop Вход: Нет Предусловия: Стек не пустой. Процесс: Удаление элемента из вершины стека. Выход: Возвращать элемент
- 6. LIFO (last-in/first-out – «последний вошел – первый вышел») При реализации стека на основе одномерного массива размер
- 7. При реализации стека с помощью указателей размер стека ограничен доступным объемом свободной памяти. Графическая структура стека
- 8. Класс Stack Члены класса Stack включают список, индекс или указатель на вершину стека и набор стековых
- 9. Первоначально стек пуст и top = -1. Элементы вводятся в массив (функция Push) в возрастающем порядке
- 10. Спецификация класса Stack //ОБЪЯВЛЕНИЕ //#include //#include const int MaxStackSize = 50; class Stack { private: //
- 11. ОПИСАНИЕ спецификации Данные в стеке имеют тип DataType, который должен определяться с использованием оператора typedef. Пользователь
- 12. Допустим, объявление стека и реализация содержатся в файле astack.h. typedef int DataType; ….. #include astack.h; //
- 13. Реализация класса Stack // инициализация вершины стека Stack::Stack (void) : top(-1) { } //поместить элемент в
- 14. // взять элемент из стека DataType Stack::Pop (void) { DataType temp; // стек пуст, завершить программу
- 15. // возвратить данные в вершине стека DataType Stack::Peek (void) const { // если стек пуст, завершить
- 16. Для защиты целостности стека класс предусматривает операции тестирования состояния стека. // тестирование стека на наличие в
- 17. Пример применения Палиндромы. Когда DataType является типом char, приложение обрабатывает символьный стек. Приложение определяет палиндромы, являющиеся
- 18. #include // … typedef char DataType; // элементы стека - символы #include “astack.h" // создает новую
- 19. int main ( ) { const int True = 1, False = 0; Stack S; char
- 20. Стек является чрезвычайно удобной структурой данных для многих задач вычислительной техники. Наиболее типичной из таких задач
- 21. Стек используется для размещения в нем локальных переменных процедур и иных программных блоков. При каждой активизации
- 22. В микропроцессорах семейства Intel, как и в большинстве современных процессорных архитектур, поддерживается аппаратный стек. Аппаратный стек
- 23. Очереди Очередь (queue) — структура данных типа «список», позволяющая добавлять элементы лишь в конец списка, и
- 24. Очереди часто используются в программах для реализации буфера, в который можно положить элемент для последующей обработки,
- 25. Очередь может быть реализована двумя способами: на основе массивов и списками при помощи указателей. Начало очереди
- 26. Рассмотрим класс Queue - используется массив для сохранения списка элементов и определяет переменные, которые поддерживают позиции
- 27. Спецификация класса Queue ОБЪЯВЛЕНИЕ #include … const int MaxQSize = 50; // максимальный размер списка очереди
- 28. Пусть объявление очереди и реализация содержатся в файле aqueue.h. ПРИМЕР typedef int DataType; #include aqueue.h ….
- 29. Схема организации линейной очереди на основе массива Простейшая линейная очередь на основе одномерного массива. При исключении
- 30. Вид 4: клиенты D, Е и F встают в очередь, заполняя ее, а клиент G должен
- 31. Кольцевая очередь является более эффективной. Элементы кольцевой очереди организованы логически в окружность. Переменная front всегда является
- 32. Круговая модель очереди Реализуем круговое движение, используя операцию остатка от деления: Перемещение конца очереди вперед: rear
- 33. Используем целый массив qlist (размер = 4) из четырех элементов для реализации круговой очереди. Первоначально count
- 34. Конструктор Queue Конструктор инициализирует элементы данных front rear и count нулевыми значениями. Это задает пустую очередь.
- 35. Перед началом процесса вставки индекс rear указывает на следующую позицию в списке. Новый элемент помещается в
- 36. Qinsert // вставить item в круговую очередь void Queue::QInsert (const DataType& item) { if (count =
- 37. Операция QDelete удаляет элемент из начала очереди, позиции, на которую ссылается индекс front. Процесс удаления начинается
- 38. Qdelete // удалить элемент из начала очереди и возвратить его значение DataType Queue::QDelete(void) { DataType temp;
- 39. Реализация очереди с помощью указателей struct SQueue { int dann; SQueue *next; }; SQueue * front=NULL,
- 40. Очереди приоритетов (Ранее дано определение, что очередь — это структура данных, которая обеспечивает FIFO-порядок элементов. Очередь
- 41. Структура, называемая очередью приоритетов (priority queue), имеет опeрации PQInsert и PQDelete: PQInsert просто вставляет элемент данных
- 42. Очередь приоритетов можно представить в виде нескольких очередей, где каждая очередь используется для своего приоритета.
- 43. ADT - очередь приоритетов описывается как список с операциями для добавления или удаления элементов из списка.
- 44. Спецификация класса PQueue ОБЪЯВЛЕНИЕ #include … const int MaxPQSize = 50; class PQueue { int count;
- 45. Метод PQDelete удаляет элемент с высшим приоритетом из списка. Полагаем, что элемент с высшим приоритетом —
- 46. PQInsert // вставить элемент в очередь приоритетов void PQueue::PQInsert (const DataType& item) { //если уже вcе
- 47. PQDelete // удаляет элемент из очереди приоритетов и возвращает его значение DataType PQueue::PQDelete(void) { DataType min;
- 48. Операция PQInsert имеет время вычисления (порядок) О(1), так как она непосредственно добавляет элемент в конец списка.
- 49. Дек (от англ. deq - double ended queue, очередь с двумя концами) - это такой последовательный
- 50. Задачи, требующие структуры дека, встречаются в вычислительной технике и программировании гораздо реже, чем задачи, реализуемые на
- 51. Вся организация дека выполняется программистом без каких-либо специальных средств системной поддержки. Однако, в качестве примера такой
- 52. В программных системах, обрабатывающих объекты сложной структуры, могут решаться разные подзадачи, каждая из которых требует, возможно,
- 53. Мультисписок состоит из элементов, содержащих такое число указателей, которое позволяет организовать их одновременно в виде нескольких
- 55. Для того чтобы при выборке каждого подмножества не выполнять полный просмотр с отсеиванием записей, к требуемому
- 56. Каждая подзадача работает со своим подмножеством как с линейным списком, используя для этого определенное поле связок.
- 57. Экономия памяти далеко не единственная причина, по которой применяют мультисписки. Многие реальные структуры данных не сводятся
- 58. Часто в виде мультисписков представляют матрицы очень большой размерности, в которых большинство элементов равны 0 (такие
- 60. Нелинейные разветвленные списки Нелинейным разветвленным списком является список, элементами которого могут быть тоже списки. (a,(b,c,d),e,(f,g)) (
- 62. Скачать презентацию