一.队列特点
先进先出的线性表。
允许在两端进行插入和删除的线性表。
一端负责插入数据(入队。使用 rear 队尾指针),另一端负责删除数据(出队。使用 front 队头指针)
二.队列示例代码
#include <stdio.h>
#include <stdlib.h>
#define MAX 6
typedef struct
{
int data[MAX]; //顺序队列。
int front; //队头指针。(出队时使用)
int rear; //队尾指针。(入队时使用)
}sequeue_t;
sequeue_t *create_empty_queue()
{
sequeue_t *sq = (sequeue_t *)malloc(sizeof(sequeue_t ));
sq->front = 0;
sq->rear = 0;
return sq;
}
int empty_queue(sequeue_t *s) //两指针指同一位置,称为对空。
{
return (s->front == s->rear) ;
}
int full_queue(sequeue_t *s) //为了区分 队空 与 队满,规定满队个数,要比数组个数少1.
{
return ((s->rear+1)%MAX == s->front);
}
int enter_queue(sequeue_t *s,int value) //入队
{
if(full_queue(s))
{
printf("full\n");
return -1;
}
s->data[s->rear++] = value ; //值入队。
s->rear = s->rear % MAX; //队尾指针 ++;
return 0;
}
int out_queue(sequeue_t *s)
{
if(empty_queue(s))
{
printf("empty_queue\n");
return -1;
}
int x = s->data[s->front++]; //值出队。
s->front = s->front % MAX; //队头指针 ++;
return x;
}
//测试函数。
int main()
{
sequeue_t *h = create_empty_queue();
enter_queue(h,1);
enter_queue(h,2);
enter_queue(h,3);
enter_queue(h,4);
enter_queue(h,5);
enter_queue(h,6);
printf("%d\n",out_queue(h)); //1
printf("%d\n",out_queue(h)); //2
enter_queue(h,6);
enter_queue(h,7);
printf("%d\n",out_queue(h)); //3
printf("%d\n",out_queue(h)); //4
printf("%d\n",out_queue(h)); //5
printf("%d\n",out_queue(h)); //6
printf("%d\n",out_queue(h)); //7
}