Содержание
- 2. План лекции Двухсвязный список Циклический список
- 3. Двухсвязные списки
- 4. Двухсвязные списки Двухсвязный список – это динамический список, в котором каждый узел содержит две ссылки. Каждый
- 5. Двухсвязные списки Узел представляет собой структуру, которая содержит поля данные и 2 указателя на следующий и
- 6. struct Node { Тип1 поле1; Тип2 поле2; ….. Node *next; Node *prev; }; Node * PNode;
- 7. struct Node { string word; Node *next; Node *prev; }; typedef Node *PNode; PNode Head =
- 8. Двухсвязные списки. Операции Операции над двухсвязными списками: Создание нового узла. Добавление узла: В начало списка В
- 9. Создание нового узла Для того, чтобы добавить узел к списку, необходимо создать его, то есть выделить
- 10. Добавление узла в начало списка При добавлении нового узла NewNode в начало списка надо: установить ссылку
- 11. Добавление узла в начало списка По такой схеме работает функция AddFirst. Важно, что здесь и далее
- 12. Добавление узла в конец списка Благодаря симметрии добавление нового узла NewNode в конец списка проходит совершенно
- 13. Добавление узла в конец списка По такой схеме работает функция AddLast. void AddFirst (PNode &Head, PNode
- 14. Добавление узла после заданного Дан адрес NewNode нового узла и адрес p одного из существующих узлов
- 15. Добавление узла после заданного По такой схеме работает функция AddAfter. Передавать будем адрес узла после которого,
- 16. Добавление узла перед заданным Добавление узла перед заданным выполняется аналогично, как и после заданного, и является
- 17. Добавление узла перед заданного По такой схеме работает функция AddBefore. Передавать будем адрес узла перед которого,
- 18. Проход по списку PNode p = Head; while ( p != NULL ) { p =
- 19. Удаление узла Эта процедура также требует ссылки на голову и хвост списка, поскольку они могут измениться
- 20. Рассмотрим крайний случай – если удаляемый элемент OldNode является первым!! 2) Проверяем , это был единственный
- 21. Удаление узла void DeleteNode(PNode &Head, PNode &Tail, PNode OldNode) { if (Head == OldNode) { Head
- 22. Поиск узла в списке Часто требуется найти в списке нужный элемент (его адрес или данные). Надо
- 23. Поиск узла в списке PNode Find (PNode Head, string NewWord) { PNode q = Head; while
- 24. Поиск узла по порядку в списке Вернемся к задаче построения алфавитного словаря. Для того, чтобы добавить
- 25. Поиск узла по порядку в списке 1) начать с головы списка; 2) пока текущий элемент существует
- 26. Поиск узла по порядку в списке PNode FindPlace (PNode Head, string NewWord) { PNode q =
- 27. Пример программы на двухсвязный линейный список
- 28. #include #include using namespace std; // описание динамической структуры struct Node { string word; int count;
- 29. Пример (продолжение) int main() { PNode Head = NULL, Tail = NULL; PNode pnew, pfind; int
- 30. Пример (продолжение) case 1 : cout cin>>newslovo; pnew=CreateNode(newslovo); // создаем новый узел if (Head==NULL) AddFirst (Head,
- 31. Циклические списки
- 32. Циклические списки Иногда список (односвязный или двусвязный) замыкают в кольцо, то есть указатель next последнего элемента
- 33. Циклический список Замкнутый (кольцевой, циклический) список — головной и хвостовой элементы которого указывают друг на друга.
- 34. Спасибо за внимание!
- 36. Скачать презентацию