上一小節:演算法與資料結構 其n 陣列和鍊錶 的實現
這一小節就講講 棧的實現
什麼是棧(stack)?
棧就是乙個容器(杯子?碗?隨便你想叫什麼都行)
先放進去(push)的資料,就只能放在容器底部,最後放進去的資料,就會在最上面。
那我們要獲取資料(pop),就只能從最上面的開始拿出來。
如果你只看看,不進去(peek),就只能看到最上面的資料。
top 就相當於指標吧,用來指向最上面的資料。
我們一般也稱這種資料結構為:先進後出
將上面的結構小結下,可以抽象出下面的偽**
public
class
stack()
實現棧,可以通過陣列和鍊錶兩種形式去實現。
通過陣列實現棧
public
class mystackarray
public
void
clear()
//是否為空
public boolean isempty()
//長度
public
intsize()
//進棧
public
void
push(e e)
es = newes;
}es[top++]= e;
}//出棧
public e pop()
return es[--top];
}//檢視棧頂元素
public e peek()
return es[top-1];}}
通過鍊錶實現棧
(其實這裡就是類似實現了單鏈表,但是不能從隨便插入資料)
//備註1
public
class mystacklinkedimplements iterable
}public
mystacklinked()
public
void
clear()
public
intsize()
public boolean isempty()
public e top()
public boolean push(e e)
public nodeget(int index)
node = top;
for(int i=thesize;i>index;i--)
return node;
}public boolean push(e e,int size)else
}public e pop(int index)
return node.e;
}@override
public iteratoriterator()
private
class mystacklinkediteratorimplements iterator
//@override
public e next()
@override
public
void
remove() }}
好了,大概就是這種實現形式。 資料結構與演算法(三)棧
棧 stack 又名堆疊,它是一種運算受限的線性表。限定僅在表尾進行插入和刪除操作的線性表。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧 入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素 從乙個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元...
演算法與資料結構 三 棧
棧與佇列一樣也是一種線性的資料結構,與佇列不同的是棧是一種先進後出的結構,有點類似於現實中的彈夾,最後壓進去的子彈總是最先被打出來,在計算機中棧用到的地方就是用作函式傳參與函式中區域性變數的儲存,也就是我們經常說的函式棧。棧同樣有基於陣列和基於鍊錶的實現 基於鍊錶實現的棧只需要乙個頭指標即可,插入刪...
資料結構之樹(其三)
二叉搜尋樹中的搜尋 先從上至下找到該節點,再把該節點一層層地傳上來。classsolution 二叉搜尋樹的插入操作 題目 解析 遞迴每一層傳是自己。相當於沒有傳遞。可以和上一題的遞迴對比一下。第二個解法相當於第三個解法的簡寫。class solution else else if temp.val...