Python 堆、棧和隊列詳解


隊列:

1、隊列是一種特殊的線性表,特殊之處在於它只允許在表的前端(front)進行刪除操作,而在表的后端(rear)進行插入操作,和棧一樣,隊列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。

棧(stack):

1、棧(stack)又名堆棧,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底,棧就相當於一個有底的水桶,出棧的過程就像倒出水的過程,是先進后出。

2、棧(Stack)是操作系統在建立某個進程或者線程時(在支持多線程的操作系統中是線程)為這個線程建立的存儲區域。

堆(Heap):

1、堆是在程序運行時,而不是在程序編譯時,請求操作系統分配給自己某個大小的內存空間。即動態分配內存,對其訪問和對一般內存的訪問沒有區別。

2、堆是指程序運行時申請的動態內存,而棧只是指一種使用堆的方法(即先進后出)。棧是先進后出的,但是於堆而言卻沒有這個特性,兩者都是存放臨時數據的地方。 對於堆,我們可以隨心所欲的進行增加變量和刪除變量,不要遵循什么次序,只要你喜歡。

堆、棧、隊列之間的區別是?

1、堆是在程序運行時,而不是在程序編譯時,申請某個大小的內存空間。即動態分配內存,對其訪問和對一般內存的訪問沒有區別。

2、棧就是一個桶,后放進去的先拿出來,它下面本來有的東西要等它出來之后才能出來。(后進先出)

3、隊列只能在隊頭做刪除操作,在隊尾做插入操作.而棧只能在棧頂做插入和刪除操作。(先進先出)

Python中的堆棧  

1、內存中的堆棧和數據結構中的堆棧不是一個概念,可以說內存中的堆棧是真實存在的物理區,數據結構中的堆棧是抽象的數據存儲結構。
2、內存空間在邏輯上分為三部分:代碼區、靜態數據區和動態數據區,動態數據區又分為棧區和堆區。

​3、代碼區:存儲方法體的二進制代碼。高級調度(作業調度)、中級調度(內存調度)、低級調度(進程調度)控制代碼區執行代碼的切換。

4、靜態數據區:存儲全局變量、靜態變量、常量,常量包括final修飾的常量和String常量。系統自動分配和回收。
5、棧區:存儲運行方法的形參、局部變量、返回值。由系統自動分配和回收。
6、堆區:new一個對象的引用或地址存儲在棧區,指向該對象存儲在堆區中的真實數據。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM