
- •Типы данных, определяемые пользователем Оператор typedef
- •Перечислимые типы
- •Перечислимые типы
- •Структуры
- •Структуры
- •Структуры
- •Структуры
- •Инициализация структур
- •Присваивание структур
- •Доступ к элементам структур
- •Указатели на структуры
- •Указатели на структуры
- •Структуры как параметры
- •Битовые поля
- •Объединения
- •Объединения
- •Связанные динамические данные
- •Связанные динамические данные
- •Организация взаимосвязей в связанных динамических данных
- •Организация взаимосвязей в связанных динамических данных
- •Работа с очередью
- •Работа с очередью
- •Работа с очередью
- •Работа с очередью
- •Добавление элемента в очередь
- •Добавление элемента в очередь
- •Добавление элемента в очередь
- •Удаление элемента из очереди
- •Удаление элемента из очереди
- •Удаление элемента из очереди
- •Пример создания очереди
- •Пример создания очереди
- •Пример создания очереди
- •Пример создания очереди
- •Работа со стеком
- •Работа со стеком
- •Работа со стеком
- •Добавление элемента в стек
- •Добавление элемента в стек
- •Добавление элемента в стек
- •Добавление элемента в стек
- •Удаление элемента стека
- •Удаление элемента стека
- •Удаление элемента стека
- •Пример создания стека

Работа с очередью
Для создания очереди и работы с ней необходимо иметь как минимум два указателя:
•на начало очереди (идентификатор BegQ),
•на конец очереди (идентификатор EndQ)
Кроме того, для освобождения памяти удаляемых элементов требуется дополнительный временный указатель Р.
Создание очереди
1. Исходное состояние:
BegQ |
|
EndQ |
P |
|||||||
NULL |
|
|
|
NULL |
|
|
|
? |
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
? 21

Работа с очередью
2. Выделение памяти под первый элемент очереди:
P
BegQ EndQ
NULL NULL
info ?
next ?
?
22

Работа с очередью
3. Занесение информации в первый элемент очереди:
P
BegQ EndQ
NULL NULL
info |
3 |
|
|
|
|
|
|
|
|
next |
NULL |
|
|
|
|
|
|||
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
23

Работа с очередью
4. Установка указателей BegQ и EndQ на созданный первый элемент:
BegQ EndQ P
info 3 next NULL
24

Добавление элемента в очередь
1. Исходное состояние:
BegQ |
|
EndQ |
|
P |
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
|
|
4 |
|
|
|
3 |
? |
|
|
NULL
25

Добавление элемента в очередь
2. Выделение памяти под новый элемент и занесение в него информации:
BegQ |
|
EndQ |
|
P |
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
4 |
3 |
5 |
NULL NULL
26

Добавление элемента в очередь
3. Установка связи между последним элементом очереди и новым, а также перемещение указателя конца очереди EndQ на новый элемент:
BegQ |
|
EndQ |
|
|
P |
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
4 |
3 |
5 |
NULL
27

Удаление элемента из очереди
1. Исходное состояние: |
|
|
BegQ |
P |
EndQ |
|
?
2 |
4 |
3 |
5 |
NULL
28

Удаление элемента из очереди
2. Извлечение информации из удаляемого элемента в переменную Val и установка на него вспомогательного указателя Р:
|
|
|
BegQ |
|
|
|
P |
|
|
|
|
|
|
|
|
|
EndQ |
|
|
|||||||||||||
Val |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
2 |
|
|
|
|
|
4 |
|
|
|
|
3 |
|
|
|
|
|
5 |
|
|
|
|
|
|
|
|
|||
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
NULL |
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
29

Удаление элемента из очереди
3. Перестановка указателя начала очереди BegQ на следующий элемент, используя значение поля next, которое хранится в первом элементе. После этого освобождается память начального элемента очереди, используя дополнительный указатель Р:
|
|
P |
|
|
|
BegQ |
|
|
|
|
|
|
|
|
|
EndQ |
|||||
Val |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
2 |
|
|
|
|
4 |
|
|
|
|
3 |
|
|
|
|
|
5 |
|||
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
NULL |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
30