栈的顺序存储结构和操作实现 数组实现

栈的顺序存储结构和操作实现

今天学习了一下栈,顺便自己敲代码实现栈的功能,本次是数组实现的。话不多说,看源代码:
定义接口:
package com.guobing.stack;

@SuppressWarnings("hiding")
public interface Stack_Interface<Object> {

	public void initStack();       //这个方法貌似可以不要,后面再看看
	public void push(Object obj);  //向栈顶插入一个元素
	public boolean isEmpty();      //判断是否为空
	public Object peek();          //返回栈顶元素的值
	public Object pop();           //从栈中删除栈顶元素并返回
	public void clear();           //清除栈中的所有元素使之成为一个空栈
	public void print();           //打印栈中的元素
}
实现接口:
package com.guobing.stack;

public class ArrayStack implements Stack_Interface<Object> {

	/**
	 * 栈的顺序存储结构和操作实现    数组实现
	 */
	final int minSize = 10;         //定义栈需要的变量
	private Object [] stackArray;
	private int top;
	
	/**
	 * 清空栈
	 */
	@Override
	public void clear() {
		 
		top = -1;
		stackArray = null;
	}

	/**
	 * 初始化栈
	 */
	@Override
	public void initStack() {
		
		top = -1;                              //栈的初始值为空,置top为1
		stackArray = new Object[minSize];	   //数组初始长度	
	}

	/**
	 * 判断栈是否为空
	 */
	@Override
	public boolean isEmpty() {
		
		return (top == -1);
	}

	/**
	 * 返回栈顶元素的值
	 */
	@Override
	public Object peek() {
		if(top == -1)
			return null;
		System.out.println("栈顶元素的值是:" + stackArray[top]);
		return stackArray[top];
	}

	/**
	 * 从栈中删除栈顶元素并返回
	 */
	@Override
	public Object pop() {
		if(top == -1)
			return null;
		top --;                            //这种写法比较高效
		return stackArray[top + 1];
	}

	/**
	 * 用数组实现栈,其实很简单;top就是数组的最后一位
	 * 所有的操作都是对top的操作,所以虽然有栈底指针,但是没有用到,可以不申明
	 * 向栈顶压入数据时的分析:
	 * 数组的长度是固定的。所以当栈空间已经满时,重新申请空间,并把数据复制过去
	 */
	@Override
	public void push(Object obj) {
		 
		if(top == stackArray.length - 1) {
			Object [] p = new Object[top * 2];
			for(int i=0; i<=top; i++) {
				p[i] = stackArray[i];
				stackArray = p;
			}
		}
		top ++;
		stackArray[top] = obj;
	}

	/**
	 * 打印栈中的数据
	 */
	@Override
	public void print() {
		if(top == -1) {
			System.out.println("栈为空");
		}
		for(int i=top; i>=0; i--) {
			System.out.println(stackArray[i]);
		} 		
	}
	//测试
	public static void main(String [] args) {
		ArrayStack as = new ArrayStack();
		as.initStack();
		as.push("a");
		as.push("b");
		as.push("c");
		as.peek();
		as.print();
		System.out.println("删除栈顶元素后:");	
		as.pop();
		as.peek();
		as.print();
		as.clear();
		as.print();
	}
}

测试结果:
栈顶元素的值是:c
c
b
a
删除栈顶元素后:
栈顶元素的值是:b
b
a
栈为空



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值