Содержание
- 2. Списки Список — структура данных, представляющая собой конечную последовательность связанных элементов. Элемент списка: Семинар 10. Стеки,
- 3. Односвязные списки Односвязный список — список, у элементов которого существует связь, указывающая на следующий элемент (односторонняя
- 4. Односвязные списки struct list { int data; struct list *next; }; struct list *head = NULL,
- 5. Циклические списки Циклический список — список, в котором связь указывает на первый или один из других
- 6. Двусвязные списки Двусвязный список — список, элементы которого имеют по две связи, указывающие на предыдущий и
- 7. Двусвязные списки struct List { int data; struct list *prev; struct list *next; }; Семинар 10.
- 8. Иерархические списки Иерархический список — список, значениями элементов которого являются указатели на другие списки (подсписки). Семинар
- 9. Операции над линейными списками 1. Получить доступ к некоторому элементу списка, проанализировать и / или изменить
- 10. Операции над линейными списками Не все операции нужны одновременно. Будем различать типы линейных списков по набору
- 11. Стек Стек (от англ. stack — штабель, стопка) — линейный список, в котором все вставки, удаления
- 12. Очередь Очередь (англ. queue) — это линейный список, в котором все вставки производятся на одном конце,
- 13. Дек Дек (от англ. deque — double-ended queue — двусторонняя очередь) — это линейный список, в
- 14. Стеки Push-down список Реверсивная память Гнездовая память Магазин LIFO: last in first out Список йо-йо Семинар
- 15. Операции со стеками 1. Опустошение. 2. Создание. 3. Получение значения вершины без удаления. 4. Получение значения
- 16. Реализация стека на Си struct list { int data; struct list *next; }; typedef struct stack
- 17. Опустошение стека void makenull(Stack *S) { struct list *p; while (S -> top) { p =
- 18. Создание стека Stack *create() { Stack *S; S = (Stack *) malloc(sizeof(Stack)); S -> top =
- 19. Получение значения вершины без удаления int top(Stack *S) { if (S -> top) return (S ->
- 20. Получение значения вершины c удалением int pop(Stack *S) { int a; struct list *p; p =
- 21. Добавление нового элемента void push(int a, Stack *S) { struct list *p; p = (struct list
- 22. Проверка пустоты int empty(Stack *S) { return (S -> top == NULL); } Семинар 10. Стеки,
- 23. Виды записи выражений Префиксная: операция перед операндами. Инфиксная (скобочная): операция между операндами. Постфиксная (обратная польская): операция
- 24. Виды записи выражений a + (f – b * c / (z – x) + y)
- 25. Перевод из инфиксной формы в постфиксную Вход: строка, содержащая арифметическое выражение, записанное в инфиксной форме. Выход:
- 26. Перевод из инфиксной формы в постфиксную Алгоритм: Шаг 0: Взять первый элемент из входной строки и
- 27. Пример Входная строка: a + ( f – b * c / ( z – x
- 28. Вычисления на стеке Вход: строка, содержащая выражение, записанное в постфиксной форме. Выход: число — значение заданного
- 29. Пример Входная строка: 5 2 3 * 4 2 / − 4 / + 1 −
- 30. Очереди FIFO: first in first out Семинар 10. Стеки, очереди, деки
- 31. Операции с очередями 1. Опустошение. 2. Создание. 3. Получение значения начала без удаления. 4. Получение значения
- 32. Реализация очереди на Си struct list { int data; struct list *next; }; typedef struct queue
- 33. Опустошение очереди void makenull(Queue *Q) { struct list *p; while (Q -> first) { p =
- 34. Создание очереди Queue *create() { Queue *Q; Q = (Queue *) malloc(sizeof(Queue)); Q -> first =
- 35. Получение значения начала без удаления int first(Queue *Q) { if (Q -> first) return (Q ->
- 36. Получение значения начала c удалением int outqueue(Queue *Q) { int a; struct list *p; p =
- 37. Добавление нового элемента void inqueue(int a, Queue *Q) { struct list *p; p = (struct list
- 39. Скачать презентацию