#include<stdio.h>
#define QUEUESIZE 60
typedef char DataType;
typedef struct Squeue
{
DataType queue[QUEUESIZE];
int front, rear;
int tag; //队列空满的标志
}SCQueue;
/*顺序循环队列初始化*/
void InitQueue(SCQueue *SCQ)
{
SCQ->front = SCQ->rear = 0;
SCQ->tag = 0;
}
/*判断队列是否为空*/
int QueueEmpty(SCQueue SCQ)
{
if (SCQ.front == SCQ.rear && SCQ.tag==0)
/*队头队尾指针都为0且标志位为0,表示队列已空*/
return 1;
else
return 0;
}
/*入队操作*/
int EnQueue(SCQueue *SCQ, DataType e)
{
if (SCQ->rear == SCQ->front && SCQ->tag == 1)
/*入队之前,判断队尾指针是否达到数组的最大值,即是否上溢*/
{
printf("顺序队列已满,不能入队!");
return 0;
}
else
{
SCQ->queue[SCQ->rear] = e; //在队尾插入元素e
SCQ->rear = SCQ->rear + 1; //队尾指针向后移动一个单位
SCQ->tag = 1; //入队成功,标志位为1
return 1;
}
}
/*出队操作*/
int DeQueue(SCQueue *SCQ, DataType *e)
{
if (QueueEmpty(*SCQ))
{
printf("顺序队列已空,不能出队!");
return 0;
}
else
{
*e = SCQ->queue[SCQ->front]; //将要删除的元素赋值给e
SCQ->front = SCQ->front + 1; //队头指针向后移动一个单位
SCQ->tag = 0; //删除成功标志位为0
return 1;
}
}
/*输出队列*/
void DisplayQueue(SCQueue SCQ)
{
int i;
if (QueueEmpty(SCQ))
return;
if (SCQ.front < SCQ.rear)
//如果队头指针小于队尾指针,则把队头指针到队尾指针指向的元素依次输出
{
for (i = SCQ.front; i <= SCQ.rear; i++)
printf("%c", SCQ.queue[i]);
}
else //如果队头指针大于队尾指针,则把队尾指针到队头指针指向的元素依次输出
{
for (i = SCQ.front; i <= SCQ.rear+QUEUESIZE; i++)
printf("%c", SCQ.queue[i%QUEUESIZE]);
}
printf("\n");
}
void main()
{
SCQueue Q;
char e; //用于存放出队列的元素
InitQueue(&Q);
printf("A入队\n");
EnQueue(&Q, 'A');
printf("B入队\n");
EnQueue(&Q, 'B');
printf("C入队\n");
EnQueue(&Q, 'C');
printf("队列中的元素:");
DisplayQueue(Q);
printf("队头元素第一次出队\n");
DeQueue(&Q, &e);
printf("出队的元素:");
printf("%c\n", e);
printf("队头元素第二次出队\n");
DeQueue(&Q, &e);
printf("出队的元素:");
printf("%c\n", e);
printf("队列中的元素:");
DisplayQueue(Q);
printf("D入队\n");
EnQueue(&Q, 'D');
printf("E入队\n");
EnQueue(&Q, 'E');
printf("F入队\n");
EnQueue(&Q, 'F');
printf("队列中的元素:");
DisplayQueue(Q);
}
顺序循环队列
最新推荐文章于 2024-07-05 16:19:25 发布