- 栈的接口
public interface IStack {
public void clear(); // 将一个已经存在的栈置成空
public boolean isEmpty(); // 测试栈是否为空
public int length();// 求栈中的数据元素个数并由函数返回其值
public Object peek();// 查看栈顶对象而不移除它,返回栈顶对象
public Object pop();// 移除栈顶对象并作为此函数的值返回该对象
public void push(Object o) throws Exception;// 把项压入栈顶
public void display();// 打印函数,打印所有栈中的元素(栈底到栈顶)
}
/**
*
- 在顺序表上实现的栈及其基本操作
*/
public class SqStack implements IStack {
private Object[] stackElem; // 栈存储空间
private int top; // 非空栈中始终表示栈顶元素的下一个位置,当栈为空时其值为0
// 栈的构造函数,构造一个存储空间容量为maxSize的栈
public SqStack(int maxSize) {
top = 0; // 初始化top为0
stackElem = new Object[maxSize];// 为栈分配maxSize个存储单元
}
// 将一个已经存在的栈置成空
public void clear() {
top = 0;
}
// 测试栈是否为空
public boolean isEmpty() {
return top == 0;
}
// 求栈中的数据元素个数并由函数返回其值
public int length() {
return top;
}
// 查看栈顶对象而不移除它,返回栈顶对象
public Object peek() {
if (!isEmpty())// 栈非空
return stackElem[top - 1]; // 栈顶元素
else
// 栈为空
return null;
}
// 移除栈顶对象并作为此函数的值返回该对象
public Object pop() {
if (top == 0)// 栈为空
return null;
else {// 栈非空
return stackElem[--top];// 修改栈顶指针,并返回栈顶元素
}
}
// 把项压入栈顶
public void push(Object o) throws Exception {
if (top == stackElem.length)// 栈满
throw new Exception("栈已满");// 输出异常
else
// 栈未满
stackElem[top++] = o;// o赋给栈顶元素后,top增1
}
// 打印函数,打印所有栈中的元素(栈顶到栈底)
public void display() {
for (int i = top - 1; i >= 0; i--)
System.out.print(stackElem[i].toString() + " ");// 打印
}
}