队列是什么:
定义:队列是一种操作受限制的线性表,只允许在表的一端进行插入,而在表的另一端进行删除。
逻辑结构:线性结构
运算:先进先出的特性,创建,入队,出队,读队头元素
存储结构:顺序存储,链式存储
代码分块:
1.创建队列
typedef struct{
int data[MaxSize];
int size;
int front,rear;//指向队列首尾
}SqQueue;
//初始化
void InitQueue(SqQueue *S){
S->front=S->rear=0;//使队首队尾指针指向0位置
S->size=0;
}
2.入队操作
//入队操作
bool EnQueue(SqQueue *S,int enNum){
if(S->size>=MaxSize){//判断是否队满
return false;
}
S->data[(S->rear)%MaxSize] = enNum;//将数据元素插入队尾(取余使其取值闭环)
S->rear++;//队尾指针后移
S->size++;
return true;
}
3.出队操作
//出栈操作
bool outQueue(SqQueue *S,int *outNum){
if(S->size<=0){//判断队是否为空
return false;
}
*outNum = S->data[(S->front)%MaxSize];//取队首元素
S->front++;//队首指针后移
S->size--;
return true;
}
4.读队首元素
void searchTop(SqQueue S){//读取队首元素
int readNum=0;
readNum = S.data[(S.front)%MaxSize];//读取队首元素
printf("队首元素为%d",readNum);
}
完整代码:
//使用顺序存储实现队列
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 10
typedef struct{
int data[MaxSize];
int size;
int front,rear;//指向队列首尾
}SqQueue;
//初始化
void InitQueue(SqQueue *S){
S->front=S->rear=0;//使队首队尾指针指向0位置
S->size=0;
}
//入队操作
bool EnQueue(SqQueue *S,int enNum){
if(S->size>=MaxSize){//判断是否队满
return false;
}
S->data[(S->rear)%MaxSize] = enNum;//将数据元素插入队尾(取余使其取值闭环)
S->rear++;//队尾指针后移
S->size++;
return true;
}
//出栈操作
bool outQueue(SqQueue *S,int *outNum){
if(S->size<=0){//判断队是否为空
return false;
}
*outNum = S->data[(S->front)%MaxSize];//取队首元素
S->front++;//队首指针后移
S->size--;
return true;
}
void searchTop(SqQueue S){//读取队首元素
int readNum=0;
readNum = S.data[(S.front)%MaxSize];//读取队首元素
printf("队首元素为%d",readNum);
}
int main(){
SqQueue S;//声明一个队列
InitQueue(&S);//初始化
//入队操作
int enNum = 0;//记录入队列元素的变量
bool flag;
printf("请向队列中输入元素(输入99结束):");
scanf("%d",&enNum);
while(enNum != 99){
flag=EnQueue(&S,enNum);//入队列
if(flag){
printf("\n请向队列中输入元素(输入99结束):");
scanf("%d",&enNum);
}else{
printf("入队列失败");
exit(0);
}
}
//出队操作
int outNum = 0;//存储出队元素的变量
char elect = NULL;//判断是否继续出队的变量
printf("是否出队元素(y|x):");
scanf("%s",&elect);
while(elect == 'y'){
flag = outQueue(&S,&outNum); //调用出队操作
if(flag == false){
printf("\n队已空");
exit(0);
}else{
printf("\n出队元素为%d",outNum);
}
printf("\n是否出队元素(y|x):");
scanf("%s",&elect);
}
//查询队头元素
searchTop(S);
}
运行结果: