队列入门(详细版)

什么是队列

定义:队列(queue)在计算机科学里是常用的数据结构之一,是一种特殊的线性表。它只允许在队列头(head)进行删除操作,而在队列尾(tail)进行插入操作。

现实生活中有很多“队列”的事例,比如排队过通道:

性质:队列(queue)只允许在队尾进行插入操作,而在队头进行删除操作。是一种先进先出(First in First Out)的线性表,简称FIFO。

队列模板

虽然C++有专门的queue类型,但这里还是先学习用数组来实现队列。这对理解队列的原理和掌握编程技巧都非常有帮助。

1)定义数组作为存储队列的“容器”
const int maxN=1002;
int qu[maxN];   //足够大的数组
int head=0,     //队头位置
    tail=0;     //队尾位置
2)常见功能的函数
函数功能使用样例
void push()
{
    qu[tail++]=x;
}
在队尾压入添加一个元素x
push(3);
int pop()
{
    return qu[head++];
}
弹出(删除)队头元素
pop();
或
cout<<pop();
int front()
{
    return qu[head];
}
取队头的元素
cout<<front();
int back()
{
    return qu[tail-1];
}
取队尾的元素
cout<<back();
int quSize()
{
    return tail-head;
}
队列中元素的个数
cout<<quSize();

需要注意,head指向第1个元素,而tail是指向最后一个元素的后面 。

另外:上面函数没有判断边界问题,要注意:tail<maxN 才能添加元素; 队列为空(没有元素)时不能pop()、front()、back()。

扩展

双向队列(double-queue,简称deque)有些队列可以从头、尾两端进行操作:

维持要在原来队列的基础上增加2个操作:

函数功能使用样例
void push_back()
{
    qu[tail++]=x;
}
在队尾压入添加一个元素x
push_back(3);
int pop_back()
{
    return qu[--tail];
}
弹出(删除)队尾元素
pop_back();
或
cout<<pop_back();
void push_front()
{
    qu[--head]=x;
}
在队头压入添加一个元素x
push_front(5);
int pop_front()
{
    return qu[head++];
}
弹出(删除)队头元素
pop_front();
或
cout<<pop_front();
int front()
{
    return qu[head];
}
取队头的元素
cout<<front();
int back()
{
    return qu[tail-1];
}
取队尾的元素
cout<<back();
int quSize()
{
    return tail-head;
}
队列中元素的个数
cout<<quSize();

需要注意,head指向第1个元素,而tail是指向最后一个元素的后面 。另外:由于可能在队头增加元素,head和tail开始时要在中间位置。

const int maxN=2002;
int qu[maxN];    //足够大的数组
int head=maxN/2, //队头位置
    tail=maxN/2; //队尾位置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值