顺序队列代码实现
#include <stdio.h>
#include <stdlib.h>
#include "./03_sequeue.h"
//创建新的循环队列
Sequeue* create_sequeue()
{
Sequeue* sq=(Sequeue*)malloc(sizeof(Sequeue));
if(NULL == sq)
{
printf("循环列表创建失败\n");
return NULL;
}
sq->rear=sq->front=0;
return sq;
}
//判满
int isFull_sequeue(Sequeue* sq)
{
return (sq->rear+1)%N == sq->front ? 1:0;
}
//入队
void get_sequeue(Sequeue* sq,datatype num)
{
//判断队列是否为满
if(isFull_sequeue(sq) == 1)
{
printf("队列为满入队失败\n");
return;
}
//向对位插入数据
sq->data[sq->rear]=num;
//更新队尾下标位置:
sq->rear=(sq->rear+1)%N;
return;
}
//判空
int isEmpt_sequeue(Sequeue* sq)
{
return sq->rear==sq->front? 1:0;
}
//出队
datatype out_sequeue(Sequeue* sq)
{
//判断队列是否为空
if(isEmpt_sequeue(sq) == 1)
{
printf("队列为空,出队失败\n");
return (datatype)-1;
}
//获取对头位置的数据
datatype num;
num=sq->data[sq->front];
//更新队头的下标
sq->front=(sq->front+1)%N;
return num;
}
//清空队列
void clean_sequeue(Sequeue* sq)
{
sq->rear = sq->front = 0; //只要让rear和front相等,且在数组的下标范围内
}
//计算队列长度
int len_sequeue(Sequeue* sq)
{
return (sq->rear-sq->front+N)%N;
}
//释放队列
void free_sequeue(Sequeue** psq)
{
//psq存储的是外部传入的sq的地址
//*psq代表访问sq的空间.
//
//清空队列
(*psq)->rear=(*psq)->front=0;
//释放堆空间
free(*psq);
(*psq)=NULL;
return;
}
//遍历
void show_sequeue(Sequeue* sq)
{
for(int i=sq->front;i!=sq->rear;i=(i+1)%N)
{
printf("%d ",sq->data[i]);
}
putchar(10);
return;
}