循环队列实现操作包括
/*初始化顺序队列*/
void QueueInitiate(QueueList* s);
/*队列是否为空*/
//如果为空返回0;否则返回1
int QueueNotEmpty(QueueList s);
/*入队列*/
//队列s插入数据x
//入队成功返回1,否则返回0
int QueueAppend(QueueList *s, DataType x);
/*出队列*/
//队列s删除数据元素并有x带回
//出队列成功返回1,否则返回0
int QueueDelete(QueueList* s, DataType* x);
/*取队头数据元素*/
//取队列当前队头元素并由x带回
//取元素成功返回1;否则返回0;
int QueueGet(QueueList s, DataType* x);
1.定义结构体
typedef int DataType;
typedef struct
{
DataType Queue[MaxSize];
int rear;
int front;
int count;
}QueueList;
2.循环队列初始化
/*初始化顺序队列*/
void QueueInitiate(QueueList* s)
{
s->count = 0;//定义计数器初始值
s->front = 0;//定义队头指针下标值
s->rear = 0;//定义队尾指针下标值
}
3.队列是否为空
/*队列是否为空*/
//如果为空返回0;否则返回1
int QueueNotEmpty(QueueList s)
{
if (s.count != 0)
return 1;
else
return 0;
}
4.入队列
/*入队列*/
//队列s插入数据x
//入队成功返回1,否则返回0
int QueueAppend(QueueList* s, DataType x)
{
if ((s->count > 0) && s->rear ==s->front)
{
printf("队列已满无法入队");
return 0;
}
else
{
s->Queue[s->rear] = x;
s->rear = (s->rear + 1) % MaxSize;
s->count++;
return 1;
}
}
5.出队列
/*出队列*/
//队列s删除数据元素并有x带回
//出队列成功返回1,否则返回0
int QueueDelete(QueueList* s, DataType* x)
{
if (s->count == 0)
{
printf("队列已空无法出队列");
return 0;
}
else
{
*x = s->Queue[s->front];
s->front = (s->front + 1) % MaxSize;
s->count--;
return 1;
}
}
6.取队头数据元素
/*取队头数据元素*/
//取队列当前队头元素并由x带回
//取元素成功返回1;否则返回0;
int QueueGet(QueueList s, DataType* x)
{
if (s.count == 0)
{
printf("队列已空,无法取当前队头元素");
return 0;
}
else
{
*x = s.Queue[s.front];
return 1;
}
}
代码测试如下
#include<stdio.h>
#include"Queuelist.h" //包含顺序队列头文件
#define MaxSize 6
int main()
{
QueueList queuelist;
int i, x;
QueueInitiate(&queuelist);
for (i = 0; i < MaxSize; i++)
{
QueueAppend(&queuelist, i + 1);
}
QueueGet(queuelist, &x);
printf("当前对头元素为 %d\n", x);
while (QueueNotEmpty(queuelist))
{
QueueDelete(&queuelist, &x);
printf("%d ", x);
}
}
代码运行结果如下