1.什么是棧
棧是一種后進(jìn)先出的數(shù)據(jù)結(jié)構(gòu)玻募,也稱LIFO斤吐,我們這里就用之前的Array類來實(shí)現(xiàn)一個(gè)底層是數(shù)組的棧
2.先定義一個(gè)接口辕漂,定義棧有哪些操作
public interface Stack<E> {
/**
* 獲取棧內(nèi)元素
* @return 元素
*/
int getSize();
/**
* 判斷棧是否為空
* @return
*/
boolean isEmpty();
/**
* 壓棧
* @param e 要壓入的元素
*/
void push(E e);
/**
* 彈棧
* @return 彈出棧的元素
*/
E pop();
/**
* 查看棧頂元素
* @return
*/
E peek();
}
壓棧 就是棧進(jìn)入元素,彈棧也就是出棧
3.我們開始實(shí)現(xiàn)這些操作
/**
* 這里底層是一個(gè)數(shù)組
*/
private ArrayE<E> array;
/**
* 這里的棧的容量就是數(shù)組的容量
* @param capacity 容量
*/
public ArrayStack(int capacity){
array = new ArrayE<E>(capacity);
}
public ArrayStack(){
array = new ArrayE<E>();
}
@Override
public int getSize() {
return array.getSize();
}
@Override
public boolean isEmpty() {
return array.isEmpty();
}
這里是一些初始化的操作
/**
* 壓棧也就是在數(shù)組尾部添加元素
* @param e 要壓入的元素
*/
@Override
public void push(E e) {
array.addLast(e);
}
/**
* 彈棧含友,由于是后進(jìn)先出的數(shù)據(jù)結(jié)構(gòu)替裆,因此我們將末尾的元素移除出去校辩,
* 因?yàn)樽钕冗M(jìn)來的肯定是末尾的元素
* @return 出棧的元素
*/
@Override
public E pop() {
//因?yàn)閴喝氲脑卦赼rray的末尾窘问,而stack必須是后進(jìn)先出,因此應(yīng)該移除最后一個(gè)
return array.removeLast();
}
/**
* 查看棧頂元素
* @return 我們只要看數(shù)組的末尾元素即可
*/
@Override
public E peek() {
return array.getLast();
}
@Override
public String toString(){
StringBuilder res = new StringBuilder();
res.append("Stack : ");
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();
}
以上就是其核心的進(jìn)棧出棧的操作