Csharp-堆棧基礎

使用堆棧學習命令模式-基於Unity命令模式
堆棧、隊列是 數據結構中的知識
1、神馬的堆(Heap)?

原理:負責保存對象、能在任意時間被訪問。沒有任何的限制 動態釋放內存(理解爲手動釋放)
堆(Heap)
順序隨意

堆是無序的,是一片不連續的內存域,由用戶自己來控制和釋放,如果用戶自己不釋放的話,當內存達到一定的特定值時,通過垃圾回收器(GC)來回收。程序運行期間動態分配的內存空間,你可以根據程序的運行情況確定要分配的堆內存的大小。
圖-1

2、神馬是棧(Stack)?先進後出、後進先出

原理:棧是有順序的,是一片連續的內存域,保持着先進後出的原則,由系統自動分配和維護。是編譯期間就分配好的內存空間,因此代碼中必須就棧的大小有明確的定義。表尾允許進行插入刪除操作,稱爲棧頂(Top),另一端是固定的,稱爲棧底(Bottom)。
那麼棧的成員方法有那些?
通俗的講:棧就是一個桶,後放進去的先拿出來,它下面本來有的東西要等它出來之後才能出來。
直白點來說:棧是用的比較多的東西。

成員方法:
Push():將對象插入到棧的頂部
Pop():移除並返回棧頂部的一個對象
Peek():返回棧頂部第一個對象、但不刪除對象
Clear():移除所有元素

在這裏插入圖片描述
圖-2
所以這裏上代碼了:
圖-4
3、堆和棧的區別?
棧和堆中主要放置了四種類型的數據:
值類型(Value Type),
引用類型(Reference Type),
指針(Pointer),
指令(Instruction)

棧頂和棧頂的區分在於:棧是沒有大小限制的、棧頂即爲當前對象的方法體開始、棧尾最後一個對象的方法尾
堆是在程序運行時,而不是在程序編譯時,申請某個大小的內存空間。即動態分配內存,對其訪問和對一般內存的訪問沒有區別。

圖-3
堆棧(Stack) 是一種特殊的線性表,是一種操作只允許在尾端進行插入或刪除等操作的線性表。

4、神馬是隊列(Queue)?先進先出(後進後出)

原理:特殊的一種線性表、只允許在表的前端(Front)進行“刪除”操作、在表的後端(Rear)進行“添加”操作

隊列是一種特殊的線性表,它只允許在表的前端(Front)進行刪除操作,而在表的後端(Rear)進行插入操作。
進行插入操作的表尾稱爲隊尾(Rear),把進行其他操作的頭部稱爲隊頭(Front)。
隊列中沒有元素時,稱爲空隊列,隊列具有先進先出(FIFO)的特點。

隊列(Queue)是插入操作限定在表的尾部而其他操作限定在表的頭部進行的線性表。
順序隊列(Sequence Queue)用一片連續的存儲空間來存儲隊列中的數據元素,類似於順序表,用一維數組來存放隊列中的數據元素。
循環順序隊列(Circular sequence Queue)解決順序隊列的假溢出的方法是將順序隊列看成是首位相接的循環結構。
鏈隊列(Linked Queue)隊列的另外一種存儲方式是鏈式存儲,通常用單鏈表表示。

成員方法:
Contains():判斷元素是否在隊列中
Dequeue():移除並返回 隊列前端的對象
Enqueue():向對象後端(尾部)添加一個對象
Clear():從隊列中移除所有元素

在這裏插入圖片描述在這裏插入圖片描述

下面的話是使用堆棧來實行命令模式的圖:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章