Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

3 семестр / Методические материалы / metodicheskie-ukazaniia-po-teme-19

.pdf
Скачиваний:
1
Добавлен:
20.05.2025
Размер:
604.93 Кб
Скачать

void 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