数据结构-第二篇:栈

/**

  • 栈:
  • 限定仅在表尾进行插入或删除的线性表,又称后进先出(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();
	}
}

转载请注明出处

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值