1. 程式人生 > >資料結構與演算法(2)—— 棧(java)

資料結構與演算法(2)—— 棧(java)

1 棧的實現

1.1 簡單陣列實現棧

package mystack;

public class ArrayStack {
    private int top; //當前棧頂元素的下標
    private int[] array;

    public ArrayStack() {
        array = new int[10];
        top = -1;
    }

    public boolean isEmpty() {
        return top == -1;
    }

    public boolean isFull()
{ return top == array.length - 1; } public void push(int data) { if (isFull()) System.out.println("Stack Overflow!!"); else { array[++top] = data; } } public int pop() { if (isEmpty()) { System.out.println("Stack is empty!!"
); return 0; } else { return array[top--]; } } public void deleteStack() { top = -1; } }

1.2 動態陣列實現棧

package mystack;

public class DynArrayStack {
    private int top;
    private int capacity;
    private int[] array;

    public DynArrayStack
(int capacity) { this.capacity = capacity; array = new int[capacity]; } public boolean isEmpty() { return top == -1; } public boolean isFull() { return top == array.length - 1; } public void push(int data) { if (isFull()) doubleStack(); array[++top] = data; } private void doubleStack() { int newArray[] = new int[array.length * 2]; System.arraycopy(array, 0, newArray, 0, array.length); array = newArray; } public int pop() { if (isEmpty()) { System.out.println("Stack Overflow!!!"); return -1; } else return array[top--]; } public void deleteStack() { top = -1; } }

1.3 連結串列實現棧

public class LLStack {
private LLNode headNode;
public LLStack(){
	this.headNode = new LLNode(null);

}

public void Push(int data){
	if(headNode==null) {
		headNode = new LLNode(data);
	}else if(headNode.getData() == null) {
		headNode.setData(data);
	}else{
		LLNode llNode = new LLNode(data);
		llNode.setNext(headNode);
		headNode = llNode;
	}
}

public int pop(){
	if(headNode == null) return -1;
	else{
		int data = headNode.getData();
		headNode = headNode.getNext();
		return data;
	}
}

public boolean isEmpty(){
	if(headNode == null) return true;
	else return fasle;
}

public void deleteStack(){
	headNode = null;
}

}