//顺序队列-----front指向队头元素,rear指向队尾元素的后一个位置
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
//定义bool型变量
#define true 1
#define false 0
#define bool int
//这里定义队列中的元素都是int类型
typedef int ElemType;
//定义队列最大长度
#define MaxSize 10typedef struct {
ElemType data[MaxSize];
int front, rear; //front指向队头元素,rear指向队尾元素的后一个元素
int tag;
}SqQueue;//队列初始化
void InitQueue(SqQueue* Q) {
Q->front = Q->rear = 0;
Q->tag = 0;
}//判断队列是否为空
bool QueueEmpty(SqQueue Q) {
if (Q.front == Q.rear && Q.tag == 0)
return true;
else
return false;
}//入队操作
bool EnQueue(SqQueue* Q, ElemType e) {
if (Q->front == Q->rear && Q->tag == 1)
return false;
Q->data[Q->rear] = e;
Q->rear = (Q->rear + 1) % MaxSize;
Q->tag = 1;
return true;
}//出队操作,只能让队头元素出队
bool DeQueue(SqQueue* Q, ElemType* e) {
//如果队列为空,则出错,直接返回false
if (QueueEmpty(*Q))
return false;
*e = Q->data[Q->front];
Q->front = (Q->front + 1) % MaxSize;
Q->tag = 0;
return true;
}//获取队头元素的值
bool GetHead(SqQueue Q, ElemType* e) {
//如果队列为空,则出错,直接返回false
if (QueueEmpty(Q))
return false;
*e = Q.data[Q.front];
return true;
}//主函数测试
int main() {
SqQueue myQueue;
InitQueue(&myQueue);
//判空
printf("队列是否为空:%d\n", QueueEmpty(myQueue));
//8,2,6,7,4,5,9依次入队
EnQueue(&myQueue, 8);
EnQueue(&myQueue, 2);
EnQueue(&myQueue, 6);
EnQueue(&myQueue, 7);
EnQueue(&myQueue, 4);
EnQueue(&myQueue, 5);
EnQueue(&myQueue, 9);
//获取队头元素
ElemType x;
ElemType* e = &x;
GetHead(myQueue, &x);
printf("队头元素为:%d\n", x);
//队头元素出队两个
DeQueue(&myQueue, &x);
printf("此时出队的元素为:%d\n", x);
DeQueue(&myQueue, &x);
printf("此时出队的元素为:%d\n", x);
//重新获取队头元素
GetHead(myQueue, &x);
printf("队头元素为:%d", x);
return 0;
}
结果: