Скачать презентацию ПОЛУСТАТИЧЕСКИЕ СТРУКТУРЫ ДАННЫХ ПРИЗНАКИ имеют переменную Скачать презентацию ПОЛУСТАТИЧЕСКИЕ СТРУКТУРЫ ДАННЫХ ПРИЗНАКИ имеют переменную

cpp 04.pptx

  • Количество слайдов: 53

ПОЛУСТАТИЧЕСКИЕ СТРУКТУРЫ ДАННЫХ ПОЛУСТАТИЧЕСКИЕ СТРУКТУРЫ ДАННЫХ

ПРИЗНАКИ • имеют переменную длину и простые процедуры ее изменения; • изменение длины структуры ПРИЗНАКИ • имеют переменную длину и простые процедуры ее изменения; • изменение длины структуры происходит в определенных пределах, не превышая какого-то максимального (предельного) значения.

ЛОГИЧЕСКИЙ УРОВЕНЬ Последовательность данных, связанная отношениями линейного списка. Доступ к элементу может осуществляться по ЛОГИЧЕСКИЙ УРОВЕНЬ Последовательность данных, связанная отношениями линейного списка. Доступ к элементу может осуществляться по его порядковому номеру ФИЗИЧЕСКОЕ ПРЕДСТАВЛЕНИЕ Последовательность слотов в памяти, где каждый следующий элемент расположен в памяти в следующем слоте (т. е. вектор)

СТЕКИ СТЕКИ

Стек - последовательный список с переменной длиной, включение и исключение элементов из которого выполняются Стек - последовательный список с переменной длиной, включение и исключение элементов из которого выполняются только с одной стороны списка, называемого вершиной стека. Другие названия стека - магазин и очередь LIFO (Last - In - First- Out ) Примеры: винтовочный патронный магазин, тупиковый железнодорожный разъезд для сортировки вагонов.

ОПЕРАЦИИ НАД СТЕКОМ Основные операции над стеком: • Начальное формирование стека • включение нового ОПЕРАЦИИ НАД СТЕКОМ Основные операции над стеком: • Начальное формирование стека • включение нового элемента (push) • исключение элемента из стека (pop). Вспомогательные операции: • определение текущего числа элементов в стеке; • очистка стека; • неразрушающее чтение элемента из вершины стека, которое может быть реализовано, как комбинация основных операций: x: =pop(stack); push(stack, x).

СХЕМА СТЕКА СХЕМА СТЕКА

Пустой стек; Последовательное включение в него элементов с именами 'A', 'B', 'C'; Последовательное удаление Пустой стек; Последовательное включение в него элементов с именами 'A', 'B', 'C'; Последовательное удаление из стека элементов 'C' и 'B'; Включение в стек элемента 'D'.

СХЕМАТИЧНОЕ ИЗОБРАЖЕНИЕ СТЕКА СХЕМАТИЧНОЕ ИЗОБРАЖЕНИЕ СТЕКА

struct stk { int elem; node *sled; }; struct stk { int elem; node *sled; };

СТЕК ПУСТ stk = NULL; СТЕК ПУСТ stk = NULL;

ФОРМИРОВАНИЕ НОВОГО ЭЛЕМЕНТА cin>>Элем; t = new (node); (*t). elem = Элем; (*t). sled ФОРМИРОВАНИЕ НОВОГО ЭЛЕМЕНТА cin>>Элем; t = new (node); (*t). elem = Элем; (*t). sled = stk;

"НАСТРОЙКА" УКАЗАТЕЛЯ СТЕКА stk = t;

Первый элемент в стеке Первый элемент в стеке

РАЗМЕЩЕНИЕ В СТЕКЕ ВТОРОГО ЭЛЕМЕНТА cin>>Элем 1; t = new (node); (*t). elem = РАЗМЕЩЕНИЕ В СТЕКЕ ВТОРОГО ЭЛЕМЕНТА cin>>Элем 1; t = new (node); (*t). elem = Элем 1; (*t). sled = stk;

"Настройка" указателя стека stk = t;

В стеке два элемента В стеке два элемента

