如何理解棧結構?
關於棧最貼切的方式就是疊盤子,我們放盤子的時候,先放上去的盤子在下面,然後取盤子是從上往下取。也就是先入後出。
從棧的操作特性上,棧是一種操作受限的線性表,只允許在一端插入和刪除。
如何實現乙個棧?
從棧的定義中,棧主要包括兩個操作,入棧和出棧。也就是在棧頂插入資料,在棧頂刪除乙個資料。
實際上我們可以用陣列實現,也可以用鍊錶實現。陣列實現的棧是順序棧,鍊錶實現的棧是鏈式棧。
接下來實現乙個基於陣列形成的順序棧
//基於資料實現的順序棧
public class arraystack
//入棧操作
public boolean push(string item)
//將item放到下標為count的位置,並且count加一
items[count] = item;
++count;
return true;
}//出棧操作
public string pop()
//返回下標為count-1的陣列元素,並且棧中元素個數count減一
string tmp = items[count-1];
--count;
return tmp;}}
上面這個基於陣列實現的棧,是乙個固定大小的棧。也就是初始化棧時需要事先指定棧的大小,當棧滿之後,就無法新增資料了,那麼如何實現乙個動態擴容的棧呢。
如果要實現乙個動態擴容的棧,我們只需要底層依賴乙個支援動態擴容的陣列就可以了,當棧滿了之後,我們就申請乙個更大的陣列,將原本的資料搬到新陣列中
接下來看一下棧在函式中的應用
int main()
int add(int x, int y)
在main方法中呼叫add方法,獲取計算結果,並且與臨時變數a相加,最後列印res的值。
本文參考自極客時間王爭老師的課程講解。
資料結構之棧結構
棧結構是一種filo first in last out 的批量資料儲存結構。其特點是先進後出,後來者居上 棧的基本屬性 棧記憶體 棧頂標記 棧的當前元素個數 萬金油屬性 size 棧的基本操作 萬金油的的操作 根據實現的不同將棧結構分為兩種 1.鏈式棧 2.陣列 利用有表頭鍊錶的頭插法來完成棧的功...
資料結構之棧
4.8.2 四則運算表示式求值 程式如下所示 include include include 定義結點型別 typedef struct node node,pnode 定義棧的抽象資料型別 typedef struct stack stack,pstack 函式宣告 對棧進行初始化的函式 void...
資料結構之棧
資料結構之棧 本文討論棧的陣列實現。棧需要有如下幾個屬性 棧的容量 capacity 棧頂指標 儲存棧元素的陣列 根據這幾個屬性可以定義乙個棧結構體 struct stackrecord 然後定義棧的操作,一般可以包含如下幾個 棧的建立 stack createstack int size 棧的銷毀...