zoukankan      html  css  js  c++  java
  • 队列

      1 #include<iostream>
      2 
      3 using namespace std;
      4 
      5 typedef int QueueElement;
      6 
      7 struct Node
      8 
      9 {
     10 
     11  Node *next;
     12 
     13  QueueElement data;
     14 
     15  Node(QueueElement value, Node *link = NULL) :data(value), next(link){}
     16 
     17 };
     18 
     19 class Queue
     20 
     21 {
     22 
     23 public:
     24 
     25      Queue() :myFront(NULL),myBack(NULL) {}
     26 
     27      ~Queue()
     28 
     29     {
     30 
     31          Nodeptr ptr = myFront, nextptr;
     32 
     33          while (ptr != 0)
     34 
     35          {
     36 
     37                nextptr = ptr->next;
     38 
     39        delete ptr;
     40 
     41        ptr = nextptr;
     42 
     43      }
     44 
     45    }
     46 
     47  
     48 
     49  Queue(const Queue& original)
     50 
     51  {
     52 
     53    myFront = myBack = 0;
     54 
     55    if (!original.empty())
     56 
     57    {
     58 
     59      myFront=myBack= new Node(original.Front());
     60 
     61      Nodeptr origPtr = original.myFront->next;
     62 
     63      while (origPtr != 0)
     64 
     65      {
     66 
     67        myBack->next = new Node(origPtr->data);
     68 
     69        myBack = myBack->next;
     70 
     71        origPtr = origPtr->next;
     72 
     73      }
     74 
     75    }
     76 
     77  }
     78 
     79  
     80 
     81  Queue& operator=(const Queue& rhs)
     82 
     83  {
     84 
     85    if (this != &rhs)
     86 
     87    {
     88 
     89      this->~Queue();
     90 
     91      if (rhs.empty())
     92 
     93      myFront = myBack = 0;
     94 
     95      else
     96 
     97      {
     98 
     99        myFront = myBack = new Node(rhs.Front());
    100 
    101        Nodeptr rhsPtr = rhs.myFront->next;
    102 
    103        while (rhsPtr != 0)
    104 
    105        {
    106 
    107          myBack->next = new Node(rhsPtr->data);
    108 
    109          myBack = myBack->next;
    110 
    111          rhsPtr = rhsPtr->next;
    112 
    113        }
    114 
    115      }
    116 
    117    }
    118 
    119      return *this;
    120 
    121  }
    122 
    123  
    124 
    125  QueueElement Front() const
    126 
    127  {
    128 
    129      if (!empty())
    130 
    131      {
    132 
    133        return (myFront->data);
    134 
    135      }
    136 
    137      else
    138 
    139      {
    140 
    141        cout << "The Stack is empty!" << endl;
    142 
    143      }
    144 
    145  }
    146 
    147  
    148 
    149  bool empty() const
    150 
    151  {
    152 
    153      return myFront == 0;
    154 
    155  }
    156 
    157  void enqueue(const QueueElement& value)
    158 
    159  {
    160 
    161      Nodeptr newptr= new Node(value);
    162 
    163      if (empty())
    164 
    165      {
    166 
    167        myFront = myBack = newptr;
    168 
    169      }
    170 
    171      else
    172 
    173      {
    174 
    175        myBack->next = newptr;
    176 
    177        myBack = newptr;
    178 
    179      }
    180 
    181  }
    182 
    183  
    184 
    185  void Display()
    186 
    187  {
    188 
    189        Nodeptr ptr;
    190 
    191        for (ptr = myFront; ptr != 0; ptr = ptr->next)
    192 
    193        cout << ptr->data << " ";
    194 
    195        cout << endl;
    196 
    197  }
    198 
    199  void dequeue()
    200 
    201  {
    202 
    203      if (!empty())
    204 
    205      {
    206 
    207        Nodeptr ptr = myFront;
    208 
    209        myFront = myFront->next;
    210 
    211        delete ptr;
    212 
    213        if (myFront == 0)
    214 
    215        myBack == 0;
    216 
    217      }
    218 
    219      else
    220 
    221      {
    222 
    223        cout << "Stack is empty" << endl;
    224 
    225      }
    226 
    227  }
    228 
    229  private:
    230 
    231  typedef Node* Nodeptr;
    232 
    233  Nodeptr myFront;
    234 
    235  Nodeptr myBack;
    236 
    237  };
    238 
    239  void main()
    240 
    241  {
    242 
    243      Queue s;
    244 
    245      cout<<s.empty()<<endl;
    246 
    247      for (QueueElement i = 1; i < 6; ++i)
    248 
    249      {
    250 
    251           s.enqueue(i);
    252 
    253      }
    254 
    255      cout << s.empty() << endl;
    256 
    257      cout << s.Front() << endl;
    258 
    259      s.Display();
    260 
    261      s.dequeue();
    262 
    263  
    264 
    265      s.Display();
    266 
    267      Queue s1;
    268 
    269      s1 = s;
    270 
    271      s.Display();
    272 
    273      Queue s2(s);
    274 
    275      s2.Display();
    276 
    277      system("pause");
    278 
    279  }
  • 相关阅读:
    Linux用户行为日志审计
    日志分析-Web
    secedit.exe 本地审核
    StreamCQL
    一个关于缓存很好的文章~
    Java免费开源数据库、Java嵌入式数据库、Java内存数据库
    MySQL db优化
    威胁情报
    《javascript设计模式》读书笔记二(封装和隐藏信息)
    Mysql触发器
  • 原文地址:https://www.cnblogs.com/yuanshuang/p/5361232.html
Copyright © 2011-2022 走看看