 
        
        лекции программирование / 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 | 
