140
/*Зарезервировать память для нового узла; поместить
введеное имя в его поле info и вставить новый узел перед
тем, на который показывает указатель np.*/
if ((newnode=malloc(sizeof(struct NODE)))!=0)
{
strncpy(newnode->data, name, NAME_SIZE);
newnode->succ=np;
newnode->pred=np->pred;
/*Изменить прямой указатель в узле, предшествующем
вставленному (теперь он должен показывать на вставленный
узел) и изменить обратный указатель в узле, следующем за
вставленным.*/
(newnode->pred)->succ=newnode;
np->pred=newnode;
}
return (newnode);
}
§3.6. Очереди
Очередью называется упорядоченный набор элементов, которые могут
удаляться с её начала и помещаться в её конец (см. рис. 3.6.1). Очередь
организована в отличие от стека по принципу FIFO (first input — first output,
первым вошел — первым вышел).
Для очереди определены три простейшие операции:
• insert (q, x) — помещает элемент x в конец очереди q, где q —
указатель на очередь;
• x=remove (q) — удаляет элемент x из очереди q;
• empty(q) — возвращает true (1) или false (0) в зависимости от того,
является ли очередь пустой или нет.
Реализация очереди на базе массива
Рассмотрим реализацию очереди на базе массива. Используем, например,
массив и две переменные frnt и rear, которые запоминают позиции первого и
последнего элементов. Изначально frnt=1 и rear=0. Очередь пуста, если rear<frnt.
Число элементов в очереди rear-frnt+1
.