文章目录
什么是队列
通俗易懂的就是说一跟管道里的水流出来,里面的水分子就是一组队列先进先出
(First In First Out)他和栈的操作类似,都是操作受限
的的线性表
队列定义
队列有队头
,队尾
之分,在队头只允许出队
,在队尾只允许入队
,在队列的中间不允许插入
和删除
,因此叫做操作受限的线性表
常见的队列操作(C语言)
InitQueue(*Q): 初始化队列
QueueEmpty(Q):队列判空
EnQueue(*Q,X):入队,队列未满时入队,X加入队尾
DeleteQueu(*Q):出队,若队列非空,则删除队头元素,并返回
GetHead(Q):获取队头元素
如果对你有所帮助,点个赞呗
队列的顺序存储结构
结构体
#define MaxSizeof 50
typedef struct Queue
{
int data[MaxSizeof];
int front, rear; //队头,队尾指针
}Queue;
队列初始化:Q.front=Q.rear
入队一个元素:Q.front=(Q.front+1)%MaxSizeof
出队一个元素:Q.rear=(Q.rear+1)%MaxSizeof
队列长度:(Q.reat+MaxSizeof-Q.front)%MaxSizeof
队空:Q.rear==Q.front
队满:(Q.front+1)%MaxSizeof=Q.rear
我们牺牲一个单元来区分队满于队空,否则判断条件将会和队空一样(Q.rear==Q.front)
实现代码
初始化
void InitQueue(Queue* Q)
{
Q->front = 0;
Q->rear = 0;
return;
}
入队
int EndQueue(Queue* Q, int Value)
{
/*
第一个参数:队列的首地址
第二个参数:入队的数值
函数功能:入队
*/
if ((Q->rear + 1) % MaxSizeof == Q->front)
return -1;//若队列满队,则不允许操作
Q->data[Q->rear] = Value;
Q->rear=(Q->rear+1)%MaxSizeof;
return 0;
}
出队
int DeleteQueue(Queue* Q)
{
/*
参数:队列首地址
函数功能:出队
*/
if (Q->front == Q->rear)//判断队列是否为空
return -1;
int Value = 0;
Value = Q->data[Q->front];
Q->front = (Q->front + 1) % MaxSizeof;
return Value;
}
获取队头元素
int GetQueue(Queue* Q)
{
/*
参数:队列首地址
函数功能:获取对头元素
*/
if (Q->front == Q->rear)
return -1;
return Q->data[Q->front];
}
全部代码
文件结构
Main函数
#include"顺序存储队列.h"
#include<stdio.h>
int main()
{
Queue Q;
{
InitQueue(&Q);
printf("队列初始化成功\n");
}
//队列初始化
{
int Value = 0;//入队值
int time = 0;//如对次数
int i = 0;
printf("请输入入队次数\n");
scanf_s("%d", &time);
getchar();
while (i < time)
{
int flag = 0;
printf("请输入入队次数\n");
scanf_s("%d", &Value);
getchar();
flag=EndQueue(&Q, Value);
if (flag == -1)
{
printf("队列已满禁止操作\n");
break;
}
i++;
}
}
//入队
{
int time = 0;//出队次数
int i = 0;
int Value = 0;
printf("请输入出队次数\n");
scanf_s("%d", &time);
getchar();
while (i<time)
{
Value = DeleteQueue(&Q);
if (Value == -1)
{
printf("队列为空,禁止操作");
break;
}
printf("出队元素:%d\n", Value);
i++;
}
}
//出队
{
int Value;
Value=GetQueue(&Q);
if (Value == -1)
{
printf("队列为空禁止操作");
}
else
printf("队头元素为:%d", Value);
}
//获取队头元素
}
头文件
#ifndef __顺序存储队列__H__
#define __顺粗存储队列__H__
#define MaxSizeof 50
typedef struct Queue
{
int data[MaxSizeof];
int front, rear;
}Queue;
void InitQueue(Queue* Q);//初始化队列
int EndQueue(Queue* Q,int Value);//创建队列
int DeleteQueue(Queue* Q);//出队
int GetQueue(Queue* Q);//获取队头元素
#endif // !__顺序存储队列__H__
.C文件
#include"顺序存储队列.h"
#include<stdio.h>
void InitQueue(Queue* Q)
{
Q->front = 0;
Q->rear = 0;
return;
}
//初始化队列
int EndQueue(Queue* Q, int Value)
{
/*
第一个参数:队列的首地址
第二个参数:入队的数值
函数功能:入队
*/
if ((Q->rear + 1) % MaxSizeof == Q->front)
return -1;//若队列满队,则不允许操作
Q->data[Q->rear] = Value;
Q->rear=(Q->rear+1)%MaxSizeof;
return 0;
}
//创建队列
int DeleteQueue(Queue* Q)
{
/*
参数:队列首地址
函数功能:出队
*/
if (Q->front == Q->rear)//判断队列是否为空
return -1;
int Value = 0;
Value = Q->data[Q->front];
Q->front = (Q->front + 1) % MaxSizeof;
return Value;
}
//出队
int GetQueue(Queue* Q)
{
/*
参数:队列首地址
函数功能:获取对头元素
*/
if (Q->front == Q->rear)
return -1;
return Q->data[Q->front];
}
//获取队头元素