写在前面

蒟蒻发第二篇博客了!
作者依然是个新手,依然没有脑子,因此本文可能存在大量不足之处,还请多多指教。对于各种错误,欢迎批评指正!

队列

队列(Queue),是一种数据结构,在STL中可直接调用。具体地来说,队列是一种操作受限的线性表,只允许在表的一端进行插入,而在表的另一端进行删除。这也是其与栈的最大区别。队列的数据呈先进先出,正如排队,“队列”因此得名。

与栈相类似,队列也有pushpop等操作。push是将元素插入队列的过程,称“入队”。

pop则是将队列最前元素删去的过程,称“出队”。

与栈不同的是,队列向外弹出元素时,是从最底端弹出。这一元素通常称front

废话不多说(虽然已经说了很多),直接切入正题

首先,依然是用数组实现:

const int MAXN=105;//演示专用数据  
int queue[MAXN],head=0,tail=0;//head,tail分别表示队列前端(删除端)和后端(插入段) 

随后,是push实现:

void push(int x)
{
    if((tail+1)%MAXN==head)//为防止队列假溢出,使用循环队列。该方法可判断队列是否已满。 
    {
        cout<<"The queue is full!";//输出队列满告警信号 
        return;
    }
    queue[tail]=x;//未满则尾端赋值  
    tail=(tail+1)%MAXN;//实现循环队列   
}

pop的实现过程:

void pop()
{
    if(head==tail)//循环队列下判断栈空  
    {
        cout<<"The queue is empty!";//输出栈空告警  
        return;
    }
    head=(head+1)%MAXN;//头指针加1取余,使之在循环队列中向后挪动一位  
}

front的实现过程:

int front()
{
    if(head==tail)//循环队列下判断栈空 
    {
        cout<<"The queue is empty!"; //输出栈空告警 
        return -1;
    }
    return queue[head];//返回头端值 
}

请注意

  • 队列必须用循环队列,否则可能假溢出!!!

  • 使用循环队列的方法:在headtail变量自增时取余MAXN即可。

  • 判断栈空时,需要判断的是headtail是否相等;而判断栈满时,则要看(tail+1)%MAXNhead的关系

完整代码

//Queue队列  
#include<iostream>
using namespace std;
const int MAXN=105; 
int queue[MAXN],head=0,tail=0;
void push(int x)
{
    if((tail+1)%MAXN==head)
    {
        cout<<"The queue is full!";
        return;
    }
    queue[tail]=x;
    tail=(tail+1)%MAXN;
}
void pop()
{
    if(head==tail)  
    {
        cout<<"The queue is empty!";
        return;
    }
    head=(head+1)%MAXN;  
}
int front()
{
    if(head==tail)
    {
        cout<<"The queue is empty!"; 
        return -1;
    }
    return queue[head];
}
int main()
{
    //进行需要的操作  
    return 0;
 } 

THE END~

posted on 2023-07-08 11:32  httony  阅读(57)  评论(0编辑  收藏  举报