队列板子
队列
队列:先进先出的线性表
顺序队列
队列有队头的front指针和队尾的rear指针。顺序队列的出队是通过移动first指针进行操作的“假删除”。
普通顺序队列
//顺序普通队列板子
#define MAX 10
typedef struct{
int data[MAX];
int front;
int rear;
}queque;
void init(queque* a){//初始化队列
a->front=a->rear=-1;
}
int add(queque* a,int num){//新元素入队
if(a->rear==MAX-1) return 1;
else{
a->rear++;
a->data[a->rear]=num;
return 0;
}
}
int delete(queque* a){//元素出队,注意顺序队列中只是通过移动队头指针实现的“假删除”
if(a->front==a->rear) return 1;
else{
a->front++;
return 0;
}
}
int gethead(queque* a){
if(a->front==a->rear) return 1;
else return a->data[a->front];
}
int getlast(queque* a){
if(a->front==a->rear) return 1;
else return a->data[a->rear];
}
int length(queque* a){
return a->rear-a->front;
}
int checkempty(queque* a){
if(a->front==a->rear) return 0;
else return 1;
}
int checkfull(queque* a){//注意会出现假上溢情况
if(a->rear==MAX-1) return 0;
else return 1;
}
循环顺序队列
为避免出现假上溢情况,一般采取循环顺序队列。尾指针通过取模运算自动控制其所在下标。(实现:[(rear+1)%maxsize])
浪费数组内一个空间的情况
#define MAX 10
typedef struct{
int data[MAX];
int front,rear;
}queue;
void inti(queue* a){
a->front=a->rear=MAX-1;//模拟普通顺序队列的front指向队头元素的前一个元素 从而完成浪费一个数组空间的操作
}
int add(queue* a,int num){
if((a->rear+1)%MAX==a->front) return 1;
else{
a->rear=(a->rear+1)%MAX;//浪费一个空间的方式
a->data[a->rear]=num;
return 0;
}
}
int delete(queue* a){
if(a->front==a->rear) return 1;
else{
a->front=(a->front+1)%MAX;
return 0;
}
}
int length(queue* a){
return (a->rear-a->front+MAX)%MAX;//此处取模的方式非常巧妙。注意front为指向队头的前一个元素
}
int gethead(queue* a){
if(a->rear==a->front) return 1;
else return a->data[(a->front+1)%MAX];
}
int getrear(queue* a){
if(a->rear==a->front) return 1;
else return a->data[(a->rear+1)%MAX];
}
int checkempty(queue* a){
if(a->rear==a->front) return 0;
else return 1;
}
int checkfull(queue* a){
if((a->rear+1)%MAX==a->front) return 0;
else return 1;
}
一般都是采取浪费一个空间的情况,如不想浪费数组内一个空间,需要先将元素入队,再加判断的情况下移动指针。
扩展:双端队列
允许在队列两端(前端和后端)进行入队和出队操作。后端进前端出/前端进后端出——队列,前端进前端出/后端进后端出——栈。
链式队列
本质:带头指针和尾指针的单链表,尾插法入队,删除首元结点出队。在内存条允许范围内不会出现假上溢的情况。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具