1,循环顺序队列
头文件
#ifndef __SEQUEUE_H__
#define __SEQUEUE_H__
#define MAX 8
typedef int datatype;
typedef struct
{
datatype data[MAX];
int front; //记录对头下标
int tail; //记录队尾
}seQueue;
//创建
seQueue *queue_create();
//判空
int queue_empty(seQueue *Q);
//判满
int queue_full(seQueue *Q);
//入队
void queue_push(seQueue *Q, datatype e);
//遍历
void queue_show(seQueue *Q);
//出队
void queue_pop(seQueue *Q);
//队列大小
int queue_size(seQueue *Q);
//销毁
void queue_free(seQueue *Q);
#endif
源文件
#include"sequeue.h"
#include<stdio.h>
#include<stdlib.h>
//创建函数
seQueue *queue_create()
{
//创建队列空间并判断
seQueue *Q=(seQueue *)malloc(sizeof(seQueue));
if(NULL==Q)
{
printf("创建失败!\n");
return NULL;
}
//初始化
Q->front=Q->tail=0;
printf("创建成功!\n");
return Q;
}
//判空
int queue_empty(seQueue *Q)
{
return Q->front==Q->tail;
}
//判满
int queue_full(seQueue *Q)
{
return (Q->tail+1)%MAX==Q->front;
}
//入队
void queue_push(seQueue *Q, datatype e)
{
//判断逻辑
if(NULL==Q||queue_full(Q))
{
printf("所提供的队列非法!\n");
return;
}
//数据入队
Q->data[Q->tail]=e;
//指针后移
Q->tail=(Q->tail+1)%MAX;
printf("入队成功!\n");
}
//遍历函数
void queue_show(seQueue *Q)
{
if(NULL==Q||queue_empty(Q))
{
printf("遍历失败!\n");
return;
}
printf("从对头到队尾元素分别为:\n");
for(int i=Q->front;i!=Q->tail;i=(i+1)%MAX)
{
printf("%d\t",Q->data[i]);
}
printf("\n");
}
//出队
void queue_pop(seQueue *Q)
{
//判断逻辑
if(NULL==Q||queue_empty(Q))
{
printf("出队失败!\n");
return;
}
//
datatype value=Q->data[Q->front];
//队头后移
Q->front=(Q->front+1)%MAX;
printf("出队成功!\n");
}
//队列大小
int queue_size(seQueue *Q)
{
return (Q->tail+MAX-Q->front)%MAX;
}
//销毁函数
void queue_free(seQueue *Q)
{
if(Q!=NULL)
{
free(Q);
Q=NULL;
}
printf("销毁成功!\n");
}
测试文件
#include"sequeue.h"
#include<stdio.h>
#include<stdlib.h>
int main(int argc, const char *argv[])
{
//调用创建函数并判断
seQueue *Q=queue_create();
if(NULL==Q)
{
printf("创建失败!\n");
return -1;
}
//调用入队函数入队
queue_push(Q,2);
queue_push(Q,4);
queue_push(Q,6);
queue_push(Q,8);
queue_push(Q,9);
//调用遍历函数
queue_show(Q);
//调用出队函数
queue_pop(Q);
queue_pop(Q);
//调用遍历函数
queue_show(Q);
//打印队列大小
printf("当前队列长度为%d\n",queue_size(Q));
//调用销毁函数
queue_free(Q);
free(Q);
Q=NULL;
return 0;
}
运行结果
创建成功!
入队成功!
入队成功!
入队成功!
入队成功!
入队成功!
从对头到队尾元素分别为:
2 4 6 8 9
出队成功!
出队成功!
从对头到队尾元素分别为:
6 8 9
当前队列长度为3
销毁成功!