c 怎麼定義堆疊,C 怎麼定義堆疊

2021-08-16 03:10:27 字數 5064 閱讀 2468

1樓:吉祥二進位制

堆空間一般有作業系統的堆管理器來處理,棧空間一般是應用程式自動**管理的,以windows為例,每一個應用程式預設的堆和棧空間大小都為1m。使用者可以使用如下預處理命令指示連結器設定堆或者棧空間的大小。

#pragma comment(linker, "/stack:1024000000,1024000000")

/stack:[保留虛擬記憶體],[提交虛擬記憶體]  ,這裡的大小都是位元組。所以上面的1024000000是位元組數。

2樓:量子

看你用什麼開發環境了,一般都有現成的類可以使用,tc,mfc,stl都有,一般不用自己設計,除非你是做資料結構作業題,那必須自己做

3樓:匿名使用者

class cstack

~cstack()

}bool push(int data)m_pdata[m_ntop++] = data;

return true;

}bool pop(int data)

data = m_pdata[--m_ntop];

return true;

}priviate:

int m_nlength;

int m_ntop;

int * m_pdata;};

4樓:匿名使用者

efgvarsdjtsykdufl

c++怎麼定義一個指定大小的堆疊?

5樓:天使

c語言的堆疊我也沒用過。

不過c語言能自己定義個堆,用malloc函式,然後自己回寫幾個函式,模擬入棧堆疊。答

在彙編中,堆疊是通過暫存器內部地址指向,來定義棧頂的,大小未定義。

然後從這個棧頂開始,用push往棧裡新增(入棧),用pop往棧裡取出(出棧)。

具體的彙編指定舉例如下:

push ax //把暫存器ax的值壓入棧

pop ax //取棧的值,到暫存器ax中

而棧的地址則有ss、sp這兩個暫存器指定,棧沒有大小,要人工防止溢位。

具體c結合彙編,是一定能寫出一個堆疊的,不過可能比較麻煩,我也剛研究彙編,不是太懂。這裡只能給樓主一些思路。

6樓:罪惡欲都

自己實現結構體的定義和push,pop的方法一般是c語言,c++中提供了stl就是標準模板庫,裡面有常用的資料結構,棧、佇列、優先佇列等,建議c++使用stl。

7樓:小傻

c++定義一個bai指定大小的堆du

棧使用如下方

zhi式:

堆空間一般有操dao作系統的堆內

管理器來處理,棧

容空間一般是應用程式自動**管理的,以windows為例,每一個應用程式預設的堆和棧空間大小都為1m。使用者可以使用如下預處理命令指示連結器設定堆或者棧空間的大小。

#pragma comment(linker, "/stack:1024000000,1024000000")

/stack:[保留虛擬記憶體],[提交虛擬記憶體] ,這裡的大小都是位元組。所以上面的1024000000是位元組數。

8樓:忽忽上升

可以直接引用。

#include

stacks1(30);//定義一個30大小的int型棧

c++堆疊的各自大小,堆和棧的各自定義

9樓:匿名使用者

這裡的堆和棧不僅僅是按照資料結構裡的堆和棧來理解,更傾向於表示兩種不同作回用的記憶體區域答。

棧是有編譯器來管理的,具體的大小可能根據編譯器不同而異,編譯器也可以手動設定棧的大小,通常有1m和2m的,比如在你定義變數時,由編譯器將變數壓棧,作用域結束,編譯器控制變數出棧,程式設計師不能很直接的操作棧。

堆記憶體是向系統申請的記憶體,由程式設計師管理的,你new或者malloc時系統正常情況下回給你一塊堆記憶體空間,你愛什麼時候存資料都行,想存什麼就存什麼,想什麼時候釋放(delete,free)都可以。堆的大小沒有什麼具體數值,看機器的執行狀況,配置狀況而定。

c++的“棧”是什麼啊?

10樓:匿名使用者

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

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

棧也稱為後進先出表。

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

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

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

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

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

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

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

11樓:暗影之王

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

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

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

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

12樓:遊萱斐水

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

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

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

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

infirst

out表)。

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

13樓:奈樹枝毓戊

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

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

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

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

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

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

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

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

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

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

#define

max_size

100typedef

intdata_type;

struct

stack

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

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

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

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

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

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

14樓:繁仁尉緞

棧是一種資料結構,他的

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

15樓:府綠柳拜釵

棧的儲存。

有19個元素,就是用bottom

--top

=19;

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

C中堆和堆疊有什麼不一樣,C 堆和堆疊有什麼區別

一個由c c 編譯的程式佔用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os 注意它與資料結構中的堆是兩回事,分配方式倒是類...

組合語言中,為什麼定義堆疊段的時候後面要多加stack如 stack segment s

assume cs code,ss stack,ds data 段說明,自己定義的code對應 段,stack對應堆疊段,data對應資料段 stack segment stack 堆疊段的定義byte 64 dup 0 stack ends data segment 資料段的定義msg byte ...

關於C 巨集定義問題,關於C 巨集定義避免多次包含的問題,如何解決?

c 巨集定義將一個識別符號定義為一個字串,源程式中的該識別符號均以指定的字串來代替。前面已經說過,預處理命令不同於一般c 語句。因此預處理命令後通常不加分號。這並不是說所有的預處理命令後都不能有分號出現。由於巨集定義只是用巨集名對一個字串進行簡單的替換,因此如果在巨集定義命令後加了分號,將會連同分號...