`
raozhiyong11
  • 浏览: 138928 次
  • 性别: 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基础面试题源码资料.zip

    - **继承**:一个类可以继承另一个类的特性,实现代码重用。 - **多态**:同一种行为可以有不同的表现形式,如方法重载和覆盖。 - **抽象**:抽象类和接口用于定义行为规范,实现抽象和具体实现的分离。 3. **...

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

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

    java面试笔试题库java软件设计java笔试题大集合及答案文档资料合集300MB.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 黑马...

    2021年JAVA开发面试题.zip

    以上内容是根据"2021年JAVA开发面试题"这个主题推测出的可能涵盖的知识范围。由于提供的压缩文件列表仅包含.jpg图像文件,无法直接提供具体面试题目的详细内容。通常,面试题可能会以文字文档、PDF或文本文件的形式...

    Java 最常见 200+ 面试题全解析:面试必备208题

    Java作为一门广泛使用的编程语言,其面试题涵盖了众多的知识领域,包括基础语法、面向对象、集合框架、多线程、网络编程、IO流、异常处理、JVM内存模型、设计模式、数据库操作、Spring框架等。以下是对这些知识点的...

    Java后端面试题

    8. **源文件中的多个类**:一个`.java`文件中可以包含多个类,但只能有一个公共类,且文件名必须与该公共类名相同。 9. **排序方法**:常见的排序算法包括冒泡排序、插入排序、快速排序等。 10. **Overload和...

    2024java面试题.pdf

    - **重写**:发生在子类和父类之间,子类可以定义一个与父类具有相同签名(方法名和参数列表都相同)的方法,以覆盖父类的实现。 3. **转发(forward)与重定向(redirect)的区别:** - **转发**:服务器内部...

    2024年Java高工面试题 2024年Java高工面试题 2024年Java高工面试题

    - **栈**: 每个线程拥有自己的栈,用于存储局部变量、操作数栈、动态链接等信息。 - **本地方法栈**: 为虚拟机使用到的Native方法服务。 - **程序计数器**: 当前线程所执行的字节码的行号指示器。 #### 3. 栈帧结构...

    汇总java面试题2019版.rar

    Java是一种广泛使用的面向对象的编程语言,以其平台独立性、高效性和丰富的类库而闻名。在2019年的面试中,Java开发者需要对各种核心概念有深入理解,包括但不限于语法、面向对象特性、集合框架、多线程、异常处理、...

    Java面试题2022

    5. **JVM内存管理**:面试官常常会询问Java内存模型,如堆内存、栈内存、方法区、本地方法栈,以及垃圾回收机制(GC)。理解对象的生命周期和内存分配,以及如何调优JVM参数,对于解决性能问题至关重要。 6. **IO流...

    Java各种必备面试题目程序代码例子与应战技巧.zip

    本压缩包"Java各种必备面试题目程序代码例子与应战技巧.zip"提供了丰富的面试题和实战代码,帮助你应对各种Java面试挑战。 1. **基础语法**: - 面试题:解释Java中的封装、继承和多态。 - 实战代码:创建简单的...

    java面试题及答案(全)

    - 面试题:如何在Java中实现多线程? - 答案:可以通过继承Thread类或实现Runnable接口,然后通过Thread对象的start()方法启动线程。 6. **垃圾回收机制** - 面试题:解释Java的垃圾回收机制。 - 答案:Java...

    Java 最常见200道面试题.pdf

    首先,文档描述了一个名为“Java 最常见200道面试题.pdf”的文件,它是一个集合了互联网公司面试题的集锦,主要针对后台、客户端、测试、数据、算法等职位。文档强调了这些面试题对于准备面试的程序员具有很高的价值...

    2021年java面试题.pdf

    本资源是 Java 面试题大全,涵盖了 Java 及其相关技术栈的方方面面,包括 MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、Spring Boot、Spring Cloud、RabbitMQ、Kafka、Linux 等。...

    java基础面试题汇总,通过代码的方式理解面试题.zip

    本资料“java基础面试题汇总,通过代码的方式理解面试题.zip”正是为帮助开发者准备Java面试而设计的,它包含了大量常见的Java基础面试题,并提供了相应的代码示例来加深理解。 一、Java基础概念 1. 类与对象:Java...

    北大青鸟JAVA面试题

    封装是JAVA面向对象编程的一个核心原则,它通过将数据和操作数据的方法封装在一起,保护数据不被外部代码直接访问和修改,从而提高了代码的安全性和维护性。Java的封装通过使用访问修饰符(如public, private, ...

    Java面试题整理.zip

    8. **MyBatis**:MyBatis是一个持久层框架,它将SQL语句与Java代码分离,简化了数据访问。面试者需了解Mapper接口的使用,动态SQL的编写,以及MyBatis的缓存机制。 9. **JVM虚拟机**:面试者应掌握JVM内存模型(堆...

    Java面试题笔试题大全

    Java作为全球最流行的编程语言之一,其面试题和笔试题是评估开发者技能的重要标准。这份“Java面试题笔试题大全”资源旨在帮助求职者全面准备Java相关的技术面试和笔试环节,提升成功几率。CHM(Compiled Help ...

Global site tag (gtag.js) - Google Analytics