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

逻辑存储结构如图:在这里插入图片描述
编译环境:vc6.0,代码如下

/*
队头指针指向对头元素,队尾指针指向队尾元素的下一个位置。
初始状态(队空状态)Q.front==Q.rear==0
队满状态:Q.rear==MaxSize(可能是假满)
进队操作:队不满时,先送值到队尾元素,再将队尾指针加1
出队操作:队不空时,先取队头元素值,再将对头指针加1
*/
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 10

//顺序队列存储结构
typedef struct
{
	int data[MaxSize];                                     //存放队列元素
	int front, rear;										//队头指针和队尾指针
}SqQueue;                                              

//**********************初始化*************************
int InitQueue(SqQueue* Q)
{
	Q->front = 0;
	Q->rear = 0;
	return 1;
}

//********************求顺序表长度*********************
int QueueLength(SqQueue Q)
{
	return Q.rear - Q.front;
}

//***********************入队操作********************
int EnQueue(SqQueue* Q, int e)
{
	if (Q->rear == MaxSize)						 //判断队列是否满
		return 0;   
	Q->data[Q->rear] = e;                       //元素e赋值给队尾
	Q->rear++;						//队尾指针后移
	return 1;
}

//************************出队操作****************
int DeQueue(SqQueue* Q, int* e)
{
	if (Q->rear == Q->front)          //队空
		return 0;
	*e = Q->data[Q->front];            //对头元素赋值给e
	Q->front++;                       //对头指针后移
	return 1;
}

int main()
{
	int i, e, n;						//e入队元素,n入队元素个数
	SqQueue Q;
	InitQueue(&Q);							//初始化
	printf("初始化成功\n");

	printf("请输入入队元素个数\n");
	scanf("%d", &n);
	for (i = 0; i < n; i++)
	{
		printf("请输入第%d个元素值", i + 1);
		scanf("%d", &e);
		if (EnQueue(&Q, e))
			printf("入队成功\n");
		else printf("入队失败\n");
	}

	if (DeQueue(&Q, &e))
		printf("\n元素%d出队\n", e);
	else printf("出队失败\n");

	printf("链表长度为%d\n", QueueLength(Q));
	return 0;
}

测试案例:
在这里插入图片描述
顺序队列会造成“假溢出”现象,因此引入,循环队列:https://blog.csdn.net/weixin_39791665/article/details/105072166


版权声明:本文为weixin_39791665原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。