polevoi_cpp_2013_spring_lecture_05
.pdf
Стек (линейный список массив)
вершина
const T& getTop(const St& s)
{
assert(0 != s.m_pHead); return s.m_pHead->m_data;
}
30.03.2013 |
31 |
Очередь - операции
•создание
•уничтожение
•добавление элемента
•удаление элемента
•получение значение верхнего элемента
30.03.2013 |
32 |
Очередь
голова
pop getTop
push
хвост
isEmpty
30.03.2013 |
33 |
Очередь – интерфейс
•create()
•destroy()
•bool isEmpty()
•push(T)
•pop()
•T getTop()
30.03.2013 |
34 |
Очередь (в стиле Си)
пример: struct Queue;
bool create(Queue& queue); bool destroy(Queue& queue);
bool isEmpty(const Queue& queue)
bool push(Queue& queue, const T& val) bool pop(Queue& queue);
T getTop(const Queue& queue)
30.03.2013 |
35 |
Очередь – реализация
•динамический массив (вставка и извлечение с концов)
•динамический массив (подвижные концы)
•список
30.03.2013 |
36 |
Очередь (подвижные концы)
iTail = (iTail + 1) % size; // push
iHead = (iHead + 1) % size; // pop
size – размер буфера
iHead
iTail
30.03.2013 |
37 |
Очередь с приоритетом
•<ключ, данные>
•порядок извлечения элементов определяется ключом, а не порядком добавления элементов в очередь
30.03.2013 |
38 |
Дэк (двусвязная очередь)
•добавление и извлечение элементов возможна с обоих концов
30.03.2013 |
39 |
Сортировка очередью
•наполнить очередь с приоритетом сортируемыми элементами
•извлечь упорядоченные элементы
30.03.2013 |
40 |
