資料結構與演算法(2)—— 棧(java)
阿新 • • 發佈:2018-11-06
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;
}
}