• 数据结构—队列(Queue)


    • 队列的定义--Queue

       队列是只允许在表的队尾插入,在表的队头进行删除。队列具有先进先出的特性(FIFO, First In First Out)。

        

    • 队列提供了下面的操作
         q.empty()               如果队列为空返回true,否则返回false
         q.size()                返回队列中元素的个数
         q.pop()                 删除队列首元素但不返回其值
         q.front()               返回队首元素的值,但不删除该元素
         q.push()                在队尾压入新元素
         q.back()                返回队列尾元素的值,但不删除该元素
    • 队列的实现

         下面是用C++实现的一个队列结构的源码(链表)

             

      1 #pragma once
      2 #include<iostream>
      3 #include<assert.h>
      4 using namespace std; 
      5 template<typename T>
      6 class Queue
      7 {
      8 public:
      9     Queue()
     10         :pHead(NULL)
     11         , pTail(NULL)
     12     {}
     13     Queue(const QueueNode<T>& q)
     14     {
     15         QueueNode<T>*Node = q.pHead;
     16         while (Node)
     17         {
     18             Push(Node->data);
     19             Node = Node->next;
     20         }
     21     }
     22     ~Queue()
     23     {
     24         QueueNode<T> *Node = pHead;
     25         while (Node)
     26         {
     27             QueueNode<T>*Del = Node;
     28             Node = Node->next;
     29             delete Del;
     30         }
     31         pHead = NULL;
     32         size = 0;
     33     }
     34     QueueNode<T>& operator = (const QueueNode<T>& q)
     35     {
     36         if (this != &q)
     37         {
     38            Node<T> *pNode = other._pHead;
     39             while (NULL != pNode)
     40             {
     41                 Push(pNode->_data);
     42                 pNode = pNode->_pNext;
     43             }
     44         }
     45 
     46         return *this;
     47     }
     48     void Push(const T &data)
     49     {
     50         if (pHead == NULL)
     51         {
     52             pTail = pHead = new QueueNode<T>(data);
     53         }
     54         else
     55         {
     56             pTail ->next = new QueueNode<T>(data);
     57             pTail = pTail->next;
     58         }
     59     }
     60     void Pop()
     61     {
     62         assert(NULL != pHead);
     63         if (pHead == pTail)
     64         {
     65             delete pHead;
     66             pHead = pTail = NULL;
     67         }
     68         else
     69         {
     70             QueueNode<T>*Del = pHead;
     71             pHead = pHead->next;
     72             delete Del;
     73         }
     74     }
     75     bool Empty()
     76     {
     77         return pHead == NULL;
     78     }
     79     T& Fornt()
     80     {
     81         assert(pHead);
     82 
     83         return pHead->data;
     84     }
     85 
     86     T& Back()
     87     {
     88         assert(pTail);
     89 
     90         return pTail->data;
     91     }
     92     size_t Size()
     93     {
     94         while (pHead != NULL)
     95         {
     96             size++;
     97             pHead = pHead->next;
     98         }
     99         return size;
    100     }
    101     void Print()
    102     {
    103         QueueNode<T>*cur = pHead;
    104         while (cur)
    105         {
    106             cout << cur->data << "->";
    107             cur = cur->next;
    108         }
    109         cout << "NULL";
    110     }
    111 protected:
    112     QueueNode<T>* _BuyNode(const T& data)
    113     {
    114         return new QueueNode<T>(data);
    115     }
    116 protected:
    117     QueueNode<T>* pHead;
    118     QueueNode<T>* pTail;
    119     size_t size;
    120 };
    121 void main()
    122 {
    123     Queue<int> q;
    124     q.Push(6);
    125     q.Push(6);
    126     q.Push(9);
    127     q.Pop();
    128     q.Print();
    129     cout<<q.Size();
    130     cout<<q.Fornt();
    131     cout << q.Back();
    132     system("pause");
    133 
    134 }
  • 相关阅读:
    ASP.NET Web 项目文件类型
    SQL Server 2008数据类型
    哎,终于还是在博客园安家了
    document.evaluate的详细用法
    Prototype1.5.1源代码解读分析4
    Prototype1.5.1源代码解读分析1
    每个.NET 开发人员应该下载的十个必备工具
    #Rgeion #End Region 中的关于折叠所有和不折叠的有的方法
    如何把web站点的所有.aspx.cs文件编译为.dll文件?
    Prototype1.5.1源代码解读分析3
  • 原文地址:https://www.cnblogs.com/-zyj/p/Queue.html
Copyright © 2020-2023  润新知