一:队列
1:先进先出
注释:在队尾插入,队头出队
2:逻辑结构:线性结构
3:存储结构:顺序结构
二:头文件
#ifndef _SEQUEUE_H__
#define _SEQUEUE_H__
#include <stdio.h>
#include <stdlib.h>
#define N 5
typedef int datatype;
typedef struct
{
datatype data[N];//循环队列的数组
int rear;//存数据端 rear 后面
int front;//取数据端 front 前面
}sequeue_t;
//1.创建一个空的队列
sequeue_t *CreateEmptySequeue();
//2.入列 data代表入列的数据
int InSequeue(sequeue_t *p,datatype data);
//3.判断队列是否为满
int IsFullSequeue(sequeue_t *p);
//4.判断队列是否为空
int IsEmptySequeue(sequeue_t *p);
//5.出列
datatype OutSequeue(sequeue_t *p);
//6.求队列的长度
int LengthSequeue(sequeue_t *p);
//7.清空队列函数
void ClearSequeue(sequeue_t *p);
#endif
三:代码实现
#include"sequeue.h"
//1.创建一个空的队列
sequeue_t *CreateEmptySequeue()
{
//开辟堆区空间
sequeue_t *p=(sequeue_t *)malloc(sizeof(sequeue_t));
if(p==NULL)
{
perror("开辟失败");
return NULL;
}
//初始化
p->rear=0;
p->front=0;
return p;
}
//2.入列 data代表入列的数据
int InSequeue(sequeue_t *p,datatype data)
{
//判满
if( IsFullSequeue(p))
{
perror("队满");
return -1;
}
//将数据入列,然后在移动队尾
p->data[p->rear]=data;
p->rear=(p->rear+1)%N;
return 0;
}
//3.判断队列是否为满
int IsFullSequeue(sequeue_t *p)
{
return (p->rear+1)%N==p->front;
}
//4.判断队列是否为空
int IsEmptySequeue(sequeue_t *p)
{
return p->front==p->rear==0;
}
//5.出列
datatype OutSequeue(sequeue_t *p)
{
//判空
if(IsEmptySequeue(p))
{
perror("栈空");
return -1;
}
//定义中间值存放数据
int temp=p->data[p->front];
p->front=(p->front+1)%N;
return temp;
}
//6.求队列的长度
int LengthSequeue(sequeue_t *p)
{
if(p->rear>=p->front)
return p->rear-p->front;
else
return p->rear-p->front+N;
}
//7.清空队列函数
void ClearSequeue(sequeue_t *p)
{
p->rear=p->front=0;
}