【队列】(手搓的循环队列)
视频链接
视频很详细
注:只是新手的笔记,慎看!!!欢迎大佬指错
何为队列?
“队列” 通俗的来讲就是排队
而对于排队来说,只能从队的尾部进入(不能插队),一般下只有买完包子才会离开这个队,即队的头部才会出去。
队列也是同理
1.只能尾进头出;
2.队中间元素不能做修改,头和尾才行
3.(循环队列)队长是有限的
手搓循环队列代码:
代码不难理解
一切尽在代码中
#include <bits/stdc++.h>
using namespace std;
//队列最大长度
#define MAX_SIZE 5
//定义队列结构
typedef struct
{
//保存数据的数组
int data[MAX_SIZE];
//保存队头元素下标的队头指针
int front;
//保存队尾元素下标的队尾指针
int rear;
}Queue;
//初始化队头指针和队尾指针
void initQueue(Queue* q)
{
q->front=0;
q->rear=0;
}
//判断队空
bool isEmpty(Queue*q)
{
return q->front==q->rear;
}
//判断队满
bool isFull(Queue*q)
{
return (q->rear+1)%MAX_SIZE==q->front;
}
//元素入队
void push(Queue*q,int val)
{
if(isFull(q))
{
cout<<"队满"<<endl;
return;
}
q->rear=(q->rear+1)%MAX_SIZE;
q->data[q->rear]=val;
}
//元素出队
void pop(Queue*q)
{
if(isEmpty(q))
{
cout<<"队空"<<endl;
return;
}
q->front=(q->front+1)%MAX_SIZE;
}
//获得队头元素
int getFront(Queue*q)
{
return q->data[q->front+1];
}
//获得队尾元素
int getRear(Queue*q)
{
return q->data[q->rear];
}
int main()
{
return 0;
}
需注意的是:
如图:
front 指向的元素并不是队头而是队头的上一个元素,front+1指向的元素才是
但rear指向的元素是队尾
为何要这样设计?
若front指向队头 rear指向队尾 则判断队满 队空的条件均为:
( rear + 1)%MAX_SIZE==front
相反使front指向队头上一个元素,则
队满 (rear+1)%MAX_SIZE == front
队空 (front == rear)
619






