学无先后,达者为师

网站首页 编程语言 正文

C++ Queue队列类模版实例详解_C 语言

作者:诺谦   更新时间: 2022-04-29 编程语言

1.队列的介绍

队列的定义

  • 队列(Queue)是一种线性存储结构。它有以下几个特点:
  • 按照"先进先出(FIFO, First-In-First-Out)"方式进出队列。
  • 队列只允许在"队首"进行取出操作(出队列),在"队尾"进行插入操作(入队列 )

队列实现的方式有两种

  • 基于动态数组实现
  • 基于链表形式实现

队列需要实现的函数

  • T dequeue() : 出队列,并返回取出的元素
  • void enqueue(const T &t) : 入队列
  • T &head() : 获取队首数据,但是不会被取出
  • const T &head() const : 获取const类型队首数据
  • int length() const: 获取数量(父类已经实现)
  • void clear(): 清空队列(父类已经实现)

2.代码实现

本章,我们实现的队列基于链表形式实现,它的父类是我们之前实现的LinkedList类:

C++ 双向循环链表类模版实例详解

所以Queue.h代码如下:

#ifndef QUEUE_H
#define QUEUE_H
#include "throw.h"
// throw.h里面定义了一个ThrowException抛异常的宏,如下所示:
//#include 
//using namespace std;
//#define ThrowException(errMsg)  {cout<<__FILE__<<" LINE"<<__LINE__<<": "<
class Queue : public LinkedList
{
public:
    inline void enqueue(const T &t) { LinkedList::append(t); }
    inline T dequeue()
    {
        if(LinkedList::isEmpty()) {        // 如果栈为空,则抛异常
            ThrowException("Stack is empty ...");
        }
        T t = LinkedList::get(0);
        LinkedList::remove(0);
        return t;
    }
    inline T &head()
    {
        if(LinkedList::isEmpty()) {        // 如果栈为空,则抛异常
            ThrowException("Stack is empty ...");
        }
        return LinkedList::get(0);
    }
    inline const T &head() const
    {
        if(LinkedList::isEmpty()) {        // 如果栈为空,则抛异常
            ThrowException("Stack is empty ...");
        }
        return LinkedList::get(0);
    }
};
#endif // QUEUE_H

3.测试运行

int main(int argc, char *argv[])
{
    Queue queue;
    cout<<"******* current length:"<

运行打印:

总结

原文链接:https://blog.csdn.net/qq_37997682/article/details/123127872

栏目分类
最近更新