#include<stdio.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define QueueElementType int
#define MAX_SIZE 50
#define LEN sizeof(SeqQueue)
typedef struct
{
QueueElementType element[MAX_SIZE];
int front;
int rear;
int tag;
}SeqQueue;
int InitQueue(SeqQueue **Q);
int EnterQueue(SeqQueue *Q, QueueElementType x);
int DeleteQueue(SeqQueue *Q, QueueElementType *x);
int IsEmpty(SeqQueue *Q);
int IsFull(SeqQueue *Q);
int GetHead(SeqQueue *Q, QueueElementType *x);
int ClearQueue(SeqQueue *Q);
int DestroyQueue(SeqQueue *Q);
int main()
{
int i;
QueueElementType data;
SeqQueue *Q = NULL;
InitQueue(&Q);
for(i = 0; i < MAX_SIZE; i++)
{
EnterQueue(Q, i);
}
for(i = 0; i < MAX_SIZE; i++)
{
DeleteQueue(Q, &data);
printf("%6d ",data);
if((i + 1) % 10 == 0)
putchar('\n');
}
return 0;
}
//初始化操作
int InitQueue(SeqQueue **Q)
{
SeqQueue *p = NULL;
*Q = (SeqQueue*)malloc(LEN);
p = *Q;
p->front = p->rear = 0;
p->tag = 0;
if(p->element == NULL || p->tag != 0)
return (FALSE);
return (TRUE);
}
//入队操作
int EnterQueue(SeqQueue *Q, QueueElementType x)
{
if (IsFull(Q) == TRUE)
return (FALSE);
Q->element[Q->rear] = x;
Q->rear = (Q->rear + 1) % MAX_SIZE;
if(Q->front == Q->rear)
Q->tag = 1; //标记队列非空
return (TRUE);
}
//出队操作
int DeleteQueue(SeqQueue *Q, QueueElementType *x)
{
if (IsEmpty(Q) == TRUE)
return (FALSE);
*x = Q->element[Q->front];
Q->front = (Q->front + 1) % MAX_SIZE;
if(Q->front == Q->rear)
Q->tag = 0; //标记队列已空
return (TRUE);
}
//判空操作
int IsEmpty(SeqQueue *Q)
{
return (Q->front == Q->rear && Q->tag == 0? TRUE:FALSE);
}
//判满操作
int IsFull(SeqQueue *Q)
{
return (Q->front == Q->rear && Q->tag == 1? TRUE:FALSE);
}
//取队首元素
int GetHead(SeqQueue *Q, QueueElementType *x)
{
if (IsEmpty(Q) == TRUE)
return (FALSE);
else
{
*x = Q->element[Q->front];
return (TRUE);
}
}
//清空队列
int ClearQueue(SeqQueue *Q)
{
Q->front = Q->rear = 0;
Q->tag = 0;
if(IsEmpty(Q) == FALSE)
return (FALSE);
else
return (TRUE);
}
//销毁队列
int DestroyQueue(SeqQueue *Q)
{
if(ClearQueue(Q) == FALSE)
return (FALSE);
else
{
free(Q->element);
return (TRUE);
}
}
循环队列(有标志符)
最新推荐文章于 2022-04-19 23:00:21 发布