數據結構中的棧與內存中的棧的不同
一、數據結構中的堆棧
在數據結構中的堆棧,實際上堆棧是兩種數據結構:堆和棧。堆和棧都是一種數據項按序排列的數據結構。
1.棧就像裝數據的桶或箱子
我們先從大家比較熟悉的棧說起吧,它是一種具有后進先出性質的數據結構,也就是說后存放的先取,先存放的后取。這就如同我們要取出放在箱子里面底下的東西(放入的比較早的物體),我們首先要移開壓在它上面的物體(放入的比較晚的物體)。
2.堆像一棵倒過來的樹
而堆就不同了,堆是一種經過排序的樹形數據結構,每個結點都有一個值。通常我們所說的堆的數據結構,是指二叉堆。堆的特點是根結點的值最小(或最大),且根結點的兩個子樹也是一個堆。由于堆的這個特性,常用來實現優先隊列,堆的存取是隨意,這就如同我們在圖書館的書架上取書,雖然書的擺放是有順序的,但是我們想取任意一本時不必像棧一樣,先取出前面所有的書,書架這種機制不同于箱子,我們可以直接取出我們想要的書。
二、內存分配中的棧和堆
然而我要說的重點并不在這,我要說的堆和棧并不是數據結構的堆和棧,之所以要說數據結構的堆和棧是為了和后面我要說的堆區和棧區區別開來,請大家一定要注意。
棧中分配局部變量空間,堆區是向上增長的用于分配程序員申請的內存空間。另外還有靜態區是分配靜態變量,全局變量空間的;只讀區是分配常量和程序代碼空間的;以及其他一些分區
棧
創建一個結構體,里面包含一個數組就是我們的棧(用順序表的形式來存儲),還有一個整形來記錄棧的長度。
初始化就是讓棧中元素個數記為0就行。
往棧中加入數據,就是向下標為size 的數組元素中存值,存完后,數組長度size++。
刪除,就讓數據個數減一個就行。
讀棧頂元素就是要返回最后入棧的值,然后棧中元素個數減一。
隊列
隊列就用鏈表實現
棧和隊列的區別?
隊列是先進先出,有出口和入口,先進去可以先出來。
棧就像一個箱子,后放上去的,可以先出來