1.顺序栈的实现
1.1接口
package com.stack.inter;
public interface OrderStack {
public boolean isEmpty();
public boolean isFull();
public boolean Push(Object obj);
public Object pop();
public Object peek();
}
1.2实现类
package com.stack.list;
import com.stack.inter.OrderStack;
public class OrderStackList implements OrderStack {
private Object[] table;
private int top;
public OrderStackList(int s) {
table =new Object[s];
top=-1;//设置初始状态为空
}
@Override
public boolean isEmpty() {
return (top == -1);
}
@Override
public boolean isFull() {
return (top>=table.length-1);
}
//入栈
@Override
public boolean Push(Object obj) {
if(!isFull()) {
table[++top]=obj;
return true;
}else {
System.out.println("Stack is Full");
return false;
}
}
//出栈
@Override
public Object pop() {
Object obj=null;
if(!isEmpty()) {
obj=table[top];
table[top]=null;
top--;
}
return obj;
}
public Object peek() {
if(!isEmpty()) {
return table[top];
}else {
return null;
}
}
}
2 链栈的实现
2.1结点类
package com.stack.Node;
public class Node {
private Object data;
private Node next = null;
public Node() {
data = null;
}
public Node(Object data) {
this.data = data;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}
2.2接口
package com.stack.inter;
public interface LinkedStack<T> {
public boolean isEmpty();
public void clean();
public int length();
public boolean push(T data);
public T pop();
public T peek() throws Exception;
}
2.3实现类
package com.stack.list;
import com.stack.Node.Node;
import com.stack.inter.LinkedStack;
public class LinkedStakList<T> implements LinkedStack<Object> {
private Node top;
private int size;
public LinkedStakList() {
top =null;
size=0;
}
@Override
public boolean isEmpty() {
return size==0;
}
@Override
public void clean() {
top =null;
size=0;
}
@Override
public int length() {
return size;
}
@Override
public boolean push(Object data) {
Node node =new Node();
node.setData(data);
node.setNext(top);
top=node;
size++;
return true;
}
@Override
public Object pop() {
if(top!=null) {
Node node =top;
top=top.getNext();
size--;
return node.getData();
}
return null;
}
@Override
public Object peek() throws Exception {
if(size==0) {
throw new Exception("堆栈已空!");
}
return top.getData();
}
}
3 测试方法
package com.stack;
import com.stack.inter.LinkedStack;
import com.stack.inter.OrderStack;
import com.stack.list.LinkedStakList;
import com.stack.list.OrderStackList;
public class test {
//顺序栈测试方法
public static void orderStackTest() {
OrderStack s= new OrderStackList(2);
s.Push("test");
s.Push("today");
s.Push("is full?");
System.out.println(s.peek());
System.out.println(s.pop());
System.out.println(s.peek());
}
//链栈测试方法
public static void LinkedStackTest() throws Exception {
LinkedStack<Object> stack = new LinkedStakList<Object>();
stack.push("test");
stack.push("today");
stack.push("is full?");
System.out.println(stack.peek());
System.out.println(stack.pop());
System.out.println(stack.peek());
//stack.clean();
//System.out.println(stack.peek());
}
public static void main(String[] args) throws Exception {
orderStackTest();
System.out.println("------------------------");
LinkedStackTest();
}
}
4 运行结果