c 的「棧」是什麼啊,C 中的棧是什麼意思

2021-03-27 18:44:12 字數 3822 閱讀 9850

1樓:匿名使用者

一種只能在一端進行插入和刪除操作的特殊線性表。它按照後進先出的原則儲存資料,先進入的資料被壓入棧底,最後的資料在棧頂,需要讀資料的時候從棧頂開始彈出資料(最後乙個資料被第乙個讀出來)。棧具有記憶作用,對棧的插入與刪除操作中,不需要改變棧底指標。

棧是允許在同一端進行插入和刪除操作的特殊線性表。允許進行插入和刪除操作的一端稱為棧頂(top),另一端為棧底(bottom);棧底固定,而棧頂浮動;棧中元素個數為零時稱為空棧。插入一般稱為進棧(push),刪除則稱為退棧(pop)。

棧也稱為後進先出表。

棧可以用來在函式呼叫的時候儲存斷點,做遞迴時要用到棧!

以上定義是在經典電腦科學中的解釋。

在計算機系統中,棧則是乙個具有以上屬性的動態記憶體區域。程式可以將資料壓入棧中,也可以將資料從棧頂彈出。在i386機器中,棧頂由稱為esp的暫存器進行定位。

壓棧的操作使得棧頂的位址減小,彈出的操作使得棧頂的位址增大。

棧在程式的執行中有著舉足輕重的作用。最重要的是棧儲存了乙個函式呼叫時所需要的維護資訊,這常常稱之為堆疊幀或者活動記錄。堆疊幀一般包含如下幾方面的資訊:

1. 函式的返回位址和引數

2. 臨時變數:包括函式的非靜態區域性變數以及編譯器自動生成的其他臨時變數。

2樓:暗影之王

定義:棧是限定僅在表頭進行插入和刪除操作的線性表。要搞清楚這個概念,首先要明白」棧「原來的意思,如此才能把握本質。

"棧「者,儲存貨物或供旅客住宿的地方,可引申為倉庫、中轉站,所以引入到計算機領域裡,就是指資料暫時儲存的地方,所以才有進棧、出棧的說法。

棧(stack)又名堆疊,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。

向乙個棧插入新元素又稱作進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從乙個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。

3樓:遊萱斐水

1、棧(stack)在電腦科學中是限定僅在表尾進行插入或刪除操作的線性表。

棧是一種資料結構,是只能在某一端插入和刪除的特殊線性表。它按照後進先出的原則儲存資料,先進入的資料被壓入棧底,最後的資料在棧頂,需要讀資料的時候從棧頂開始彈出資料(最後乙個資料被第乙個讀出來)。

2、棧是允許在同一端進行插入和刪除操作的特殊線性表。允許進行插入和刪除操作的一端稱為棧頂(top),另一端為棧底(bottom);棧底固定,而棧頂浮動;棧中元素個數為零時稱為空棧。插入一般稱為進棧(push),刪除則稱為退棧(pop)。

棧也稱為後進先出表(lifo--last

infirst

out表)。

棧可以用來在函式呼叫的時候儲存斷點,做遞迴時要用到棧。

4樓:奈樹枝毓戊

堆疊是一種執行「後進先出」演算法的資料結構。

設想有乙個直徑不大、一端開口一端封閉的竹筒。有若干個寫有編號的小球,小球的直徑比竹筒的直徑略小。現在把不同編號的小球放到竹筒裡面,可以發現一種規律:

先放進去的小球只能後拿出來,反之,後放進去的小球能夠先拿出來。所以「先進後出」就是這種結構的特點。

堆疊就是這樣一種資料結構。它是在記憶體中開闢乙個儲存區域,資料乙個乙個順序地存入(也就是「壓入——push」)這個區域之中。有乙個位址指標總指向最後乙個壓入堆疊的資料所在的資料單元,存放這個位址指標的暫存器就叫做堆疊指示器。

開始放入資料的單元叫做「棧底」。資料乙個乙個地存入,這個過程叫做「壓棧」。在壓棧的過程中,每有乙個資料壓入堆疊,就放在和前乙個單元相連的後面乙個單元中,堆疊指示器中的位址自動加1。

讀取這些資料時,按照堆疊指示器中的位址讀取資料,堆疊指示器中的位址數自動減

1。這個過程叫做「彈出pop」。如此就實現了後進先出的原則。

堆疊是計算機中最常用的一種資料結構,比如函式的呼叫在計算機中是用堆疊實現的。

堆疊可以用陣列儲存,也可以用以後會介紹的連結串列儲存。

下面是乙個堆疊的結構體定義,包括乙個棧頂指標,乙個資料項陣列。棧頂指標最開始指向-1,然後存入資料時,棧頂指標加1,取出資料後,棧頂指標減1。

#define

max_size

100typedef

intdata_type;

struct

stack

;在c++中,記憶體分成5個區,他們分別是堆、棧、自由儲存區、全域性/靜態儲存區和常量儲存區。

