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

2022-12-21 22:00:02 字數 5014 閱讀 2093

1樓:匿名使用者

退棧就是指把乙個資料從棧裡刪除,也就是從棧頂取出乙個元素(該資料不用儲存,如是出棧操作則該資料要儲存)。。同時棧頂指標減一。。。

2樓:殷珧淦高峰

由於"棧"

往往和"堆疊"聯絡在一起,所以我就一起解釋這兩個概念:

在計算機領域,堆疊是乙個不容忽視的概念,但是很多人甚至是計算機專業的人也沒有明確堆疊其實是兩種資料結構。堆疊都是一種資料項按序排列的資料結構,只能在一端(稱為棧頂(top))對資料項進行插入和刪除。要點:

堆:順序隨意棧:後進先出(last-in/first-out)

棧:在函式呼叫時,第乙個進棧的是主函式中函式呼叫後的下一條指令(函式呼叫語句的下一條可執行語句)的位址,然後是函式的各個引數,在大多數的c編譯器中,引數是由右往左入棧的,然後是函式中的區域性變數。注意靜態變數是不入棧的。

當本次函式呼叫結束後,區域性變數先出棧,然後是引數,最後棧頂指標指向最開始存的位址,也就是主函式中的下一條指令,程式由該點繼續執行。

堆:一般是在堆的頭部用乙個位元組存放堆的大小。堆中的具體內容有程式設計師安排。

還有就是資料結構方面的堆和棧,這些都是不同的概念。這裡的堆實際上指的就是(滿足堆性質的)優先佇列的一種資料結構,第1個元素有最高的優先權;棧實際上就是滿足後進先出的性質的數學或資料結構。

雖然堆疊,堆疊的說法是連起來叫,但是他們還是有很大區別的,連著叫只是由於歷史的原因。

(以下是我找到的乙個形象理解)

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

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

(這個理解夠形象了吧?)

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

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

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

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

c語言進棧和退棧步驟這裡沒看懂

3樓:匿名使用者

第乙個寫錯了,也應該是而不是top。

這裡的棧應該是定義成了結構體,像這樣:

#define m 128

typedef int datatype;

typedef struct tagstackstack;

stack s;

c語言中,什麼是棧,什麼是堆

4樓:非常可愛

1、棧區(stack):由編譯器自動分配釋放,存放函式的引數值,區域性變數等值。區域性變數,任務執行緒函式之類的是放在(使用)棧裡面的,棧利用率高一些。

其操作方式類似於資料結構中的棧。特別,棧是屬於執行緒的,每乙個執行緒會有乙個自己的棧。

2、堆區(heap):一般由程式設計師分配釋放,若程式設計師不釋放,則可能會引起記憶體洩漏。注意它和資料結構中的堆是兩回事,分配方式倒是類似於連結串列,常見的就是malloc出來的都是屬於堆區,就像固定出來的區域,到free的時候才釋放,有點類似全域性的,靜態的。

5樓:人間一枚惆悵客

棧是系統自動分配記憶體的,堆是程式設計師自己動態申請的記憶體比如,你int i;i就是存放在棧記憶體裡面比如char *p=(char*)malloc(sizeof(char));p指向的記憶體就是存放在堆記憶體裡面的。

希望能幫到你。

6樓:圈圈叉叉叉叉圈

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

如果你的這兩個語句是出現在全域性部分,那這個i就是被儲存在全域性/靜態儲存區;如果是出現在區域性某個函式裡,那i就被儲存的棧裡面。具體可以怎麼理解?

棧裡的東西自動分配記憶體空間,自動釋放記憶體,而堆裡面的東西只要是用到記憶體的都要手動分配,malloc函式在這個時候就起作用了。

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

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

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

7樓:楊塵一

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

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

堆,一段完全獨立於當前函式或者棧幀的記憶體區。如果乙個函式中宣告了一些變數,而且希望當這個函式完成時其中宣告的變數仍然存在,就可以將這些變數置於堆中。 堆和棧相比,沒那麼清晰的結構性。

可以把堆可作是一「堆」小玩藝。程式可以在任何時間向這個「堆」增加新的東西,或者修改堆中已有的東西。

8樓:匿名使用者

**中使用的普通變數、陣列、指標等,使用的都是稱作「堆」的記憶體,而呼叫函式時傳遞的引數則使用「棧」記憶體。這是系統管的事,一開始,程式設計者沒必要關心這方面的內容。

用c語言編寫函式實現順序棧的進棧、退棧、取棧頂的演算法。

9樓:匿名使用者

#include

#define stacksize 100 //假定預分配的棧空間最多為100 個元素。

typedef char elementtype; /假定棧元素的資料型別為字元 ,在此處可以自行設定。

typedef struct

seqstack;

// 置空棧。

void initstack(seqstack *s)//判棧空。

int stackempty(seqstack *s)//入棧。

