版权声明:Sock的blog, 可以偷看但不可以偷走哦 https://blog.csdn.net/qq_42957923/article/details/85216951
顺序队列的基本操作
顺序队列即用顺序表实现的队列, 其操作简便, 但是会出现"假溢出"的现象, 这是由于顺序表的定义以及队列的特点所共同决定的
具体实现
顺序队列的定义
//定义一个顺序队列
#define QUEUESIZE 100
typedef struct Squeue {
int queue[QUEUESIZE];
int front;
int rear;
}SeQueue;
顺序队列的初始化
//顺序队列的初始化
void InitQueue(SeQueue* S) {
S->front = S->rear = 0;
}
判断队列是否为空
//判断队列是否为空
int IsEmpty(SeQueue S) {
if (S.front == S.rear) {
return 1;
}
return 0;
}
入队操作
//入队操作
int InQueue(SeQueue* S, int e) {
//判断队列是否为满
if (S->rear >= QUEUESIZE) {
return 0;
}
S->queue[S->rear] = e;
++S->rear;
return 1;
}
出队操作
//出队操作
int OutQueue(SeQueue* S, int* e) {
//判断队列是否为空
if (IsEmpty(*S)) {
return 0;
}
*e = S->queue[S->front];
++S->front;
return 1;
}
测试
#include <stdio.h>
#include <windows.h>
//定义一个顺序队列
#define QUEUESIZE 100
typedef struct Squeue {
int queue[QUEUESIZE];
int front;
int rear;
}SeQueue;
//顺序队列的初始化
void InitQueue(SeQueue* S) {
S->front = S->rear = 0;
}
//判断队列是否为空
int IsEmpty(SeQueue S) {
if (S.front == S.rear) {
return 1;
}
return 0;
}
//入队操作
int InQueue(SeQueue* S, int e) {
//判断队列是否为满
if (S->rear >= QUEUESIZE) {
return 0;
}
S->queue[S->rear] = e;
++S->rear;
return 1;
}
//出队操作
int OutQueue(SeQueue* S, int* e) {
//判断队列是否为空
if (IsEmpty(*S)) {
return 0;
}
*e = S->queue[S->front];
++S->front;
return 1;
}
int main() {
SeQueue s1;
InitQueue(&s1);
for (int i = 0; i < 5; ++i) {
if (InQueue(&s1, i + 1));
}
int e = 0;
for (int i = 0; i < 5; ++i) {
if (OutQueue(&s1, &e)) {
printf("%d ", e);
}
}
printf("\n");
system("pause");
return 0;
}
效果图
希望该文章能对大家有所帮助
同时真诚接受各位宝贵的评论和建议