简介:采用c语言,但是在此代码中函数返回类型中采用了bool,如果需要以c文件运行,将bool类型改为int即可
作者备战考研,以此督学,希望大家多多指教呢
写在前面:顺序结构队列采用了循环队列方式来优化空间
目录
顺序队列
一.结构体定义
typedef struct{
Elemtype data[Maxsize];
int front,rear;
}SqQueue;
二.初始化队列
操作结果:构造一个空队列Q
//初始化队列,构造一个空队列Q
void InitQueue(SqQueue *Q){
Q->front=0;
Q->rear=0;
}
三.判队列空
若队列Q为空返回true,否则返回flase
bool isEmpty(SqQueue Q){
if(Q.rear==Q.front)return true;
return false;
}
四.入队
若队列Q未满,将x加入,使之成为队尾
bool Enqueue(SqQueue *Q,Elemtype x){
if((Q->rear+1)%Maxsize==Q->front)return false;
Q->data[Q->rear]=x;
Q->rear=((Q->rear+1)%Maxsize);
return true;
}
五.出队
若队列Q非空,删除队头元素,并用x返回
bool Dequeue(SqQueue *Q,Elemtype *x){
if(isEmpty(*Q))return false;
*x=Q->data[Q->front];
Q->front=(Q->front+1)%Maxsize;
return true;
}
六.读队头元素
若队列Q非空,将队头元素赋值给x
//读对头元素,若队列Q非空,将队头元素赋值给x
bool GetHead(SqQueue Q,Elemtype *x){
if(isEmpty(Q))return false;
*x=Q.data[Q.front];
return true;
}
实例全部
#include<stdio.h>
#define Maxsize 50
#define Elemtype int
typedef struct{
Elemtype data[Maxsize];
int front,rear;
}SqQueue;
//初始化队列,构造一个空队列Q
void InitQueue(SqQueue *Q){
Q->front=0;
Q->rear=0;
}
//判队列空,若队列Q为空返回true,否则返回flase
bool isEmpty(SqQueue Q){
if(Q.rear==Q.front)return true;
return false;
}
//入队,若队列Q未满,将x加入,使之成为队尾
bool Enqueue(SqQueue *Q,Elemtype x){
if((Q->rear+1)%Maxsize==Q->front)return false;
Q->data[Q->rear]=x;
Q->rear=((Q->rear+1)%Maxsize);
return true;
}
//出队,若队列Q非空,删除队头元素,并用x返回
bool Dequeue(SqQueue *Q,Elemtype *x){
if(isEmpty(*Q))return false;
*x=Q->data[Q->front];
Q->front=(Q->front+1)%Maxsize;
return true;
}
//读对头元素,若队列Q非空,将队头元素赋值给x
bool GetHead(SqQueue Q,Elemtype *x){
if(isEmpty(Q))return false;
*x=Q.data[Q.front];
return true;
}
int main(){
SqQueue Q;
InitQueue(&Q);
if(isEmpty(Q))printf("当前队列为空\n");
else printf("当前队列非空\n");
for(int i=0;i<30;++i){
Enqueue(&Q,i);
}
int x;
printf("当前队头元素为:");
GetHead(Q,&x);
printf("%d\n",x);
printf("弹出15个元素后\n") ;
for(int i=0;i<15;++i)Dequeue(&Q,&x);
printf("当前队头元素为:");
GetHead(Q,&x);
printf("%d",x);
return 0;
}