
polevoy_cpp_2012_spring_lecture_11
.pdf
Уничтожение списка |
|
pHead |
|
pD |
0 |
while (0 != pHead)
{
pD = pHead;
pHead = pHead->m_pNext; delete pD;
}
21.04.2012 |
cppNewb.ru |
21 |

Кольцевой список
• циклический (замкнутый) список
pHead
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21.04.2012 |
|
|
|
cppNewb.ru |
22 |

Плюсы списков
•простое динамическое добавление и удаление элементов
•размер ограничен только объёмом
памяти и разрядностью указателей
•элементы не перемещаются в памяти
21.04.2012 |
cppNewb.ru |
23 |

Минусы списков
•накладные расходы памяти на связи
•“ долгое” обращение к элементу по индексу
•“долгое” выделение узла
•элементы списка могут быть расположены в памяти разреженно (фрагментация памяти, плохо кэшируется)
21.04.2012 |
cppNewb.ru |
24 |

АТД “cтек”
•динамическая структура данных
•упорядоченный набор элементов
•LIFO (Last In First Out) – добавление и
удаление элементов с одного конца,
называемого вершиной стека
21.04.2012 |
cppNewb.ru |
25 |

Стек (схема работы)
вершина push
getTop
pop
21.04.2012 |
cppNewb.ru |
26 |

Стек – операции
•создание
•уничтожение
•добавление элемента
•удаление элемента
•получение значение верхнего элемента
21.04.2012 |
cppNewb.ru |
27 |

Стек (интерфейс класса)
Stack()
Stack(const Stack& obj) ~Stack()
Stack& operator=(const Stack& rhs) void push(const T& obj)
void pop()
bool isEmpty() const T& getTop()
const T& getTop() const
или
T getTop()
21.04.2012 |
cppNewb.ru |
28 |

Стек – реализация
•динамически массив
•линейный список
21.04.2012 |
cppNewb.ru |
29 |

Стек (динамический массив)
вершина
T& getTop()
{
size_t i(size(s.arr) - 1); assert(i >= 0);
return m_data.at(i);
}
21.04.2012 |
cppNewb.ru |
30 |