队列(queue)
顺序队列(循环队列)和链式队列
- 概念:
只允许在两端进行插入和删除操作的线性表,在队尾插入,在队头删除
2.特点:
先入先出,后入后出
FIFO LILO
顺序队列
1)逻辑结构:线性结构
2)存储结构:顺序存储
3)操作:增删改查
函数体:
typedef struct
{
int data[N];
int rear;//存数据端 rear
int front;//取数据端 front
}sequeue_t;
头文件:
"[code=C]"
#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
函数:
"[code=C]"
#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()
{
sequeue_t *p=(sequeue_t *)malloc(sizeof(sequeue_t));
if(p==NULL)
{
perror("p malloc err");
return NULL;
}
p->front=0;
p->rear=0;
return p;
}
//2.入列 data代表入列的数据
int InSequeue(sequeue_t *p,datatype data)
{
if (IsFullSequeue(p))
{
printf("InSequeue err");
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;
}
//5.出列
datatype OutSequeue(sequeue_t *p)
{
if(IsEmptySequeue(p))
{
printf("IsEmptySequeue err");
return -1;
}
int a=p->data[p->front];
p->front=(p->front+1)%N;
return a;
}
//6.求队列的长度
int LengthSequeue(sequeue_t *p)
{
int len=0;
if(p->rear>=p->front)
len=(p->rear%N)-(p->front%N);
else{
len=(p->rear%N)-(p->front%N)+N;
}
return len;
//return ((p->rear-p->front+N)%N);
}
//7.清空队列函数
void ClearSequeue(sequeue_t *p)
{
return p->rear=p->front;
}
int main(int argc, char const *argv[])
{
sequeue_t *p=CreateEmptySequeue();
for (int i=0;i<4;i++)
InSequeue(p,i);
printf("长度为%d\n", LengthSequeue(p));
printf("%d\n", OutSequeue(p));
printf("%d\n", OutSequeue(p));
printf("长度为%d\n", LengthSequeue(p));
InSequeue(p,9);
InSequeue(p,8);
printf("%d\n", OutSequeue(p));
printf("%d\n", OutSequeue(p));
printf("%d\n", OutSequeue(p));
printf("长度为%d\n", LengthSequeue(p));
ClearSequeue(p);
printf("长度为%d\n", LengthSequeue(p));
printf("%d\n", OutSequeue(p));
return 0;
}