Опашката е структура от данни, при която достъпът до елементи е също ограничен като при стека. Тук действа обаче правилото FIFO (first in, fisrt out – от англ. – „първият влязъл пръв излиза“), според което елементът, който най-дълго време е в опашката (е най-рано добавен), се обработва пръв. Добавянето на елементи става само от края на опашката, а премахването – от началото. Може да си представите опашката като кутия за тенис топки, която е отворена от двете страни, но ви позволява да слагате топки само от едната страна и да ги вадите само от другата страна.
Сега ще разгледаме една примерна реализация на опашка в C. С макроса MAX дефинираме максималния брой на елементи, които може да побере опашката. Самата опашка е записала във структурата Queue, която е обособена като тип с помощта на typedef. Функцията offer добавя елемент в края на опашката. Функцията peek връща елемента, който се намира в началото на опашката, без да го премахва. Функцията poll взима елемента, който се намира в началото на опашката, като го връща като резултат и го премахва от списъка.
#include
#define MAX 100
typedef struct {
int front;
int rear;
int elements[MAX];
int empty;
} Queue;
void offer(Queue *q, int x);
int peek(Queue *q);
int poll(Queue *q);
int isEmpty(Queue *q);
int main()
{
Queue q;
q.front = 0;
q.rear = 0;
q.empty = 1;
….
return 0;
}
void offer(Queue *q, int x)
{
if ((q->front == q->rear) && !q->empty) {
return;
}
q->elements[q->rear++] = x;
if(q->rear >= MAX)
q->rear = 0;
q->empty = 0;
}
int poll(Queue *q)
{
int x;
if (q->empty) {
return -1;
}
x = q->elements[q->front++];
if (q->front >= MAX)
q->front = 0;
if (q->front == q->rear)
q->empty = 1;
return x;
}
int peek(Queue *q)
{
int x;
if (q->empty) {
return -1;
}
x = q->elements[q->front + 1];
if (q->front >= MAX)
q->front = 0;
if (q->front == q->rear)
q->empty = 1;
return x;
}
int isEmpty(Queue *q)
{
return q->empty;
}