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

2021-04-20 16:51:38 字數 5681 閱讀 2485

1樓:匿名使用者

棧有兩種

一種是作業系統中的

程序棧 或者執行緒棧 系統自動生成 不需要定義一種是資料結構中的

需要自己實現。

c語言的「進棧」和「出棧」是什麼意思?

2樓:匿名使用者

棧使用連結串列來實現的.如果你不懂的連結串列,可以先了解一下連結串列.

int push(stack *s,int e)//進棧

出棧是一樣的.

3樓:徐璐煙子

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

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

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

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

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

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

4樓:我要鬥爭到死

棧是一種資料結構,後進先出,即最後進入棧的資料最先彈出。

c語言中沒有棧這種資料型別,需要自己程式設計構建。

5樓:匿名使用者

「棧」是一種後進先出(lifo,或叫先進後出filo)的資料結構。這是資料結構的範疇。

您所說的棧,是由作業系統負責管理的一段棧空間,在遞迴、子程式呼叫等處應用廣泛。這是作業系統的範疇。

——並不是在c語言範疇討論的概念。

6樓:匿名使用者

推薦你看下軟體技術基礎比較基礎的東西 其實就是一個資料結構

7樓:匿名使用者

你知道什麼是資料結構嗎?d,r,p

(c語言)棧的名稱是自己定義的還是系統自帶的

8樓:手機使用者

c語言的棧使用起來個人認為遠遠沒有彙編那麼舒服,定義棧是通過 struct 大概可以如下: #define mystack#define overflow -1#define stackinitsize 100tupedef struct mstack;void initstack() void main() 這個時候你就大概定義了一個 s 棧了

9樓:能夕歷乙

棧只是一種資料結構,具體表現形式可以是硬體實現的也可以是軟體實現的,當然現內

實生活中容的很多現象都與棧類似,不要去想他具體是個什麼東西,他就是一種思想,一種結構,好比別人排隊,那就是先進先出的,這不跟棧很像麼,軟體可以實現這樣的結構,你需要用這種思想的話,硬體就更多地方有它啦,特別是cpu裡,棧肯定是有的

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

10樓:非常可愛

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

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

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

擴充套件資料

棧記憶體是由編譯器自動分配與釋放的,它有兩種分配方式:靜態分配和動態分配。

1、靜態分配是由編譯器自動完成的,如區域性變數的分配(即在一個函式中宣告一個int型別的變數i時,編譯器就會自動開闢一塊記憶體以存放變數i)。

2、動態分配由alloca函式進行分配,但是棧的動態分配與堆是不同的,它的動態分配是由編譯器進行釋放,無需任何手工實現。

11樓:人間一枚惆悵客

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

希望能幫到你

12樓:圈圈叉叉叉叉圈

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

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

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

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

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

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

13樓:匿名使用者

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

14樓:務遠祝煙

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

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

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

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

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

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

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

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

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

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

#define

max_size

100typedef

intdata_type;

struct

stack

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

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

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

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

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

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

15樓:信耕順肖雀

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

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

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

16樓:地面離家出走

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

棧就像裝資料的桶或箱子

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

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

堆像一棵倒過來的樹

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

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

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

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

17樓:匿名使用者

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

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

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

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

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

讀取這些資料時,按照堆疊指示器中的地址讀取資料,堆疊指示器中的地址數自動減 1。這個過程叫做「彈出pop」。如此就實現了後進先出的原則。

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

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

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

#define max_size 100

typedef int data_type;

struct stack

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

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

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

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

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

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

C語言的壓棧和入棧出棧什麼意思啊誰有什麼好方法理解一

棧的特點是先進後出。你把棧當成一個水桶,把書一本本放進去,然後最先放的書就被壓在最下面,所以最先進去的,最後出來。壓棧就是入棧就是把書放進水桶,出棧就是把書拿出來。壓棧 和 出棧 是什麼意思啊 可以理解成機槍的彈夾,彈夾就是一個棧,子彈一顆一顆壓進去,就是壓棧,有個順序特點就是先進後出,後進先出,出...

在c語言中 巨集定義是什麼,在C語言中 巨集定義是什麼?

在c語言源程式中,允許用一個識別符號來表示一個字串,稱為巨集,巨集定義是由源程式中的巨集定義命令完成的,巨集替換是由預處理程式自動完成的。巨集定義是c提供的三種預處理功能的其中一種,這三種預處理包括 巨集定義 檔案包含 條件編譯。c語言中的巨集定義用法分為兩種。1 不帶引數的巨集定義比較簡單,就是用...

c語言中變數定義是什麼,c語言中exit怎麼定義?

型別說明符 變數名稱 賦值表示式。這是基本的。比如 int a 1 2 char b b 定義了一個整數型變數a 其值為1 2就是3,定義了一個字元型變數b,b的值為字元 b 型別說明符變數名稱還可以加修飾說明,比如前面加上const表示這是一個不能修改值得常量等等。變數 是一個能夠存放某個指定型別...