更新時(shí)間:2021-08-23 12:09:56 來源:動(dòng)力節(jié)點(diǎn) 瀏覽2064次
一個(gè)由C/C++編譯的程序占用的內(nèi)存分為以下幾個(gè)部分
(1)棧區(qū)(stack)— 由編譯器自動(dòng)分配釋放 ,存放函數(shù)的參數(shù)值,局部變量的值等。其操作方式類似于數(shù)據(jù)結(jié)構(gòu)中的棧。
(2)堆區(qū)(heap) — 一般由程序員分配釋放, 若程序員不釋放,程序結(jié)束時(shí)可能由OS回收 。注意它與數(shù)據(jù)結(jié)構(gòu)中的堆是兩回事,分配方式倒是類似于鏈表。
(3)全局區(qū)(靜態(tài)區(qū))(static)— 全局變量和靜態(tài)變量的存儲(chǔ)是放在一塊的,初始化的全局變量和靜態(tài)變量在一塊區(qū)域, 未初始化的全局變量和未初始化的靜態(tài)變量在相鄰的另一塊區(qū)域。程序結(jié)束后由系統(tǒng)釋放。
(4)文字常量區(qū) — 常量字符串就是放在這里的,程序結(jié)束后由系統(tǒng)釋放 。
(5)程序代碼區(qū) — 存放函數(shù)體的二進(jìn)制代碼。
堆棧應(yīng)用非常廣的棧LIFO(后進(jìn)先出)
(1)洗盤子。用過的盤子一個(gè)一個(gè)疊放,那么最上面的盤子先洗,然后是下面的。
(2)遞歸函數(shù)返回地址。程序先執(zhí)行的函數(shù)地址扔到最底下,直到遞送到有明確返回值函數(shù)地址后,在歸回上一層處理它,直到最底部函數(shù)都處理完。
在JAVA中有兩種形式體現(xiàn)
(1)自己編寫實(shí)例代碼:(主要操作方法為:push()、pop())
這段代碼就是首先定義一個(gè)stack堆棧類,堆棧類里有個(gè)存放值的數(shù)組,有個(gè)指針tos(姑且看過做指針)
當(dāng)我們push的時(shí)候,stck[]數(shù)組每加一個(gè)值,tos就加1相當(dāng)于指針在移動(dòng),同理當(dāng)我們pop的時(shí)候,指針-1也是在移動(dòng)
class Stack{
int stck[] = new int[10];
int tos;
Stack(){
tos = -1;
}
void push(int item){
if(tos == 9)
System.out.println("Stack is full.");
else
stck[++tos] = item;
}
int pop(){
if(tos < 0){
System.out.println("Stack underflow.");
return 0;
}else{
return stck[tos--];
}
}
}
public class TestStack{
public static void main(String args[]){
Stack mystack1 = new Stack();//new 兩個(gè)mystack對(duì)象
Stack mystack2 = new Stack();
for (int i = 0;i<10 ;i++ )
{mystack1.push(i);}//循環(huán)0,9 將 0到9按順序插入到mystack1中的數(shù)組stck中 (此處++tos后才加 開始tos=-1 ++后就是0)
for(int i =10;i<20;i++)
{mystack2.push(i);}//循環(huán)10,19 將 10到19按順序插入到mystack1中的數(shù)組stck中
System.out.println("Stack in mystack1:");//打印此語句
for(int i = 0;i<10;i++)
System.out.println(mystack1.pop());//循環(huán)9,0打印stck中值 依次是stck[9],stck[8]...stck[0]
System.out.println("Stack in mystack2:");
for(int i = 10;i<20;i++)
System.out.println(mystack2.pop());//循環(huán)19,10打印stck中值 依次是stck[19],stck[18]...stck[10]
}
}
(2)使用系統(tǒng)提供好的Queue類
使用boolean add(E e)添加對(duì)象
使用 E poll() 獲取并移除此隊(duì)列的頭
以上就是動(dòng)力節(jié)點(diǎn)小編介紹的"堆棧的作用和用途",希望對(duì)大家有幫助,想了解更多可查看Java堆棧。動(dòng)力節(jié)點(diǎn)在線學(xué)習(xí)教程,針對(duì)沒有任何Java基礎(chǔ)的讀者學(xué)習(xí),讓你從入門到精通,主要介紹了一些Java基礎(chǔ)的核心知識(shí),讓同學(xué)們更好更方便的學(xué)習(xí)和了解Java編程,感興趣的同學(xué)可以關(guān)注一下。
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)