java算法系列一棧
棧的概念
棧是一種特殊的線性表,堆棧的數據元素以及數據元素之間的關係和線性表是完全一樣的。差別是線性表是在任意位置進行插入和刪除操作,棧是隻允許在固定的一端進行插入和刪除,棧的插入和刪除只允許在棧頂,棧的插入和刪除通常稱爲進棧和出棧。數據集合
每個數據元素的數據類型可以是任意的類型操作的集合
進棧push(obj):把數據元素obj插入到棧中。
出棧pop() : 刪除的數據元素由函數返回。
獲得棧頂元素getTop():取棧頂的數據並由函數返回。
判斷棧是不是爲空isEmpty():若棧非空返回true,否則返回false。棧的類型:
棧的類型包括兩種:順序棧和鏈式棧- 代碼設計:
設計MyStack接口
實現順序棧類SequenceStack類
public interface MyStack {
//進棧
public void push(Object obj);
//出棧
public Object pop();
//獲得棧頂元素
public Object getTop();
//判斷棧是不是爲空
public boolean isEmpty();
}
public class SequenceStack implements MyStack{
Object[] myStack;
final int defaultSize = 10;
int top;
int maxSize;
public SequenceStack(){
init(defaultSize);
}
public SequenceStack(int size){
init(size);
}
public void init(int size){
this.maxSize = size;
top = 0;
myStack = new Object[size];
}
@Override
public void push(Object obj) throws Exception{
//添加的時候,首先要判斷棧是不是已經給滿了
if (top == maxSize) {
throw new Exception("棧已經滿!!!");
} else {
myStack[top] = obj;
top++;
}
}
@Override
public Object pop() throws Exception{
//如果棧爲空的時候拋出異常
if (isEmpty()) {
throw new Exception("棧爲空!!!");
}else{
top--;
return myStack[top];
}
}
@Override
public Object getTop() throws Exception{
if (isEmpty()) {
throw new Exception("棧爲空!!!");
}else{
return myStack[top--];
}
}
@Override
public boolean isEmpty() {
return top == 0 ?true:false;
}
}
public class TestMyStack {
@Test
public void testMyStack() throws Exception{
SequenceStack s = new SequenceStack();
s.push(new Integer(10));
s.push(new Integer(1));
s.push(new Integer(8));
s.push(new Integer(7));
s.push(new Integer(5));
while (!s.isEmpty()) {
System.out.print(s.pop()+" ");
}
}
}