/**
- 栈:
- 限定仅在表尾进行插入或删除的线性表,又称后进先出(LIFO)的线性表
- @author hopefully
*/
//顺序栈
public class SequenceStack<T> {
/*
* 抽象数据类型定义
* ADT stack{
* 数据对象:D={ai|ai属于elemSet,i=1,...,n}
* 数据关系:R={<ai-1,ai>|ai-1,ai属于D,i=1,...,n}
* 操作集P:
* }ADT stack
*/
private final int MAX_SIZE=10;
private int bottom;//0
private int top;//0 规定栈顶指针总是指向栈中元素的下一个位置
private T []stack;
public SequenceStack() {
stack=(T[])new Object[MAX_SIZE];
}
public SequenceStack(int n) {
if(n<1) {
System.out.println("参数错误");
System.exit(1);
}
stack=(T[])new Object[n];
}
//是否栈空
public boolean isEmpty() {
return bottom==top;
}
//入栈
public void push(T obj) {
//栈满扩容
if(top==stack.length) {
T[] t=(T[])new Object[2*stack.length+2];
for(int i=0;i<stack.length;i++) {
t[i]=stack[i];
}
stack=t;
}
stack[top++]=obj;
}
//出栈
public T pop() {
//判空
if(isEmpty()) {
System.out.println("栈空");
return null;
}
top--;
return stack[top];
}
//查看栈顶元素
public T peek() {
if(isEmpty()) {
System.out.println("栈空");
return null;
}
return stack[top-1];
}
//栈长
public int size() {
return top;
}
//栈容
public int pacacity() {
return stack.length;
}
//遍历栈
public void stackTraverse() {
for(int i=top-1;i>=0;i--) {
System.out.print(stack[i]+" ");
}
System.out.println();
}
//销毁栈
public void destroy() {
top=0;
}
public static void main(String[] args) {
SequenceStack<Integer> stack=new SequenceStack<Integer>();
for(int i=1;i<=15;i++) {
stack.push(i);
}
System.out.println("遍历栈");
stack.stackTraverse();
System.out.println("查看栈顶元素");
System.out.println(stack.peek());
System.out.println("栈容");
System.out.println(stack.pacacity());
System.out.println("栈长");
System.out.println(stack.size());
System.out.println("出栈");
System.out.println(stack.pop());
System.out.println("销毁栈");
stack.destroy();
}
}
转载请注明出处