逻辑存储结构如图:
编译环境: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版权协议,转载请附上原文出处链接和本声明。