數(shù)據(jù)結(jié)構(gòu)(一)數(shù)組實(shí)現(xiàn)一個簡單的ArrayList
數(shù)據(jù)結(jié)構(gòu)(二)鏈表實(shí)現(xiàn)LinkedList
數(shù)據(jù)結(jié)構(gòu)(三)用兩種方式簡單實(shí)現(xiàn)棧
數(shù)據(jù)結(jié)構(gòu)(四)棧和隊(duì)列的簡單應(yīng)用
數(shù)據(jù)結(jié)構(gòu)(五)用兩種方式簡單實(shí)現(xiàn)隊(duì)列
數(shù)據(jù)結(jié)構(gòu)(六)BST二分搜索樹(上)
數(shù)據(jù)結(jié)構(gòu)(六)BST二分搜索樹(下)
數(shù)據(jù)結(jié)構(gòu)(七)兩種方式實(shí)現(xiàn)set
數(shù)據(jù)結(jié)構(gòu)(八)兩種方式實(shí)現(xiàn)map
數(shù)據(jù)結(jié)構(gòu)(九)set解決LeetCode349號問題
棧這個數(shù)據(jù)結(jié)構(gòu)很奇特谣沸,像是一水桶轴捎,先進(jìn)來的最后才能出去丁侄。但是他的用處很廣。我們來簡單的實(shí)現(xiàn)一個自己的棧失尖。話不多說,下邊是源碼。
先貼一下棧的幾個簡單的方法
public interface Stack<E> {
int size();
boolean isEmpty();
//進(jìn)棧
void push(E e);
//出棧
E pop();
//獲取棧頂元素
E peek();
}
下邊用兩種方式實(shí)現(xiàn)棧
- 第一種是之前咱們自己實(shí)現(xiàn)的arraylist
public class ArrayStack<E> implements Stack<E> {
Array<E> array;
public ArrayStack(int capacity){
array = new Array<>(capacity);
}
public ArrayStack(){
array = new Array<>();
}
@Override
public int size() {
return array.getSize();
}
@Override
public boolean isEmpty() {
return array.isEmpty();
}
public int getCatacity(){
return array.getCapacity();
}
@Override
public void push(E e) {
array.addLast(e);
}
@Override
public E pop() {
return array.removeLast();
}
@Override
public E peek() {
return array.getLast();
}
@Override
public String toString(){
StringBuilder res = new StringBuilder();
res.append("[");
for (int i = 0; i<array.getSize() ; i ++){
res.append(array.get(i));
if (i != array.getSize() - 1){
res.append(",");
}
}
res.append("] top");
return res.toString();
}
}
這里的源碼其實(shí)很簡單砾肺,因?yàn)榇蟛糠止ぷ髟谥暗腁rrayList里已經(jīng)實(shí)現(xiàn)的了
-下邊是第二中實(shí)現(xiàn)方法是用鏈表實(shí)現(xiàn)的。
/**
* 鏈表?xiàng)? * @param <E>
*/
public class LinkedListStack<E> implements Stack<E> {
private DummyLinkedList<E> linkedList;
public LinkedListStack() {
linkedList = new DummyLinkedList<>();
}
@Override
public int size() {
return linkedList.getSize();
}
@Override
public boolean isEmpty() {
return linkedList.isEmpty();
}
@Override
public void push(E e) {
linkedList.addFirst(e);
}
@Override
public E pop() {
return linkedList.removeFirst();
}
@Override
public E peek() {
return linkedList.getFirst();
}
@Override
public String toString() {
StringBuilder res = new StringBuilder();
res.append("Stack : Top");
res.append(linkedList);
return res.toString();
}
}
這里也很簡單防嗡。大部分工作也是之前的LinkedList實(shí)現(xiàn)了变汪。
-
下邊會出一個棧的應(yīng)用的文章,希望大家多多關(guān)注支持蚁趁。