自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C++數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)之棧和隊(duì)列

開(kāi)發(fā) 后端
在C++中,棧和隊(duì)列是操作受限的線性表,好像每本講數(shù)據(jù)結(jié)構(gòu)的書都是這么說(shuō)的。有些書按照這個(gè)思路給出了定義和實(shí)現(xiàn);但是很遺憾,本文沒(méi)有這樣做。本文從鏈?zhǔn)浇Y(jié)構(gòu)角度給出棧和隊(duì)列的定義和實(shí)現(xiàn)。

  在C++數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)中,順序表示的隊(duì)列,必須預(yù)先分配空間,并且空間大小受限,使用起來(lái)限制比較多。而且,由于限定存取位置,順序表示的隨機(jī)存取的優(yōu)點(diǎn)就沒(méi)有了,所以,鏈?zhǔn)浇Y(jié)構(gòu)應(yīng)該是***。

  棧的定義和實(shí)現(xiàn)

  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 

  隊(duì)列的定義和實(shí)現(xiàn)

  1. #ifndef Queue_H  
  2. #define Queue_H  
  3. #include "List.h"  
  4.  
  5. template <class Type> class Queue : List//隊(duì)列定義  
  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 

  測(cè)試程序

  1. #ifndef StackTest_H  
  2. #define StackTest_H  
  3. #include "Stack.h"  
  4.  
  5. void StackTest_int()  
  6. {  
  7.  cout << endl << "整型棧測(cè)試" << endl;  
  8.  cout << endl << "構(gòu)造一個(gè)空棧" << 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 << "整型隊(duì)列測(cè)試" << endl;  
  24.  cout << endl << "構(gòu)造一個(gè)空隊(duì)列" << endl;  
  25.  Queue<int> a;  
  26.  cout << "將1~20入隊(duì),然后再出隊(duì)" << 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 

  沒(méi)什么好說(shuō)的,你可以清楚的看到,在單鏈表的基礎(chǔ)上,棧和隊(duì)列的實(shí)現(xiàn)是如此的簡(jiǎn)單。

  如讀者希望繼續(xù)閱讀棧和隊(duì)列的應(yīng)用,請(qǐng)閱讀拓展文章C++數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)之棧的應(yīng)用C++數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)之隊(duì)列的應(yīng)用 。

【編輯推薦】

  1. 淺析C++棧使用方法
  2. 18.3.1 隊(duì)列的概念
  3. 數(shù)據(jù)庫(kù)使用C++數(shù)據(jù)結(jié)構(gòu)
  4. 程序員必看 c++筆試題匯總
  5. c++編程常用工具
責(zé)任編輯:韓亞珊 來(lái)源: 天極網(wǎng)
相關(guān)推薦

2011-04-11 12:22:11

數(shù)據(jù)結(jié)構(gòu)C++

2011-04-11 12:48:36

隊(duì)列數(shù)據(jù)結(jié)構(gòu)C++

2011-04-11 17:09:37

稀疏矩陣矩陣C++

2022-03-31 11:17:58

JavaScript數(shù)組方法

2012-02-02 10:21:05

單鏈表nexthead

2020-12-17 10:12:33

數(shù)據(jù)結(jié)構(gòu)算法隊(duì)列

2009-08-11 14:51:11

C#數(shù)據(jù)結(jié)構(gòu)與算法

2021-07-16 07:57:34

Python數(shù)據(jù)結(jié)構(gòu)

2024-01-15 06:01:36

C++數(shù)組

2009-08-11 14:43:42

C#數(shù)據(jù)結(jié)構(gòu)與算法

2010-01-27 15:58:35

C++數(shù)據(jù)結(jié)構(gòu)

2009-08-13 16:02:29

C#結(jié)構(gòu)

2023-12-13 10:01:15

數(shù)據(jù)結(jié)構(gòu)c++編程

2011-07-20 17:10:54

C++

2021-06-08 06:01:00

C++數(shù)據(jù)結(jié)構(gòu)向量和數(shù)組

2022-09-01 16:27:19

JavaScriptWeb開(kāi)發(fā)

2012-05-16 17:05:33

Java數(shù)據(jù)結(jié)構(gòu)

2020-10-28 10:10:03

Java單鏈表數(shù)據(jù)結(jié)構(gòu)

2010-07-19 11:07:13

Perl控制結(jié)構(gòu)

2009-08-12 18:35:17

C#數(shù)據(jù)結(jié)構(gòu)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)