ПОСТРОЕНИЕ СТЕКА void POSTROENIE (node **stk) { node *t; int el; *stk = NULL; ПОСТРОЕНИЕ СТЕКА void POSTROENIE (node **stk) { node *t; int el; *stk = NULL; cin>>el; while (el!=0) { t = new (node); (*t). elem = el; (*t). sled = *stk; *stk = t; cin>>el; }}

ВКЛЮЧЕНИЕ ЗВЕНА В СТЕК Исходное состояние стека ВКЛЮЧЕНИЕ ЗВЕНА В СТЕК Исходное состояние стека

Создание нового элемента q = new (node); (*q). elem = Элем; Создание нового элемента q = new (node); (*q). elem = Элем;

Включение элемента в стек (*q). sled = stk; Включение элемента в стек (*q). sled = stk;

"Настройка" указателя вершины стека stk = q;

ДОБАВЛЕНИЕ void W_S (node **stk, int el) { node *q; q = new (node); ДОБАВЛЕНИЕ void W_S (node **stk, int el) { node *q; q = new (node); (*q). elem = el; (*q). sled = *stk; *stk = q; }

ПОСТРОЕНИЕ НОВАЯ void POSTROENIE (node **stk) { int el; *stk = NULL; cin>>el; while ПОСТРОЕНИЕ НОВАЯ void POSTROENIE (node **stk) { int el; *stk = NULL; cin>>el; while (el!=0) { W_S (stk, el); cin>>el; }}

УДАЛЕНИЕ ЗВЕНА ИЗ СТЕКА Исходный стек УДАЛЕНИЕ ЗВЕНА ИЗ СТЕКА Исходный стек

Сохранение удаляемого элемента klad = (*stk). elem; Сохранение удаляемого элемента klad = (*stk). elem;

"Перенастройка" указателя стека q = stk; stk = (*stk). sled;

Очистка памяти delete q; Очистка памяти delete q;

УДАЛЕНИЕ ЭЛЕМЕНТА ИЗ СТЕКА void YDALENIE (node **stk, int klad) { node *q; if УДАЛЕНИЕ ЭЛЕМЕНТА ИЗ СТЕКА void YDALENIE (node **stk, int klad) { node *q; if (*stk==NULL) cout<<"Стек пуст!n"; else { *klad = (**stk). elem; q = *stk; *stk = (**stk). sled; delete q; }}

ОЧЕРЕДИ FIFO ОЧЕРЕДИ FIFO

ЛОГИЧЕСКАЯ СТРУКТУРА ОЧЕРЕДИ Очередью FIFO (First - In - First- Out) называется последовательный список ЛОГИЧЕСКАЯ СТРУКТУРА ОЧЕРЕДИ Очередью FIFO (First - In - First- Out) называется последовательный список с переменной длиной, в котором включение элементов выполняется только с одной стороны списка (эту сторону часто называют концом или хвостом очереди), а исключение - с другой стороны (называемой началом или головой очереди)

ОПЕРАЦИИ НАД ОЧЕРЕДЬЮ Основные операции над стеком: • Начальное формирование стека • включение нового ОПЕРАЦИИ НАД ОЧЕРЕДЬЮ Основные операции над стеком: • Начальное формирование стека • включение нового элемента (push) • исключение элемента из стека (pop). Вспомогательные операции: • определение текущего числа элементов в стеке; • очистка стека; • неразрушающее чтение элемента из вершины стека, которое может быть реализовано, как комбинация основных операций: x: =pop(stack); push(stack, x).

СХЕМАТИЧНОЕ ИЗОБРАЖЕНИЕ ОЧЕРЕДИ СХЕМАТИЧНОЕ ИЗОБРАЖЕНИЕ ОЧЕРЕДИ

ФОРМИРОВАНИЕ ОЧЕРЕДИ Первый элемент в очереди r = new (node); (*r). elem = Элем; ФОРМИРОВАНИЕ ОЧЕРЕДИ Первый элемент в очереди r = new (node); (*r). elem = Элем; (*r). sled = NULL;

Настройка указателей начала и конца очереди no = r; ko = r; Настройка указателей начала и конца очереди no = r; ko = r;

Создание нового элемента очереди r = new (node); (*r). elem = Элем 1; (*r). Создание нового элемента очереди r = new (node); (*r). elem = Элем 1; (*r). sled = NULL;

Настройка указателя на конец очереди (*ko). sled = r; ko = r; Настройка указателя на конец очереди (*ko). sled = r; ko = r;

void POSTROENIE (node **no, node **ko) { node *r; int el; cin>>el; if (el!=0) void POSTROENIE (node **no, node **ko) { node *r; int el; cin>>el; if (el!=0) { r = new (node); (*r). elem = el; (*r). sled = NULL; *no = r; *ko = r; cin>> el; while (el!=0) { r = new (node); (*r). elem = el; (*r). sled = NULL; (**ko). sled = r; *ko = r; cin>>el; } } else { r = NULL; *no = r; *ko = r; }}

void VYVOD (node **no, node **ko) { node *r; cout<<

ДОБАВЛЕНИЕ ЗВЕНА К ОЧЕРЕДИ Заполнение добавляемого звена r = new (node); (*r). elem = ДОБАВЛЕНИЕ ЗВЕНА К ОЧЕРЕДИ Заполнение добавляемого звена r = new (node); (*r). elem = Элем; (*r). sled = NULL;

Присоединение звена к очереди (*ko). sled = r; Присоединение звена к очереди (*ko). sled = r;

"Настройка" указателя на конец очереди ko = r;

void DOBAVLENIE (node **no, node **ko, int el) { node *r; r = new void DOBAVLENIE (node **no, node **ko, int el) { node *r; r = new (node); (*r). elem = el; (*r). sled = NULL; if (*no!=NULL) { (**ko). sled = r; *ko = r; } else { *no = r; *ko = r; }}

УДАЛЕНИЕ ЗВЕНА ИЗ ОЧЕРЕДИ УДАЛЕНИЕ ЗВЕНА ИЗ ОЧЕРЕДИ

Сохранение удаляемого элемента klad = (*no). elem; Сохранение удаляемого элемента klad = (*no). elem;

Сохранение указателя на удаляемый элемент и » перенастройка

Удаление delete q; Удаление delete q;

void YDALENIE (node **no, node **ko, int klad) { node *q; if (*no==NULL) cout<< void YDALENIE (node **no, node **ko, int klad) { node *q; if (*no==NULL) cout<< "Удалить нельзя, так как очередь пуста!n"; else { *klad = (**no). elem; q = *no; *no = (**no). sled; delete q; } }

ОЧЕРЕДИ С ПРИОРИТЕТАМИ Порядок выборки элементов из таких очередей определяется приоритетами элементов. Приоритет в ОЧЕРЕДИ С ПРИОРИТЕТАМИ Порядок выборки элементов из таких очередей определяется приоритетами элементов. Приоритет в общем случае может быть представлен числовым значением, которое FIFO, и LIFO-очереди могут трактоваться как приоритетные очереди, в которых приоритет элемента зависит от времени его включения в очередь. При выборке элемента всякий раз выбирается элемент с наибольшим приоритетом. Возможны очереди с приоритетным включением - в которых последовательность элементов очереди все время поддерживается упорядоченной, т. е. каждый новый элемент включается на то место в последовательности, которое определяется его приоритетом, а при исключении всегда выбирается элемент из начала. Возможны и очереди с приоритетным исключением - новый элемент включается всегда в конец очереди, а при исключении в очереди ищется (этот поиск может быть только линейным) элемент с максимальным приоритетом и после выборки удаляется из последовательности.

ДЕКИ ДЕКИ

Дек - особый вид очереди. Дек (deq - double ended queue) - это такой Дек - особый вид очереди. Дек (deq - double ended queue) - это такой последовательный список, в котором как включение, так и исключение элементов может осуществляться с любого из двух концов списка. Частный случай дека - дек с ограниченным входом и дек с ограниченным выходом. Логическая и физическая структуры дека аналогичны логической и физической структуре кольцевой FIFO-очереди.

ОПЕРАЦИИ НАД ДЕКОМ • Формирование дека • включение элемента справа; • включение элемента слева; ОПЕРАЦИИ НАД ДЕКОМ • Формирование дека • включение элемента справа; • включение элемента слева; • исключение элемента справа; • исключение элемента слева; • определение размера; • очистка.