1、棧中的“先進後出,後進先出”意思是:
棧的概念是彈壓,就像子彈殼裝彈,一粒一粒壓進去,但是打出來的時候是從上面打出來的,最先壓進去的最後彈出來,如果進去順序是123,打出來順序是321,這就是後進先出。
2、棧的定義:
3、棧與佇列的區別:
佇列的概念就是我們平時排隊,按次序來,你排在第1個,那你就第一個輪到,就是先進先出,先到先來。
4、棧在計算機領域裡解釋:
棧作為一種資料結構,是一種只能在一端進行插入和刪除操作的特殊線性表。它按照後進先出的原則儲存資料,先進入的資料被壓入棧底,最後的資料在棧頂,需要讀資料的時候從棧頂開始彈出資料(最後一個數據被第一個讀出來)。棧具有記憶作用,對棧的插入與刪除操作中,不需要改變棧底指標。
棧是允許在同一端進行插入和刪除操作的特殊線性表。允許進行插入和刪除操作的一端稱為棧頂(top),另一端為棧底(bottom);棧底固定,而棧頂浮動;棧中元素個數為零時稱為空棧。插入一般稱為進棧(PUSH),刪除則稱為退棧(POP)。棧也稱為後進先出表。
棧可以用來在函式呼叫的時候儲存斷點,做遞迴時要用到棧!
5、堆和棧的區別:
(1)作業系統方面區別:
在使用棧就象我們去飯館裡吃飯,只管點菜(發出申請)、付錢、和吃(使用),吃飽了就走,不必理會切菜、洗菜等準備工作和洗碗、刷鍋等掃尾工作,他的好處是快捷,但是自由度小。使用堆就象是自己動手做喜歡吃的菜餚,比較麻煩,但是比較符合自己的口味,而且自由度大。
(2)資料結構方面區別:
還有就是資料結構方面的堆和棧,這些都是不同的概念。這裡的堆實際上指的就是(滿足堆性質的)優先佇列的一種資料結構,第1個元素有最高的優先權;棧實際上就是滿足先進後出的性質的數學或資料結構。雖然堆疊,堆疊的說法是連起來叫,但是他們還是有很大區別的,連著叫只是由於歷史的原因。
6、程式例子//main.cppint a = 0; 全域性初始化區char *p1; 全域性未初始化區main(){int b; 棧char s[] = "abc"; 棧char *p2; 棧char *p3 = "123456"; 123456在常量區,p3在棧上。static int c =0; 全域性(靜態)初始化區p1 = (char *)malloc(10);p2 = (char *)malloc(20);分配得來得10和20位元組的區域就在堆區。strcpy(p1, "123456"); 123456放在常量區,編譯器可能會將它與p3所指向的"123456"最佳化成一個地方。}
1、棧中的“先進後出,後進先出”意思是:
棧的概念是彈壓,就像子彈殼裝彈,一粒一粒壓進去,但是打出來的時候是從上面打出來的,最先壓進去的最後彈出來,如果進去順序是123,打出來順序是321,這就是後進先出。
2、棧的定義:
3、棧與佇列的區別:
佇列的概念就是我們平時排隊,按次序來,你排在第1個,那你就第一個輪到,就是先進先出,先到先來。
4、棧在計算機領域裡解釋:
棧作為一種資料結構,是一種只能在一端進行插入和刪除操作的特殊線性表。它按照後進先出的原則儲存資料,先進入的資料被壓入棧底,最後的資料在棧頂,需要讀資料的時候從棧頂開始彈出資料(最後一個數據被第一個讀出來)。棧具有記憶作用,對棧的插入與刪除操作中,不需要改變棧底指標。
棧是允許在同一端進行插入和刪除操作的特殊線性表。允許進行插入和刪除操作的一端稱為棧頂(top),另一端為棧底(bottom);棧底固定,而棧頂浮動;棧中元素個數為零時稱為空棧。插入一般稱為進棧(PUSH),刪除則稱為退棧(POP)。棧也稱為後進先出表。
棧可以用來在函式呼叫的時候儲存斷點,做遞迴時要用到棧!
5、堆和棧的區別:
(1)作業系統方面區別:
在使用棧就象我們去飯館裡吃飯,只管點菜(發出申請)、付錢、和吃(使用),吃飽了就走,不必理會切菜、洗菜等準備工作和洗碗、刷鍋等掃尾工作,他的好處是快捷,但是自由度小。使用堆就象是自己動手做喜歡吃的菜餚,比較麻煩,但是比較符合自己的口味,而且自由度大。
(2)資料結構方面區別:
還有就是資料結構方面的堆和棧,這些都是不同的概念。這裡的堆實際上指的就是(滿足堆性質的)優先佇列的一種資料結構,第1個元素有最高的優先權;棧實際上就是滿足先進後出的性質的數學或資料結構。雖然堆疊,堆疊的說法是連起來叫,但是他們還是有很大區別的,連著叫只是由於歷史的原因。
6、程式例子//main.cppint a = 0; 全域性初始化區char *p1; 全域性未初始化區main(){int b; 棧char s[] = "abc"; 棧char *p2; 棧char *p3 = "123456"; 123456在常量區,p3在棧上。static int c =0; 全域性(靜態)初始化區p1 = (char *)malloc(10);p2 = (char *)malloc(20);分配得來得10和20位元組的區域就在堆區。strcpy(p1, "123456"); 123456放在常量區,編譯器可能會將它與p3所指向的"123456"最佳化成一個地方。}