java算法系列

java算法系列一棧

  1. 棧的概念
    棧是一種特殊的線性表,堆棧的數據元素以及數據元素之間的關係和線性表是完全一樣的。差別是線性表是在任意位置進行插入和刪除操作,棧是隻允許在固定的一端進行插入和刪除,棧的插入和刪除只允許在棧頂,棧的插入和刪除通常稱爲進棧和出棧。

  2. 數據集合
    每個數據元素的數據類型可以是任意的類型

  3. 操作的集合
    進棧push(obj):把數據元素obj插入到棧中。
    出棧pop() : 刪除的數據元素由函數返回。
    獲得棧頂元素getTop():取棧頂的數據並由函數返回。
    判斷棧是不是爲空isEmpty():若棧非空返回true,否則返回false。

  4. 棧的類型:
    棧的類型包括兩種:順序棧和鏈式棧

  5. 代碼設計:
    設計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()+" ");
    }

}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章