初学数据结构,一个顺序循环队列的小程序
SeqQueue.h
typedef struct SeqQueue
{
DataType queue[maxSize]; //定义一个队列数组
int front; //队头指示器
int rear; //队尾指示器
int count; //元素个数计数器
}SeqQueue;
/*初始化顺序队列*/
SeqQueue Initiate()
{
SeqQueue Q;
Q.count = 0;
Q.front = Q.rear = 0;
return Q;
}
/*判断队列非空否*/
int NotEmpty(SeqQueue *Q) //非空返回 1 为空返回 0
{
return (Q->count > 0);
}
/*取队头数据元素*/
DataType GetTop(SeqQueue *Q)
{
if(! NotEmpty(Q))
{
printf("队列为空,无法取得数据元素!");
return 0;
}
else
{
return Q->queue[Q->front];
}
}
/*入队列*/
void Append(DataType data,SeqQueue *Q)
{
if((Q->count > 0) && (Q->front == Q->rear))
{
printf("队列已满,无法插入!");
return;
}
else
{
Q->queue[Q->rear] = data;
Q->rear = (Q->rear+1) % maxSize;
Q->count++;
}
}
/*出队列*/
int Delete(SeqQueue *Q)
{
if(! NotEmpty(Q))
{
printf("队列为空队列!");
return 0;
}
else
{
Q->front = (Q->front++) % maxSize;
Q->count--;
return 1;
}
}
#include <stdio.h>
#include <stdlib.h>
typedef int DataType;
#define maxSize 6
#include "SeqQueue.h"
void main()
{
DataType data;
SeqQueue mySeqQueue = Initiate();
while(1)
{
printf("请输入要入栈的数据元素(输入 0 时结束输入):");
scanf("%d",&data);
if(data == 0)
{
break;
}
Append(data,&mySeqQueue);
}
if(NotEmpty(&mySeqQueue) == 0)
{
printf("堆栈为空!\n");
}
while(NotEmpty(&mySeqQueue) == 1)
{
printf(" %d ",GetTop(&mySeqQueue));
Delete(&mySeqQueue);
}
}