Java中用动态数组实现的栈(ArrayStack)

首先,我们回顾一下栈的定义:
栈本质上就是一种特殊的线性表
栈是限定仅在表尾进行插入和删除操作的线性表,先进后出的结构
元素插入叫进栈,元素删除叫出栈
栈的两个基本操作图解:
在实现之前,我们需要定义一个线性表。由于这不是我们今天的重点,我就直接把代码的链接放在下面了:
[https://blog.csdn.net/qq_43138320/article/details/88919467]

接下来,我们定义一个栈的接口:

public interface Stack <E>{
	public void push(E e); //进栈
	public E pop();//出栈
	public E peek(); //获取栈顶元素
	public boolean isEmpty(); //判断栈是否为空
	public int getSize(); //获取栈元素个数
	public void clear(); //清空栈
}

有了线性表与栈的接口,栈的实现就变得很简单了,最后让我们来看具体实现:

public class ArrayStack <E> implements Stack <E>{
	private ArrayList<E> list;
	public ArrayStack() {  //空构造
		this(10);
	}
	public ArrayStack(int capacity) {  //有参构造
		list = new ArrayList<>(capacity);
	}
	@Override
	public void push(E e) { //进栈
		list.addLast(e);
	}
	@Override
	public E pop() {  //出栈
		return list.removeLast();
	}
	@Override
	public E peek() {
		return list.getLast();
	}
	@Override
	public boolean isEmpty() {
		return list.isEmpty();
	}
	@Override
	public int getSize() {
		return list.getSize();
	}
	@Override
	public void clear() {
		list.clear();
	}

	public int getCapacity() { //获取当前栈的最大容量
		return list.getCapacity();
	}
	
	@Override
	public String toString() {  //重写toString
		StringBuilder sb=new StringBuilder();
		if(isEmpty()){
			sb.append(String.format("ArrayStack:bottom[]top %d/%d", getSize(),getCapacity()));
		}else{
			sb.append("ArrayStack:bottom[");
			for(int i=0;i<list.getSize();i++){
				if(i==list.getSize()-1){
					sb.append( list.get(i)+"]top");
				}else{
					sb.append(list.get(i)+",");
				}
			}
			sb.append(String.format(" %d/%d \n", getSize(),getCapacity()));
		}
		return sb.toString();
	}
}

今天就先到这里,接下来就没这么轻松了哦。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值