void push(seqstack *s,elementtype x)

}//出棧。

elementtype pop(seqstack *s)}/取棧頂元素(只是想知道棧頂的值,並沒有出棧)elementtype gettop(seqstack *s)else return s->data[s->top];

}int main()

c語言中的棧、堆是什麼?

10樓:地面離家出走

c語言中的堆和棧都是一種資料項按序排列的資料結構。

棧就像裝資料的桶或箱子。

我們先從大家比較熟悉的棧說起吧,它是一種具有後進先出性質的資料結構,也就是說後存放的先取,先存放的後取。

這就如同我們要取出放在箱子裡面底下的東西(放入的比較早的物體),我們首先要移開壓在它上面的物體(放入的比較晚的物體)。

堆像一棵倒過來的樹。

而堆就不同了,堆是一種經過排序的樹形資料結構,每個結點都有乙個值。

通常我們所說的堆的資料結構,是指二叉堆。堆的特點是根結點的值最小(或最大),且根結點的兩個子樹也是乙個堆。

由於堆的這個特性,常用來實現優先佇列,堆的訪問是隨意,這就如同我們在圖書館的書架上取書。

雖然書的擺放是有順序的,但是我們想取任意一本時不必像棧一樣,先取出前面所有的書,書架這種機制不同於箱子,我們可以直接取出我們想要的書。

有沒有人可以解釋入棧退棧?

11樓:匿名使用者

棧的特點是後進先出,就是說入棧的越早,出棧的時候出來的越晚。

形象一點,可以把棧理解為乙個只有乙個口的袋子,進棧的時候,按順序乙個個進去,出的時候,因為只有乙個口,還得從入口出去,所以只能是在上面的先出,下面的後出。

回到題目,過程是:

入棧:5,4,3,2,1

出棧一次:1出棧;這時棧裡還有元素:5,4,3,2;

入棧:a, b, c, d;

全部出棧:d,c, b,a,2,3,4,5;

所有元素的退棧順序是:1,d,c, b,a,2,3,4,5;

很明顯,你看的資料,給的答案是錯誤的,咱們要相信自己,書上的並不都是正確的。

c語言的棧中是如何刪除棧頂元素的?

12樓:匿名使用者

e = 這裡先將減1,然後將*賦值給e

實際上並沒有刪除任何資料,只是將指標下移了一位!

c語言中的出棧是什麼意思??

13樓:匿名使用者

不是的,是把指標指的位置移動了。而非是刪除資料。

當把資料押入棧的時候,先移動指標,指向下乙個位置,然後再押入。

當把資料押出棧的時候,先指向下乙個位置,然後再押入,再移動指標。

出棧和入棧的操作順序是相反的。乙個先動指標,乙個先動資料。

該圖為出棧的表示圖。畫畫板畫的,粗糙了點,湊合著看吧。

14樓:汐日南莘

出棧是輸出的意思!

這是資料結構裡面的一種儲存資料的方式!

類似以陣列!有先進後出的特點!

如果你要的話我可以給你乙個堆疊的程式!

15樓:匿名使用者

可以去檢視資料結構中的棧結構,filf 先進後出。

出棧的意思是彈出棧頂的元素,彈出的意思從記憶體中拷貝出來,刪除原有元素!

16樓:擁有你的色彩

。。不是的,資料先壓棧,在出棧,算是讀取資料,把資料從棧裡取出來。

棧的結構就是先進後出,先進棧的最後出棧,當然,取出之後棧上的資料是要釋放掉的。

在C語言中ppp,在C語言中, p p p p 有什麼區別

我看書中解釋 p 是先取出 p的值,再使p加1 p是個指標,給p加1,相當於讓p指向了x所在位址的下乙個位置,而對於x則是沒有任何影響 p 是使 p的值加1.p則是p指向的位置對應的值,題目中是 q,所以此時的 q就是x的值,為3,當輸出 q之後,再給 q即x自加1,所以x就變為4 付費內容限時免費...

在c語言中,在C語言中ch c A a 是什麼意思,其中ch和c是字元

在c語言中ch c a a 的意思是,是把表示大寫字母的變數c轉換為小寫字母的語句,使用前一般要先判斷一下的,如下 if c a c z ch c a a 因為當c b 時,c a 就等於1,然後1 a 就是 b 如果事先不檢測的話,當c不是大寫字母時作這樣的轉換是會無法理解的。在c語言中ch c ...

c語言中xyz是什麼意思,C語言中xyz是什麼意思

y z 判斷 y 等於 z,結果為真或假,即 1 或 0 所以 x 1或0 是等於運算子 是賦值運算子 的優先順序比 高 所以先算y z即x y z 當y z時式子為true 在c語言中bool值和int值可以轉換 即為1 當y!z時式子為false 即為0 x y和z相等 如果是整數表示大小一樣 ...