• 数据结构-链式队列-C++


    用链表搭建的栈与队列相对简单,队列的特点是先进先出,不啰嗦了,由于代码比较简单,相信光顾的人不会太多,下面直接贴代码。

    头文件

     1 #ifndef QUEUELI_H
     2 #define QUEUELI_H
     3 
     4 template<class T>
     5 class Queue
     6 {
     7 public:
     8     Queue();
     9     ~Queue();
    10 
    11     bool isEmpty() const;
    12     const T & getFront() const;
    13     void enqueue(const T& x);
    14     T dequeue();
    15     void makeEmpty();
    16 
    17 private: //也可以做一个友元类 
    18     struct ListNode
    19     {
    20         T element;
    21         ListNode *next;
    22 
    23         ListNode(const T & theElement, ListNode *n=0):
    24             element(theElement), next(n){}
    25     };
    26     ListNode *front;
    27     ListNode *back;
    28 };
    29 
    30 template<class T>
    31 Queue<T>::Queue() //创建队列
    32 {
    33     front = back = 0;
    34 }
    35 
    36 template<class T>
    37 Queue<T>::~Queue()//所有步骤执行完最后执行析构函数,清空队列
    38 {
    39     makeEmpty();
    40 }
    41 
    42 template<class T>
    43 void Queue<T>::makeEmpty()//清空队列
    44 {
    45     while (!isEmpty())
    46         dequeue();
    47 }
    48 
    49 template<class T>
    50 bool Queue<T>::isEmpty() const
    51 {
    52     return front == 0;
    53 }
    54 
    55 template<class T>
    56 const T & Queue<T>::getFront() const
    57 {
    58     if (isEmpty())
    59         throw"Queue is empty.";
    60     return front->element;
    61 }
    62 
    63 template<class T>
    64 void Queue<T>::enqueue(const T &x)
    65 {
    66     if (isEmpty())
    67         back = front = new ListNode(x);
    68     else
    69         back = back->next = new ListNode(x);//队列在队尾插入结点
    70 }
    71 
    72 template<class T>
    73 T Queue<T>::dequeue()//删除队列
    74 {
    75     T frontItem = getFront();//留作返回要删除的结点中的值用
    76     ListNode *old = front;
    77     front = front->next;
    78     delete old;
    79     return frontItem;
    80 }
    81 
    82 #endif

    源文件-测试用

     1 #include<iostream>
     2 #include"QueueLi.h"
     3 
     4 using namespace std;
     5 
     6 int main()
     7 {
     8     cout << "测试链式队列:" << endl;
     9 
    10     Queue<int> myQ;
    11 
    12     myQ.enqueue(10);
    13     myQ.enqueue(20);
    14     myQ.enqueue(30);
    15     myQ.enqueue(40);
    16 
    17     cout << myQ.getFront() << endl;
    18     myQ.dequeue();
    19     cout << myQ.getFront() << endl;
    20 
    21     return 0;
    22 }
  • 相关阅读:
    windows下面Nginx日志切割
    C#通过DocX创建word
    leetcode 189 Rotate Array
    leetcode 172 Factorial Trailing Zeroes
    leetcode 169 Majority Element 冰山查询
    leetcode 165 Compare Version Numbers
    leetcode 160 Intersection of Two Linked Lists
    【windows-》linux】SCP
    【设计】B端和C端区别
    【Flask】部署
  • 原文地址:https://www.cnblogs.com/yang901112/p/11828002.html
Copyright © 2020-2023  润新知