使用java实现后进先出的堆栈功能【笔试题】
来源:互联网 发布:青岛seo服务 编辑:程序博客网 时间:2024/06/14 03:48
今天看到某公司的笔试题,题目如下:
1. 请编写代码实现Stack类,该类能够实现后进先出的堆栈功能,要求实现的方法包括:
------Stack(int) –实例化指定深度的栈
------ boolean push(E item) – 向栈顶压入对象,成功返回true,栈已满返回false
------ E pop() – 从栈顶移除对象并返回,如栈为空返回null
------ E peek() – 查看并返回栈顶的对象,如栈为空返回null
------ int size() – 返回堆栈中当前的元素数量
------ int depth() –返回当前堆栈深度
实现时无需考虑线程安全性,不可借助Java集合框架实现。
以下代码均为个人理解,欢迎吐槽。
Stack类:
package Stack;public class Stack<E> {/** * 模拟栈对象 */private Object[] elementData;/** * 模拟栈大小值 */private int elementSize;/** * 模拟向栈中增加对象的个数。 */private static int modCount = 0;/** * 实例化指定深度的栈 * * @param elementSize * 栈的深度 */public Stack(int elementSize) {if (elementSize < 0) {throw new IllegalArgumentException("输入有误,elementSize: "+ elementSize + "必须大于0");} else {this.elementData = new Object[elementSize];this.elementSize = elementSize;}}/** * 默认栈的深度为5 */public Stack() {this(5);}/** * 向栈顶压入对象,成功返回true,栈已满返回false * * @param item * 要压入栈的对象 * @return */public boolean push(E item) {boolean returnType;// 每当进行入栈操作时,先给计数器自增。modCount++;if (modCount <= elementSize) {elementData[modCount-1] = item;returnType = true;} else {// 堆栈已满,返回falsereturnType = false;}return returnType;}/** * 从栈顶移除对象并返回 如栈为空返回null * * @return */@SuppressWarnings("unchecked")public E pop() {if (modCount != 0) {// 当modCount不等于0即堆栈不为空的时候,返回元素并且移除元素E e = (E) elementData[modCount-1];elementData[modCount-1] = null;modCount--;return e;} else {return null;}}/** * 查看并返回栈顶的对象,如栈为空返回null * * @return */@SuppressWarnings("unchecked")public E peek() {// 当modCount不等于0即堆栈不为空的时候,返回元素if (modCount != 0) {return (E) elementData[modCount-1];} else {return null;}}/** * 返回当前堆栈中元素数量 * * @return */public int size() {return modCount;}/** * 返回当前堆栈的深度 * * @return */public int depth() {return elementSize;}}
测试类:
package Stack;import java.util.Scanner;public class StackTest {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入想要创建的栈的深度,仅限数字输入,默认深度为5...");String elementSize = scanner.nextLine();System.out.println("请输入想要添加的元素个数,仅限数字输入...");String addSize = scanner.nextLine();numberOf(Integer.parseInt(elementSize), Integer.parseInt(addSize));}/** * * @param elementSize * 栈的深度 * @param addSize * 增加元素的个数 */private static void numberOf(int elementSize, int addSize) {Stack<Object> stack = new Stack<Object>(elementSize);// 如果新增的元素小于堆栈深度if (addSize <= elementSize) {for (int i = 1; i <= addSize; i++) {boolean type = stack.push("测试数据" + i);if (type == true) {System.out.println("成功新增第" + i + "个元素!");} else {System.out.println("新增第" + i + "个元素时,堆栈已满!");}}System.out.println("*********************************");System.out.println("当前堆栈的深度为:" + stack.depth());System.out.println("当前堆栈中元素的个数为:" + stack.size());System.out.println("当前堆栈中栈顶的元素为:" + stack.peek());System.out.println("当前堆栈中从栈顶移除的元素为:" + stack.pop());System.out.println("移除后,当前堆栈中栈顶的元素为:" + stack.peek());System.out.println("移除后,当前堆栈中元素的个数为:" + stack.size());} else {for (int i = 1; i <= addSize; i++) {boolean type = stack.push("测试数据" + i);if (type == true) {System.out.println("成功新增第" + i + "个元素!");} else {System.out.println("新增第" + i + "个元素时,堆栈已满!");}}}}}
运行结果:
具体可参考
参照jdk1.7中,java.util.Stack包 、java.util.Vector包 及相关实现类完成。如果有更好的解法可以改进或者留言博主。 3 0
- 使用java实现后进先出的堆栈功能【笔试题】
- python实现堆栈 后进先出 LIFO
- Java 实现后进先出(LIFO)
- 栈-后进先出-java
- “后进先出”的栈
- “后进先出”的栈
- Stack和Queue:后进先出和先进先出和Java 实现后进先出(LIFO)及Stac和Java集合类: Set、List、Map、Queue使用场景梳理 - .Little Hann
- Stack--->栈--->“后进先出”的容器
- 栈--后进先出
- 利用C语言中后进先出的栈的概念实现括号匹配
- Android------以后进先出的方式加载图片
- 重新考虑容器的存储特性:线序,后进先出,先进先出,无序集合
- Stack和Queue:后进先出和先进先出
- 栈(LIFO:后进先出)
- java栈--后进先出(顺序栈、链栈、单词逆序)
- 栈中的“先进后出,后进先出”是什么意思?
- 栈(Stack)——后进先出(LIFO)的数据结构(Data Structures)
- 算法——背包(后进先出)
- fMRI数据分析处理原理及方法
- 深刻理解React(-) --JSX和虚拟DOM
- 偷懒的小X vijos 1469/jzoj/ssl 排序+分治
- 拼sql语句统计表中数据
- IE下动态 生成<li><a><img>等标签
- 使用java实现后进先出的堆栈功能【笔试题】
- 将WordPress的文章转发到微信里面
- JavaScript常用检测脚本实例代码
- Java
- 符号三角形
- Git命令那些事,文章还在更新中...
- 分类游戏
- unit13
- JAVA静态上下文引用问题