3 семестр / Методические материалы / metodicheskie-ukazaniia-po-teme-19
.pdfvoid push(Queue |
*q, int val) |
{ |
|
/* |
q – |
указатель на |
структуру Queue. */ |
/* |
val |
– значение поля inf добавляемого элемента. */ |
|
...
q->beg = ...; /* Указатели на начало и конец очереди */ q->end = ...; /* доступны как поля структуры Queue. */
...
}
void pop(Queue *q) {
...
}
Вызов этих функций тоже упрощается:
Queue *queue; /* Указатель на очередь. */
queue = (Queue*) malloc(sizeof(Queue)); /* Выделение памяти. */ queue->beg = NULL; /* В начале очередь пуста - */
queue->end = NULL; /* - не содержит ни одного элемента. */
...
push(queue, 123); /* Добавление элемента 123. */
...
pop(queue); /* Удаление элемента. */
Функция добавления элемента
На основе приведенных выше схем и рассуждений составим тело функции push, которая добавляет элемент в конец (хвост) очереди. Функция push должна учитывать все возможные начальные условия:
void push(Queue *q, |
int val) { |
|
|||
Elem *p; |
/* |
Указатель |
на добавляемый |
элемент. */ |
|
p = (Elem*) malloc(sizeof(Elem)); /* Выделение памяти. */ |
|||||
p->inf = val; |
|
/* Заполнение поля inf. */ |
|||
p->link = NULL; |
/* Обнуление поля link. */ |
||||
if (q->end |
== NULL) { |
/* Если очередь |
пуста: */ |
||
q->beg |
= |
p; |
/* в ней появляется единственный элемент,*/ |
||
q->end |
= |
p; |
/* указатели на начало |
и конец совпадают.*/ |
|
}
else { /* Если очередь не пуста: */
q->end->link = p; /* связываем последний элемент с новым,*/ q->end = p; /* изменяем указатель на конец очереди.*/
}
}
Аналогично, при реализации функции pop удаления элемента из начала (головы) очереди, необходимо рассмотреть все возможные варианты начальных условий.
11
