`
raozhiyong11
  • 浏览: 135437 次
  • 性别: Icon_minigender_1
  • 来自: 江西
社区版块
存档分类
最新评论

面试题:用java代码实现一个自己的栈.

    博客分类:
  • J2SE
阅读更多

      前几天有一个学C#的同学去一家公司面试,面试官给出了这样一道题:用C#代码实现一个自己的栈.

后来他打电话过来问我,由于我学的就是java,不过以前也对C#有点接触,语言都是相通的,我只是给他描述了下大概的思路,呵呵......

      其实学过java的程序员都知道,Java中提供了另一个Stack对象,就是一个栈,但是后来自己想想,如果是我我能否用Java实现一个自己的栈呢?带着这个疑问就自己写了一个,也算是对自己的一个简单的考验吧,没准下次我去面试就遇上了这样的题目,那不是太幸运了,呵呵(想的美...).这篇文章留下来给自己当做笔记使用,也希望对路过的初学者有点帮助。

 

package com.rao.util;

import java.util.EmptyStackException;
import java.util.Stack;

public class MyStack<E> {
	
	private E[] eleDates;   //数组对象
	private int topIndex;	//最上一个元素(栈顶元素)的下标
	private int count;      //元素的个数
	
	public MyStack(int size) {
		this.eleDates = (E[])new Object[size];   //初始化数组长度
		this.topIndex=-1;        //初始化最后一个元素的下边
		this.count = 0;           //初始化元素的个数
	}
	
	public MyStack() {
		this(10);     //提供一个默认的构造函数,默认初始化数组的长度只能装10个元素
	}
	
	//压入
	public void push(E obj){
		if (isFull()) {
			throw new ArrayIndexOutOfBoundsException("栈已经满了,不能再放入元素");
		}else {
			count++; //栈中元素的个数+1
			this.eleDates[++topIndex]=obj;  //在最后一个元素的后面增加当前元素
		}
	}
	
	//弹出栈,并且弹出栈顶元素
	public E pop(){
		if (isEmpty()) {
			throw new EmptyStackException();
		}else {
			count--;   //栈中元素的个数-1
			E movedObj = this.eleDates[topIndex];
			this.eleDates[topIndex]=null; //设置被移除的对象为空
			topIndex--; //栈的元素下标-1
			return movedObj;
		}
	}
	
	//弹出栈顶元素
	public E peek(){
		if (isEmpty()) {
			throw new EmptyStackException();
		}else {
			return this.eleDates[topIndex];
		}
	}
	
	//判断栈是否为空
	public boolean isEmpty(){
		return this.topIndex==-1;
	}
	
	//判断栈是否已满
	public boolean isFull(){
		return this.topIndex==(this.eleDates.length-1);
	}
	
	//获取栈的长度
	public int getStackSize(){
		return this.eleDates.length;
	}
	
	//	获取栈中元素的个数
	public int getStackCount(){
		return this.count;
	}
	
	@Override
	public String toString() {
		String stackString = "";
		for (int i = 0; i < eleDates.length; i++) {
			if (eleDates[i]!=null) {
				stackString+=eleDates[i]+" | ";
			}
		}
		return stackString;
	}
	
	public static void main(String[] args) {
		MyStack<Integer> myStack = new MyStack<Integer>(5);
		myStack.push(2);
		myStack.push(100);
		myStack.push(5);
		myStack.push(12);
		myStack.push(33);
		
		System.out.println(myStack);      
	    System.out.println(myStack.pop()); 
		System.out.println(myStack);      
		System.out.println(myStack.pop());      
		System.out.println(myStack);      
		System.out.println(myStack.pop());    
		System.out.println(myStack);      

	}

}

 

 

运行结果:

 

2 | 100 | 5 | 12 | 33 | 
33
2 | 100 | 5 | 12 | 
12
2 | 100 | 5 | 
5
2 | 100 | 

 

 

参考文献:java 源代码;

 

1
1
分享到:
评论
2 楼 raozhiyong11 2010-05-20  
Jathon_hs 写道
有bug,pop出的元素是栈顶-1

        System.out.println(myStack);   
           
  [color=red]      System.out.println(myStack.pop()); [/color]  
        System.out.println(myStack);   
        myStack.pop();   
        System.out.println(myStack);   
        myStack.pop();   
        System.out.println(myStack);  


2 | 100 | 5 | 12 | 33 |
12
2 | 100 | 5 | 12 |
2 | 100 | 5 |
2 | 100 |



谢谢兄台指教,现在已经修改了些啊,您看现在行不?
1 楼 Jathon_hs 2010-05-19  
有bug,pop出的元素是栈顶-1

        System.out.println(myStack);   
           
  [color=red]      System.out.println(myStack.pop()); [/color]  
        System.out.println(myStack);   
        myStack.pop();   
        System.out.println(myStack);   
        myStack.pop();   
        System.out.println(myStack);  


2 | 100 | 5 | 12 | 33 |
12
2 | 100 | 5 | 12 |
2 | 100 | 5 |
2 | 100 |

相关推荐

    java面试笔试题库java学习笔记开发教程互联网公司面试资料大全合集.zip

    跳还是不跳,是一个问题——跳槽时该如何权衡?.docx 进入IT企业必读的324个JAVA面试题.pdf 阿里2015实习生-客户端笔试题目解析.docx 面试帮-IT面试宝典.apk 面试题 面试题库 高吞吐低延迟Java应用的垃圾回收优化....

    java面试笔试资料java笔试题大集合及答案题库java笔试题汇总资料188个合集.zip

    跳还是不跳,是一个问题——跳槽时该如何权衡?.docx 进入IT企业必读的324个JAVA面试题.pdf 阿里2015实习生-客户端笔试题目解析.docx 面试帮-IT面试宝典.apk 面试题库 高吞吐低延迟Java应用的垃圾回收优化.docx 黑马...

    java面试笔试题库java软件设计java笔试题大集合及答案文档资料合集300MB.zip

    跳还是不跳,是一个问题——跳槽时该如何权衡?.docx 进入IT企业必读的324个JAVA面试题.pdf 阿里2015实习生-客户端笔试题目解析.docx 面试帮-IT面试宝典.apk 面试题 面试题库 高吞吐低延迟Java应用的垃圾回收优化....

    2021最新java面试合集pdf.rar

    java后端面试题答案.pdf Java并发Fork-Join框架原理解析.docx JAVA核心知识整理.pdf JAVA核心知识点整理.pdf Java面试笔记.docx JAVA面试题解惑系列.pdf Java面试题(基础).pdf JVM 实用参数系列 - v1.0.pdf JVM与...

    Java实现栈和队列面试题

    主要介绍了Java实现栈和队列的面试题,每个例题代码实现非常详细,每一个方法讲解也很到位,特别适合参加Java面试的朋友阅读。

    JAVA面试题最全集

    请写一个java程序实现线程连接池功能? 44.给定一个C语言函数,要求实现在java类中进行调用。 45.如何获得数组的长度? 46.访问修饰符“public/private/protected/缺省的修饰符”的使用 47.用关键字final修饰一...

    互联网公司Java面试题及核心知识点

    内容概要:本书从近一百套最新一线互联网公司面试题中精选而出,涵盖Java架构面试所有技术栈,包 括JVM,Mysql,并发,Spring,Mybatis,Redis,MQ,Zookeeper,Netty, Dubbo,Spring Boot,Spring Cloud,数据结构...

    java 面试题 总结

    Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。 最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而...

    【剑指offer】面试题9-用两个栈实现队列-完整的可执行代码(Java)

    题目描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 解题思路参考:https://blog.csdn.net/flower_48237/article/details/104055970

    509 道 Java 面试题汇总与解析 免费开源!!

    这 500 多道面试题,都是目前主流企业使用最高频的面试题库,也都是 Java 版本升级之后,重新整理归纳的最新答案,会让面试者少走很多不必要的弯路。同时每道题都做到了详尽的描述,以确保每个阶段的读者都能看得懂...

    java核心面试技术点

    JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader 是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。 1说说JVM原理?内存泄露与溢出区别,何时产生内存泄露? 编译源代码为...

    Java虚拟机(JVM)面试题(总结最全面的面试题!!!)

    Java虚拟机(JVM)面试题(总结最全面的面试题!!!) 文章目录Java内存模型我们开发人员编写的Java代码是怎么让电脑认识的为什么说java是跨平台语言Jdk和Jre和JVM的区别说一下 JVM由那些部分组成,运行流程是什么...

    java核心面试

    JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader 是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。 1说说JVM原理?内存泄露与溢出区别,何时产生内存泄露? 编译源代码为...

    班级-班级系统-班级系统源码-班级管理系统-班级管理系统java代码-基于Web的班级系统设计与实现-班级系统设计与实现-代码

    前端面试题班级-班级系统-班级系统源码-班级管理系统-班级管理系统java代码-班级系统设计与实现-基于springboot的班级系统-基于Web的班级系统设计与实现-班级网站-班级网站代码-班级平台-班级平台代码-班级项目-班级...

    饮食分享-饮食分享平台-饮食分享平台源码-饮食分享平台java代码-基于Web的饮食分享平台设计与实现-饮食分享平台设计与实现

    java面试题饮食分享-饮食分享平台-饮食分享平台源码-饮食分享平台java代码-饮食分享平台设计与实现-基于springboot的饮食分享平台-基于Web的饮食分享平台设计与实现-饮食分享网站-饮食分享网站源码-饮食分享网站java...

    java面试题

    答:多形:一个类中多个同名方法。继承:子类继承父类。 jsp内置对象? 答:request 用户端请求 response 回应 pageContext 网页属性 session 会话 out 输出 page 当前网页 exception 错误网页 application ...

    超级有影响力霸气的Java面试题大全文档

    Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。 最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而...

    2018秋招java笔试题-java_review:Java评论

    面试题 2021.4.10 英礡Improbable笔试题 (2021 Improbable Intern Online Test) 括号匹配 约瑟夫环 2021.03.31 华为校园招聘软件笔试题 2021.3.31 兴业数金Java校园招聘笔试试卷(cibfintech) 2021.3.29 网易2021校招...

    Java常见面试题整理出来了

    ⑦一个类可以实现多个接口,但只能继承一个抽象类。 ⑧接口更多的是在系统框架设计方法发挥作用,主要定义模块之间的通信,而抽象类在代码实现方面发挥作用,可以实现代码的重用。 2.Java 虚拟机的运行时数据区有...

Global site tag (gtag.js) - Google Analytics