#include<stdio.h>
#define MaxQueueSize 100
typedef int DataType;
//定义顺序循环队列的结构体
typedef struct{
DataType queue[MaxQueueSize];
//队尾指针
int rear;
//对头指针
int front;
//计数器
int count;
}SeqCQueue;
//初始化顺序循环队列Q
void QueueInitiate(SeqCQueue *Q){
//定义初始化队尾指针下标值
Q->rear = 0;
//定义初始化对头指针下标值
Q->front = 0;
//定义初始计数器值
Q->count = 0;
}
//非空否(判断顺序循环队列Q非空否)
int QueueNotEmpty(SeqCQueue Q){
if(Q.count != 0){
//若非空则返回1
return 1;
}
else{
//非空返回0
return 0;
}
}
//入队列(把x插入顺序循环队列Q的队尾)
int QueueAppend(SeqCQueue *Q,DataType x){
//判断顺序循环队列Q是否已满
if(Q->count > 0 && Q->rear == Q->front){
printf("队列已满无法插入!\n");
//已满,返回0
return 0;
}
//若未满
else{
//元素值x插入队尾
Q->queue[Q->rear] = x;
//队尾指针加1 (此处采用取余的方式加一)
Q->rear = (Q->rear +1)%MaxQueueSize;
//计数器加1
Q->count++;
//插入成功,返回1
return 1;
}
}
//出队列,也叫删除(删除顺序循环队列Q的对头元素并赋值给d)
int QueueDelete(SeqCQueue *Q,DataType *d){
//判断顺序循环队列Q是否已空
if(Q->count == 0){
printf("队列已空无数据元素出队列!\n");
//若为空,返回0
return 0;
}
//若不为空
else{
//取出对头元素存入d中
*d = Q->queue[Q->front];
//对头指针加1 (取出一个元素后,头指针指向的就是一个空值,故将头指针加一,使其指向不为空值)
Q->front = (Q->front + 1)% MaxQueueSize;
//计数器减一
Q->count--;
//取出成功,返回1
return 1;
}
}
//取对头元素(取顺序循环队列Q的当前对头元素并赋值给d)
int QueueGet(SeqCQueue Q,DataType *d){
//判断顺序循环队列Q是否为空
if(Q.count == 0){
printf("队列已空无数据元素可取!\n");
//若为空,返回0
return 0;
}
//若不为空
else{
//将对头元素值赋值给d
*d = Q.queue[Q.front];
//取得成功,返回1
return 1;
}
}
顺序循环队列的实现(C语言)
最新推荐文章于 2023-04-12 21:55:21 发布