ArrayStack.java
package array.stack;
public class ArrayStack {
private final int DEFAULT_STACK_SIZE = 100000;
private int top = -1;
private Object [] data;
public ArrayStack() {
data = new Object [DEFAULT_STACK_SIZE];
}
public ArrayStack(int stackSize) {
data = new Object [stackSize];
}
public Object peek() {
if(top == -1) {
throw new ArrayIndexOutOfBoundsException();
} else {
return data[top];
}
}
public void push(Object input) {
if(top+1 == data.length) {
throw new ArrayIndexOutOfBoundsException();
} else {
data[++top] = input;
}
}
public Object pop() {
if(top == -1) {
throw new ArrayIndexOutOfBoundsException();
} else {
Object popData = peek();
top--;
return popData;
}
}
public boolean isEmpty() {
return top == -1;
}
public void clear() {
for(int i = 0; i < top+1; i++) {
data[i] = null;
}
top = -1;
}
public String toString() {
if(isEmpty()) {
return "[]";
} else {
String str = new String("[");
for (int i = 0; i < top; i++) {
str += data[i] + ", ";
}
str += data[top] + "]";
return str;
}
}
}
LinkedListStack.java
package linkedlist.stack;
public class LinkedListStack {
private StackNode head = null;
private StackNode top = null;
private int size = 0;
private class StackNode {
private Object data;
private StackNode prev;
private StackNode next;
public StackNode(Object input) {
this.data = input;
this.prev = null;
this.next = null;
}
public Object getData() {
return this.data;
}
}
public Object peek() {
if(top == null) {
throw new NullPointerException();
} else {
return top.getData();
}
}
public void push(Object input) {
StackNode newNode = new StackNode(input);
if(head == null) {
head = newNode;
top = newNode;
} else {
StackNode tmp = top;
top.next = newNode;
top = newNode;
top.prev = tmp;
}
size++;
}
public Object pop() {
Object popData = null;
if(isEmpty()) {
throw new NullPointerException();
} else if(head == top) {
popData = head.getData();
head = null;
top = null;
} else {
popData = top.getData();
top = top.prev;
top.next = null;
}
size--;
return popData;
}
public boolean isEmpty() {
return head == null;
}
public void clear() {
StackNode tmp = head;
for (int i = 0; i < size; i++) {
tmp.prev = null;
tmp.data = null;
tmp = tmp.next;
}
head = null;
top = null;
size = 0;
}
public String toString() {
String str = new String("[");
if(isEmpty()) {
return str + "]";
} else {
StackNode tmp = head;
while(tmp.next != null) {
str += tmp.getData() + ", ";
tmp = tmp.next;
}
return str + tmp.getData() + "]";
}
}
}