像移动、联通、电信等客服电话,客服人员与客户相比总是少数,在所有的客服人员都占线的情况下,客户会被要求等待,直到有某个客服人员空下来,才能让最先等待的客户接通电话。这里也是将所有当前拨打客服电话的客户进行了排队处理。客服系统就是应用了一种数据结构来实现刚才提到的先进先出的排队功能,这就是队列。
队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。 |
队列是一种先进先出(First In First Out)的线性表,简称FIFO。允许插入的一端称为队尾,允许删除的一端称为队头。假设队列是q= (a1, a2, ……, an),那么a1就是队头元素,而an是队尾元素。这样我们删除时,总是从a1开始,而插入时,在队尾插入。这也比较符合我们通常生活中的习惯,排在第一个的优先出列,最后来的当然排在队伍最后,如下图所示。
队列在程序设计中用得非常频繁。前面我们已经举了一个例子,再比如用键盘进行各种字母或数字的输入,到显示器上如记事本软件上的输出,其实就是队列的典型应用,假如你本来和女友聊天,想表达你是我的上帝,输入的是god,而屏幕上却显示出了dog发了出去,这真是要气死人了。
同样是线性表,队列也有类似线性表的各种操作,不同的就是插入数据只能在队尾进行,删除数据只能在队头进行。
队列的顺序存储结构,简称为顺序队列。
由于篇幅原因,顺序队列的实现程序不在这里贴出,详细请看我的另一篇博客:数据结构 - 顺序队列的实行(C语言)。
队列的链式存储结构,简称为链队列。
由于篇幅原因,顺序队列的实现程序不在这里贴出,详细请看我的另一篇博客:数据结构 - 顺序队列的实行(C语言)。
对于循环队列与链队列的比较,可以从两方面来考虑:
总的来说,在可以确定队列长度最大值的情况下,建议用循环队列,如果你无法预估队列的长度时,则用链队列。
原文:https://www.cnblogs.com/linuxAndMcu/p/10327849.html