zoukankan      html  css  js  c++  java
  • 05-java实现栈

    05-java实现栈

    本人git https://github.com/bigeyes-debug/Algorithm

    一丶栈

    • 栈是特殊的线性表,只能在一段操作
    • 添加元素push,入栈
    • 删除元素pop,出栈
    • 动态数组和双向链表都可以实现
    • 在栈顶进行操作

    二丶栈的接口设计

    public class Stack<E> {
        // 使用动态数组实现栈
        private List<E> list = new ArrayList<>();
        // 元素的数量
        public int size();
        // 是否为空
        public boolean isEmpty();
        // 入栈
        public void push(E element);
        // 出栈
        public E pop();
        // 获取栈顶元素
        public E top();
    }
    
    

    三丶栈的实现

    • 我们在动态数组中实现了很多接口,动态数组和栈的结构类似,很多方法我们可以复用
    • 我们采用组合的方式,将动态数组注入,
    • 我们也可以采取继承的方式,但是继承会导致一些不需要的接口对外暴露,所以我们还是选择了组合的方式
    • list.get().这个接口我们就没必要对外暴露
    public class Stack<E> {
        // 使用 动态数组存储数组
        private ArrayList<E> list;
        public Stack() {
            // 初始化方法中创建列表
        	this.list = new ArrayList<>();
        }
        public int size() {
        	// 栈中元素数量, 就是列表中存储的元素数量
        	return list.size();
        }
        public boolean isEmpty() {
        	// 栈是否空, 就是列表是否空
        	return list.isEmpty();
        }
        public void push(E element) {
        	// 入栈, 将元素添加到列表的最后面
        	list.add(element);
        }
        public E pop() {
        	// 出栈, 将列表中最后一个元素删除并返回
        	return list.remove(list.size() - 1);
        }
        public E top() {
        	// 查看栈顶元素, 就是查看列表中的最后一个元素
        	return list.get(list.size() - 1);
        }
        public void clear() {
        	// 清空栈, 就是清空列表
        	list.clear();
        }
    }
    
    
  • 相关阅读:
    守护线程Daemon的理解
    Activity并行网关和排他网关
    Activity快速入门理解
    java虚拟机内存区域理解
    Maven的使用
    Mybatis拦截器(插件实现原理)
    網絡上好的博客收集
    jdbc 设置连接支持多条sql
    python 多环境安装
    Linux 系统命令
  • 原文地址:https://www.cnblogs.com/bianzhuo/p/13500511.html
Copyright © 2011-2022 走看看