一、背景介绍
队列概念:列是限制在两端进行插入操作和删除操作的线性表,允许进行存入操作的一端称为“队尾”,允许进行删除操作的一端称为“队头”。当线性表中没有元素时,称为“空队”。
特点 :先进先出(FIFO)。
二、队列的顺序存储结构
typedef int datatype ; /*定义队列中数据元素的数据类型*/
#define MAXSIZE 64 /*定义队列的容量*/
typedef struct
{ datatype data[MAXSIZE] ; /*用数组作为队列的储存空间*/
int front,rear ; /*指示队头位置和队尾位置的变量*/
} sequeue ; /*顺序队列类型定义*/
sequeue *sq ; /*定义指向顺序队列的指针*/
三、相关函数实现
1.初始化队列
void init_seqqueue(seq_pqueue *Q)
{
*Q=(seq_pqueue)malloc(sizeof(seq_queue));
if((*Q)==NULL)
{
perror("malloc");
exit(-1);
}
(*Q)->front=(*Q)->rear=MAXSIZE-1;
return;
}
2.判断队列是否满
bool is_full_seqqueue(seq_pqueue q)
{
if((q->rear+1)%MAXSIZE == q->front)
return true;
else
return false;
}
3.判断是否为空
bool is_empty_seqqueue(seq_pqueue q)
{
if(q->rear == q->front)
return true;
else
return false;
}
4.入队
bool in_seqqueue(datatype data,seq_pqueue q)
{
//判断队列是否满
if(is_full_seqqueue(q)){
printf("队列已满!\n");
return false;
}
//入对
q->rear=(q->rear+1)%MAXSIZE;
q->data[q->rear]=data;
return true;
}
5.出队
bool out_seqqueue(seq_pqueue q,datatype *D)
{
//判断队列是否空
if(is_empty_seqqueue(q)){
printf("队列已空!\n");
return false;
}
//出队
q->front=(q->front+1)%MAXSIZE;
*D=q->data[q->front];
return true;
}
6.遍历输出
void show_seqqueue(seq_pqueue q)
{
int i;
if(is_empty_seqqueue(q))
return;
//非空时,从对头打印到队尾
for(i=(q->front+1)%MAXSIZE;i!=(q->rear+1)%MAXSIZE;i=(i+1)%MAXSIZE)
{
printf("%d\t",q->data[i]);
}
printf("\n");
}