棧,就是那些由編譯器在需要的時候分配,在不需要的時候自動清楚的變數的儲存區。裡面的變數通常是區域性變數、函式引數等。

堆,就是那些由new分配的記憶體塊,他們的釋放編譯器不去管,由我們的應用程式去控制,一般乙個new就要對應乙個delete。如果程式設計師沒有釋放掉,那麼在程式結束後,作業系統會自動**。

自由儲存區,就是那些由malloc等分配的記憶體塊,他和堆是十分相似的,不過它是用free來結束自己的生命的。

全域性/靜態儲存區,全域性變數和靜態變數被分配到同一塊記憶體中,在以前的c語言中,全域性變數又分為初始化的和未初始化的,在c++裡面沒有這個區分了,他們共同佔用同一塊記憶體區。

常量儲存區,這是一塊比較特殊的儲存區,他們裡面存放的是常量,不允許修改(當然,你要通過非正當手段也可以修改,而且方法很多.

5樓:繁仁尉緞

棧是一種資料結構,他的

特點就是先進先出,譬如你的那個陣列,當棧底指標為bottom時,他的指向為49(即陣列的最後乙個元素),此時如果top也指向49那麼棧是沒有元素的,當每向棧中放乙個資料的時候,棧頂指標就會向上移(即向陣列下標小方向移動),每一次移動一位,即top--,所以乙個元素top就為48,兩個元素top就為47,以此類推,所以當top=30時,棧中有19個元素

6樓:府綠柳拜釵

棧的儲存。

有19個元素,就是用bottom

--top

=19;

因為bottom指向棧底元素,top指向棧頂元素,相當於乙個在頭,乙個在尾,而他們中間的數,就是這個棧的儲存元素了。

c++中的棧是什麼意思

7樓:一起暢遊吧

棧是一種資料結構,他的特點就是先進先出,譬如你的那個陣列,當棧底指標為

內bottom時,他的指向為容49(即陣列的最後乙個元素),此時如果top也指向49那麼棧是沒有元素的,當每向棧中放乙個資料的時候,棧頂指標就會向上移(即向陣列下標小方向移動),每一次移動一位,即top--,所以乙個元素top就為48,兩個元素top就為47,以此類推,所以當top=30時,棧中有19個元素

8樓:安可

棧的儲存。

有19個元素,就是用bottom --top =19 ;

因為bottom指向棧底元素,top指向棧頂元素,相當於乙個在頭,乙個在尾,而他們中間的數,就是這個棧的儲存元素了。

9樓:匿名使用者

1、棧(stack)在電腦科學中是限定僅在表尾進行插入或刪除操作的線性表。 棧是一種數專據結構,是只能屬

在某一端插入和刪除的特殊線性表。它按照後進先出的原則儲存資料,先進入的資料被壓入棧底,最後的資料在棧頂,需要讀資料的時候從棧頂開始彈出資料(最後乙個資料被第乙個讀出來)。

2、棧是允許在同一端進行插入和刪除操作的特殊線性表。允許進行插入和刪除操作的一端稱為棧頂(top),另一端為棧底(bottom);棧底固定,而棧頂浮動;棧中元素個數為零時稱為空棧。插入一般稱為進棧(push),刪除則稱為退棧(pop)。

棧也稱為後進先出表(lifo--last in first out表)。 棧可以用來在函式呼叫的時候儲存斷點,做遞迴時要用到棧。

10樓:匿名使用者

棧就是一種先進先出的有組織有次序的資料序列

C語言棧是什麼,棧在哪,需要定義嗎

棧是一種資料結構,後進先出,即最後進入棧的資料最先彈出。c語言中沒有棧這種資料型別,需要自己程式設計構建。棧 是一種後進先出 lifo,或叫先進後出filo 的資料結構。這是資料結構的範疇。您所說的棧,是由作業系統負責管理的一段棧空間,在遞迴 子程式呼叫等處應用廣泛。這是作業系統的範疇。並不是在c語...

在c中什麼是退棧??C語言中,什麼是棧,什麼是堆

退棧就是指把乙個資料從棧裡刪除,也就是從棧頂取出乙個元素 該資料不用儲存,如是出棧操作則該資料要儲存 同時棧頂指標減一。由於 棧 往往和 堆疊 聯絡在一起,所以我就一起解釋這兩個概念 在計算機領域,堆疊是乙個不容忽視的概念,但是很多人甚至是計算機專業的人也沒有明確堆疊其實是兩種資料結構。堆疊都是一種...

關於用c語言寫的入棧和出棧程式,棧操作的問題

嗯,是你這樣理解,書上錯了 78,79行應改成top top next free p1 c語言 進棧和出棧 閒得沒事幹,跟你詳細講講吧。首先要弄明白一點,棧的結構是 先進後出 的,就像你堆積木一樣,第一根放在最底層的地面上,然後一根一根往上堆。前乙個放上去的總是被後乙個放上去的壓在底下。那我當我再想...