Элементарные структуры данных (2 октября 2013)
- Какие есть структуры
- Stack, Queue, Dequeue
- Список, двусвязный список
- BST, хеш-таблица, куча
- set, map
- Реализации через массив
- Стек: все просто [код]
- Пример: скобочные последовательности из 5 типов скобок [код]
- Очередь, дек: все просто, получили бонусы относительно стандартной реализации --- random access, цикличность [код]
- Если размер заранее не известен --- пишем через список (и стек, и очередь, и дек)
- Реализация списка, стека через список [код] [код]
- Удаление за O(1) из двусвязного списка (обратные ссылки)
- Тестирование скорости работы
- Очередь на C++ :
queue<int>
(просто медленная) [код]
- Очередь на Java 1.6 :
LinkedList<Integer>
(очень медленная, да еще кушает много памяти) [код]
- Реализация на массиве. Заметно быстрее. [cpp] [java]
- Хеш-таблица [код]
- Реализавали открытую адресацию
- Реализавали удаление для открытой адресации
- С++ : vector [код]
- Размер удвавивается
- clear() и resize(0) не освобождают память
- Реализован внутри также, как это делали мы
- Есть обращение
a[i]
, есть безопасное обращение a.at(i)
, а еще можно определить struct myVector : vector