队列
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 }