链式队列Queue

标签: 队列 C++ 队列类的实现
6人阅读 评论(0) 收藏 举报
分类:

最近在学队列然后顺手写了这篇学习笔记

队列的基本概念

栈是先进后出 - 而队列是先进后出



这里有一个队列:
<1 , 2 , 3 , 4 , 5 , 6>
通常我们对队列有两种操作

  1. 出队
  2. 入队
出队

对<1, 2, 3, 4, 5, 6>出队
出队元素是1 然后 是 2, 然后是 3

入队

对<1, 2, 3, 4, 5, 6>入队
将元素7入队 队列变成<1, 2, 3, 4, 5, 6, 7>

  • 这里可以看出队列是从头部进行读取删除操作对尾部进行添加插入操作的
  • 就好像我们排队买票一样总是前面的买到票了离开 后面又加入要买票的人
  • // 定义一个类
    #ifndef QUEUE_H
    #define QUEUE_H
    // 定义一个类 包含队列数据结构和操作队列的函数
    class Queue
    {
        private:// 队列数据
            struct ue{// 队列结构体
                int num = 0;// 数据
                struct ue *next;// 尾指针
            };
            struct ue *head, *last;// 头指针和尾指针
        public:
            Queue();
            ~Queue(); 
            // 显示所有信息 
            void show();
            // 查找某个值是否存在
            bool contains(int num); 
            // 访问第i个元素的值 
            int indexOf(int i);
            // 得到当前元素个数
            int size();  
            // 入队元素到末尾
            bool push(int num);
            // pop出队 - 但不删除 
            int pop();
            // popFrist - 出队并且删除
            int popFrist(); 
        protected:
    };
    #endif
    //队列类实现函数
    #include "Queue.h"
    #include <iostream>
    using namespace std;
    Queue::Queue()
    {
        head = nullptr;
    }
    // 访问第i个元素的值 
    int Queue::indexOf(int i){
        struct ue *p = this->head; 
        int x = 0;
        while(p && x != i){
            p = p->next; 
            x++;
        } 
        if(p)
            return p->num;
        return INT_MIN; 
    } 
    // 查找某个值是否存在
    bool Queue::contains(int num){
        struct ue *p = this->head; 
        while(p && p->num != num){
            p = p->next; 
        } 
        if(p)
            return true;
        return false; 
    } 
    // 得到当前元素个数
    int Queue::size(){
        int i = 0;
        struct ue *p;
        p = this->head;
        while(p){
            i++;
            p = p->next; 
        }
        return i;
    } 
    // 出队 不删除元素 
    int Queue::pop(){
        return this->head->num; 
    } 
    // 出队 并且删除元素
    int Queue::popFrist(){
        struct ue *p; 
        int num = this->head->num;
        p = this->head;
        this->head = this->head->next;
        delete p; 
        return num; 
    } 
    // 入队 
    bool Queue::push(int num){
        struct ue *p;
        p = new struct ue;
        p->num = num;
        p->next = nullptr;
        if( this->head == nullptr ){
            this->head = p;
        } else {
            this->last->next = p;
        }
        this->last = p;
    } 
    // 显示所有元素 
    void Queue::show(){
        struct ue *temp = this->head;
        while(temp){
            cout << temp->num << ", ";
            temp = temp->next;
        }
        cout << endl; 
    }
    // 释放空间 
    Queue::~Queue()
    {
        struct ue *p = this->head;
        while(p){
            this->head = p;
            p = p->next;
            delete head;
        }
    }
    // 在这里测试写的队列类
    #include <iostream>
    #include "Queue.h" 
    using namespace std; 
    int main(int argc, char** argv) {
        Queue queue;
        queue.push(10);// 入队
        queue.push(20);
        queue.push(101);
        queue.show();
        cout << "当前队列中有: " << queue.size() << endl; 
        cout << "队头元素为: " << queue.pop() << endl; 
        cout << "当前队列的元素个数: " << queue.size() << endl; 
        queue.show();
        cout << "队头元素为: (显示并删除): " << queue.popFrist() << endl; 
        cout << "当前队列的元素个数: " << queue.size() << endl; 
        queue.show();
        cout << "队列中是否包含该元素: " << queue.contains(20) << endl; 
        cout << "显示对应下标的元素值: " <<queue.indexOf(1) << endl; 
    
        return 0;
    }
    查看评论

    【数据结构】链式队列 Linked_queue

    08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活。此系列是对四年专业课程学习的回顾,索引参见:http://blog.csdn.net/xiaowei_cqu/article/de...
    • xiaowei_cqu
    • xiaowei_cqu
    • 2012-07-17 17:44:39
    • 7547

    队列链式存储结构的C++模板类头文件源代码实现

    队列的链式存储结构与链表的区别除了成员函数的不同以外,还有队列的成员变量增加了尾指针,这是因为增加变量需要从链表的尾部添加,若每次从头结点开始遍历的话太费时间,头指针是一个空数据的节点指针,它是一个一...
    • Alex123980
    • Alex123980
    • 2016-06-01 14:37:46
    • 639

    链式队列(Linked Queue)

    链式队列(Linked Queue) 1. 链式队列的概念 1.1 链式队列的定义 链式队列是基于链表的存储表示实现的队列。 1.2 链式队列中各元素的逻辑及存储关系 链式队列可以采用单链表作...
    • cainv89
    • cainv89
    • 2016-05-28 19:03:37
    • 2299

    【源代码】C++算法(四)队列的基本操作 (用队列实现十进制转换十六进制)

    日常说明:首先博主也是菜鸟一枚,有错误欢迎大家指正。另外本博客所有的代码博主编写后均调试 通过。重要提醒!!!!博主使用的是VS2017,如果有低版本的小伙伴 最好新建空项目将此代码复制上去。 更...
    • Handoking
    • Handoking
    • 2018-03-24 15:02:56
    • 43

    环形顺序队列的实现

    一、队列的定义 队列是一种特殊的线性表,线性表两端都可以进行插入删除,而队列只能在队头删除,队尾插入。插入元素称为入队,删除元素称为出队。 特点: (1)队列只允许在队头插入,队尾删除; (2...
    • HappyToEat
    • HappyToEat
    • 2017-02-22 11:27:55
    • 1128

    队列的链式建立和操作

    之前完成了堆栈的建立和操作,现在开始实现队列 队列是:具有一定操作约束的线性表 其插入和删除操作:只能在一端插入,而在另一端删除 数据插入:入队列 数据删除:出队列 先来先服务 先进先出:FIFO(F...
    • lafengxiaoyu
    • lafengxiaoyu
    • 2016-11-03 21:52:56
    • 2232

    队列(链式存储) java实现

    java 链式队列
    • chx0501
    • chx0501
    • 2015-09-27 17:52:17
    • 418

    java队列实现(顺序队列、链式队列、循环队列)

    • 2017年07月27日 17:04
    • 12KB
    • 下载

    循环顺序队列介绍及其C++实现

    循环队列的介绍及C++实现方法
    • coderNim
    • coderNim
    • 2016-11-27 13:10:42
    • 605

    用链表实现队列--链式队列

    /* 一、关于链式队列的约定(目的是在C语言中描述方便) 1.定义: (1)队列是一种先进先出的线性表; (2)它只允许在表的一端进行入队,在另一端进行出队操作。在队列中,允许插入的一...
    • fengel_cs
    • fengel_cs
    • 2016-05-29 12:22:52
    • 5078
      个人资料
      持之以恒
      等级:
      访问量: 378
      积分: 237
      排名: 33万+
      文章存档