顺序队列的基本操作-C语言

版权声明: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;
}

效果图
在这里插入图片描述

希望该文章能对大家有所帮助
同时真诚接受各位宝贵的评论和建议

猜你喜欢

转载自blog.csdn.net/qq_42957923/article/details/85216951