Очередь - структура данных, в которой элемент всегда добавляется с одного края и удаляется с другого.
Край, в котором выполняется включение, называется концом или хвостом очереди.
Очередь называют списком FIFO (First in, First out) первым пришел - первым ушел.
Операции:
1) записи в очередь
2) удаление из очереди
Для работы с очередью потребуются указатели - на начало очереди – pbeg, и на конец очереди – pend.
#include <stdio.h>
#include <alloc.h>
struct el {
int d;
struct el * next;} *p,*q,*r,*top,*bottom;
struct el* first(int d){
struct el *q;
q=(struct el *)malloc(sizeof(struct el));
q->d=d;
q->next=NULL;
return q;}
void inqu(struct el ** bottom, int d){
struct el *q;
q=(struct el *)malloc(sizeof(struct el));
q->d=d;
q->next=NULL;
(*bottom)->next=q;
*bottom=q;
};
void inqu1(struct el ** bottom, struct el **top,int d){
struct el *q;
q=(struct el *)malloc(sizeof(struct el));
q->d=d;
q->next=NULL;
if (*bottom==NULL)
*top=q;
*bottom=q;
};
int outqu(struct el ** top,int *d){
struct el *q;
if(*top!=NULL){
q=*top;
*d=q->d;
*top=q->next;
free(q);
return 1;}
else return 0;
};
void printel(struct el * p){
while (p!=NULL){
printf("\n%d",p->d);
p=p->next;}
}
void main(){
int i,k;
top=first(7);
bottom=top;
for(i=1;i<6;i++)
inqu(&bottom,i);
printel(top);
while(1){
k=outqu(&top,&i);
if(!k) break;
printf("%d \n",i);
}
}
Двунаправленный линейный список.
Каждый элемент двунаправленного списка содержит две ссылки: на следующий элемент и предыдущий. Двунаправленный список может быть просмотрен в любом направлении.
Для работы с такими списками удобно иметь 2 указателя: на начало и конец списка.
Элемент списка можно описать так
struct els {
int d;
els * next;
els * prev; };
Для работы с таким списком можно разработать следующие функции:
- создание списка (создание первого элемента списка)