使用java实现后进先出的堆栈功能【笔试题】
2017-04-18 17:03
405 查看
今天看到某公司的笔试题,题目如下:
1. 请编写代码实现Stack类,该类能够实现后进先出的堆栈功能,要求实现的方法包括:
------Stack(int) –实例化指定深度的栈
------ boolean push(E item) – 向栈顶压入对象,成功返回true,栈已满返回false
------ E pop() – 从栈顶移除对象并返回,如栈为空返回null
------ E peek() – 查看并返回栈顶的对象,如栈为空返回null
------ int size() – 返回堆栈中当前的元素数量
------ int depth() –返回当前堆栈深度
实现时无需考虑线程安全性,不可借助Java集合框架实现。
以下代码均为个人理解,欢迎吐槽。
![](http://img.blog.csdn.net/20170418165921218?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQWJ1YnUxMjM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](http://img.blog.csdn.net/20170418165926273?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQWJ1YnUxMjM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
具体可参考
参照jdk1.7中,java.util.Stack包 、java.util.Vector包 及相关实现类完成。如果有更好的解法可以改进或者留言博主。
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 { // 堆栈已满,返回false returnType = 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包 及相关实现类完成。如果有更好的解法可以改进或者留言博主。
相关文章推荐
- 使用Java程序实现随机验证码功能的实例
- Linux平台,使用JavaComm3 API及SMSLib项目实现在Web Application中发送手机短信的功能
- java中实现退出按钮功能的实现已经布局管理器的使用
- 使用堆栈计算后缀表达式--java实现
- 使用java生成excel功能实现
- 使用Java来实现编辑器的Undo Redo功能
- 使用Java实现系统托盘功能的介绍(附源码以及截图)
- 使用java.util.concurrent实现的线程池、消息队列功能
- java使用数组实现线性表功能(增、删、查、改)
- 使用eclipse的JDT实现JAVA代码格式化功能
- 关于一道J笔试或者机试题的Java实现:从键盘输入一串字符,翻转后输出(要求不使用string相关类即对象)
- 关于一道J笔试或者机试题的Java实现:从键盘输入一串字符,翻转后输出(要求不使用string相关类即对象)
- 使用Java实现简单的server/client回显功能的方法介绍
- 使用Java程序实现随机验证码功能的实例
- 使用Java程序实现随机验证码功能的实例
- 使用Java实现B/S系统常见的获取客户端信息功能!
- java 使用正则Pattern等实现【搜索 -> 提取 -> 分割 -> 替换】功能
- 使用Java实现简单的server/client回显功能的方法介绍
- 使用技巧:Java实现随机验证码功能实例