資料結構 3 棧的操作

2022-10-09 11:54:10 字數 2259 閱讀 9817

棧(stack)又名堆疊,它是一種運算受限的線性表。限定僅在表尾進行插入和刪除操作的線性表。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從乙個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。

1、新增相關標頭檔案

#include #include #include
2、定義棧

typedef struct stack  stack;
3、初始化棧

stack *init(int n)
4、判斷是否為空及檢視棧頂

int empty(stack *s) 

int top(stack *s)

5、插入

int push(stack *s, int val)
6、出棧操作

int pop(stack *s)
7、清空

void clear(stack *s)
8、輸出棧

void output(stack *s) 

printf("]\n");

return ;

}

9、主函式(隨機進行20次隨機測試)

int main()  break;

case 1:

}output(s);

}return 0;

}

10、完整**

#include #include #include typedef struct stack  stack;

stack *init(int n)

int empty(stack *s)

int top(stack *s)

int push(stack *s, int val)

int pop(stack *s)

void clear(stack *s)

void output(stack *s)

printf("]\n");

return ;

}int main() break;

case 1:

}output(s);

}return 0;

}

要搞清楚這個概念,首先要明白」棧「原來的意思,如此才能把握本質。棧,儲存貨物或供旅客住宿的地方,可引申為倉庫、中轉站,所以引入到計算機領域裡,就是指資料暫時儲存的地方,所以才有進棧、出棧的說法。

首先系統或者資料結構棧中資料內容的讀取與插入(壓入)push和 彈出pop是兩回事!壓入是增加資料,彈出是刪除資料 ,這些操作只能從棧頂即最低位址作為約束的介面介面入手操作 ,但讀取棧中的資料是隨便的,沒有介面約束之說。很多人都誤解這個理念從而對棧產生困惑。而系統棧在計算機體系結構中又起到乙個跨部件互動的媒介區域的作用 即 cpu 與記憶體的交流通道 ,cpu只從系統給我們自己編寫的應用程式所規定的棧入口線性地讀取執行指令, 用乙個形象的詞來形容它就是pipeline(管道線、流水線)。cpu內部互動具體參見 eu與biu的概念介紹。

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

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

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

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

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

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

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

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

資料結構3 棧

2 2 鏈式棧儲存結構與基本運算 3 棧的應用 棧 stack 限定在棧頂 表尾 進行插入 入棧 和刪除 出棧 的線性表。基操作的特性是先進後出,又稱為 後進先出 last in first out,lifo 的線性表。根據棧的設計儲存結構的不同,一般分也順序棧和鏈式棧,對應的基本運算操作也有所不同...

資料結構3 棧

pragma once include include include include using namespace std 棧的典型應用 1 有明確演算法解決乙個問題,但是問題的解卻以線性序列的形式給出。2 無論是遞迴還是迭代實現,該線性序列都是以逆序計算輸出的。3 輸入輸出規模不確定,難以事先...

資料結構(3) 棧

0.目錄 1.線性表 陣列 2.線性表 單向鍊錶 3.棧棧是一種比較常見的資料結構,是一種較為特殊的線性表。對於棧來說,插入 刪除 訪問元素只能在棧頂進行。對棧的基本操作有push 進棧 pop 出棧 和peek 查詢棧頂 基於這種特性,棧又叫做lifo last in first out 表,即後...