IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 8.C++ Queue队列类模版实现 -> 正文阅读

[数据结构与算法]8.C++ Queue队列类模版实现

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类:

6.C++ 双向循环链表类模版实现_抵抗时间扭曲,坚持做一件有意义的事-CSDN博客

所以Queue.h代码如下:

#ifndef QUEUE_H
#define QUEUE_H

#include "throw.h"
// throw.h里面定义了一个ThrowException抛异常的宏,如下所示:
//#include <iostream>
//using namespace std;
//#define ThrowException(errMsg)  {cout<<__FILE__<<" LINE"<<__LINE__<<": "<<errMsg<<endl; (throw errMsg);}

#include "LinkedList.h"

template < typename T>
class Queue : public LinkedList<T>
{
public:
    inline void enqueue(const T &t) { LinkedList<T>::append(t); }
    inline T dequeue()
    {
        if(LinkedList<T>::isEmpty()) {        // 如果为空,则抛异常
            ThrowException("Stack is empty ...");
        }

        T t = LinkedList<T>::get(0);
        LinkedList<T>::remove(0);
        return t;
    }
    inline T &head()
    {
        if(LinkedList<T>::isEmpty()) {        // 如果为空,则抛异常
            ThrowException("Stack is empty ...");
        }

        return LinkedList<T>::get(0);
    }
    inline const T &head() const
    {
        if(LinkedList<T>::isEmpty()) {        // 如果为空,则抛异常
            ThrowException("Stack is empty ...");
        }

        return LinkedList<T>::get(0);
    }
};


#endif // QUEUE_H

3.测试运行

int main(int argc, char *argv[])
{

    Queue<int> queue;
    cout<<"******* current length:"<<queue.length()<<endl;

    for(int i = 0; i < 5; i++) {
        cout<<"queue.enqueue:"<<i<<endl;
        queue.enqueue(i);
    }

    cout<<"******* current length:"<<queue.length()<<endl;

    while(!queue.isEmpty()) {
        cout<<"queue.dequeue:"<<queue.dequeue()<<endl;
    }

    return 0;
}

运行打印:

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-02-26 11:55:08  更:2022-02-26 11:56:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 16:28:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码