- 👋 Hi, I’m @Beast Cheng
- 👀 I’m interested in photography, hiking, landscape…
- 🌱 I’m currently learning python, javascript, kotlin…
- 📫 How to reach me --> 458290771@qq.com
喜欢《数据结构》部分笔记的小伙伴可以订阅专栏,今后还会不断更新。🧑💻
此外,《程序员必备技能》专栏和《程序员必备工具》专栏(该专栏暂未开设)日后会逐步更新,感兴趣的小伙伴可以点一下订阅、收藏、关注!🚀
谢谢大家!🙏
定义结构体
#define MaxSize 10
typedef struct{
ElemType data[MaxSize]; //用静态数组存放元素
int front, rear; //队头指针和队尾指针
}SqQueue;
声明队列
void testQueue(){
SqQueue Q;
//......
}
rear
应该指向队尾元素的后一个位置(下一个应该插入的位置)
初始化时应该写如下代码:
void InitQueue(SqQueue &Q){
//头尾指针都指向0
Q.rear = Q.front = 0;
}
判空
bool QueueEmpty(SqQueue Q){
if(Q.rear == Q.front) //队空
return true;
else
return false;
}
入队操作
bool EnQueue(SqQueue &Q, ElemType x){
if((Q.rear+1)%MaxSize == Q.front) //队列已满
return false; //队满则报错
Q.data[Q.rear] = x; //将x插入队尾
Q.rear = (Q.rear + 1) % MaxSize; //队尾指针+1然后取模,因为我们的最大值是10,只要不满10,得到的就是0,于是队尾指针又会重新指回0
return true;
}
出队操作
bool DeQueue(SqQueue &Q, ElemType &x){
if(Q.rear == Q.front) //判空
return false; //队列已空
x = Q.data[Q.front];
Q.front = (Q.front + 1) % MaxSize; //队头指针后移
return true;
}
查询
bool GetHead(SqQueue Q, ElemType &x){
if(Q.rear == Q.front)
return false; //队空则报错
x = Q.data[Q.front];
return true;
}
判断队列已满/已空
方案一
队列已满的条件:队尾指针的再下一个位置就是队头,即(Q.rear+1) % MaxSize == Q.front
我们可以通过(rear+MaxSize-front) % MaxSize
计算队列元素的个数
方案二
#define MaxSize 10
typedef struct{
ElemType data[MaxSize];
int front, rear;
int size; //队列当前长度
}SqQueue;
/*
* 初始化时 rear=front=0; size=0;
* 插入成功 size++;
* 删除成功 size--;
* 队满条件 size==MaxSize
* */
方案三
#define MaxSize 10
typedef struct{
ElemType data[MaxSize];
int front, rear;
int tag; //最近进行的是插入还是删除?插入是1,删除是0
}SqQueue;
/*
* 每次删除操作成功时,都令tag=0;
* 每次插入操作成功时,都令tag=1;
* 队空条件 front=rear && tag==0
* 队满条件 front=rear && tag==1
*/