程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++數據結構學習之棧和隊列

C++數據結構學習之棧和隊列

編輯:C++入門知識

C++數據結構學習中,順序表示的隊列,必須預先分配空間,並且空間大小受限,使用起來限制比較多。而且,由於限定存取位置,順序表示的隨機存取的優點就沒有了,所以,鏈式結構應該是首選。

棧的定義和實現

  1. #ifndef Stack_H  
  2. #define Stack_H   
  3. #include "List.h"  
  4.  
  5. template <class Type> class Stack : List//棧類定義  
  6. {  
  7.  public:  
  8. void Push(Type value)  
  9. {  
  10.  Insert(value);  
  11. }  
  12.  
  13.  Type Pop()  
  14.  {  
  15. Type p = *GetNext();  
  16. RemoveAfter();  
  17. return p;  
  18.  }  
  19.  
  20.  Type GetTop()  
  21.  {  
  22. return *GetNext();  
  23.  }  
  24.  
  25.  List ::MakeEmpty;  
  26.  List ::IsEmpty;  
  27.  
  28. };  
  29.  
  30. #endif 

隊列的定義和實現

  1. #ifndef Queue_H  
  2. #define Queue_H  
  3. #include "List.h"  
  4.  
  5. template <class Type> class Queue : List//隊列定義  
  6. {  
  7.  public:  
  8. void EnQueue(const Type &value)  
  9. {  
  10.  LastInsert(value);  
  11. }  
  12.  
  13.  Type DeQueue()  
  14.  {   
  15. Type p = *GetNext();  
  16. RemoveAfter();  
  17. IsEmpty();  
  18. return p;  
  19.  }  
  20.  
  21.  Type GetFront()  
  22.  {  
  23. return *GetNext();  
  24.  }  
  25.  
  26.  List ::MakeEmpty;  
  27.  List ::IsEmpty;  
  28.  
  29. };  
  30. #endif 

測試程序

  1. #ifndef StackTest_H  
  2. #define StackTest_H  
  3. #include "Stack.h"  
  4.  
  5. void StackTest_int()  
  6. {  
  7.  cout << endl << "整型棧測試" << endl;  
  8.  cout << endl << "構造一個空棧" << endl;  
  9.  Stack<int> a;  
  10.  cout << "將1~20入棧,然後再出棧" << endl;  
  11.  for (int i = 1; i <= 20; i++) a.Push(i);  
  12. while (!a.IsEmpty()) cout << a.Pop() << ' ';  
  13. cout << endl;  
  14. }  
  15. #endif  
  16.  
  17. #ifndef QueueTest_H  
  18. #define QueueTest_H  
  19. #include "Queue.h"  
  20.  
  21. void QueueTest_int()  
  22. {  
  23.  cout << endl << "整型隊列測試" << endl;  
  24.  cout << endl << "構造一個空隊列" << endl;  
  25.  Queue<int> a;  
  26.  cout << "將1~20入隊,然後再出隊" << endl;  
  27.  for (int i = 1; i <= 20; i++) a.EnQueue(i);  
  28.  while (!a.IsEmpty()) cout << a.DeQueue() << ' ';  
  29.  cout << endl;  
  30. }  
  31. #endif 

沒什麼好說的,你可以清楚的看到,在單鏈表的基礎上,棧和隊列的實現是如此的簡單。

如讀者希望繼續閱讀棧和隊列的應用,請閱讀拓展文章C++數據結構學習之棧的應用C++數據結構學習之隊列的應用 。

  1. 淺析C++棧使用方法
  2. 18.3.1 隊列的概念
  3. 數據庫使用C++數據結構
  4. 程序員必看 c++筆試題匯總
  5. c++編程常用工具

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved