用java代码实现一个自己的栈.
2010-09-08 21:33
776 查看
//转载raozhiyong11的
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);
}
}
运行结果:
Java代码
2 | 100 | 5 | 12 | 33 |
33
2 | 100 | 5 | 12 |
12
2 | 100 | 5 |
5
2 | 100 |
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);
}
}
运行结果:
Java代码
2 | 100 | 5 | 12 | 33 |
33
2 | 100 | 5 | 12 |
12
2 | 100 | 5 |
5
2 | 100 |
相关文章推荐
- 简单完整的代码,通过这个代码你将对RSA加密算法在Java中的实现方法有一个初步的了解,这个类,你可以直接使用,水平高的,就自己修改完善下代码。
- java中自己实现一个服务端对应多个客户端的简单代码
- java 实现.Z解压(代码是忘记在哪里找到的,自己整合了一下)
- 自己写的一个代码自动生成工具_java版_源码下载
- 自己写一个java.lang.reflect.Proxy代理的实现
- 一个集合的所有子集的Java代码实现
- 我有一个集合,如下,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现。
- Java求一个分数数列的前20项之和的实现代码
- 自己用代码实现非空目录的删除(java及C语言)
- 颜色控件【MFC】自己写一个ListCtrl控件(实现栅格属性表的编辑)-java教程
- java之实现Cloneable接口的详解,克隆一个对象--对应有浅克隆和深克隆,概念结合代码深入理解
- 自己动手写工具(一)一个用Java8实现的内存级别的缓存
- 也发一个自己实现的android简单文件选择器代码。支持多卡,排序
- 用java实现简单的网络通信,相当于一个最简单的控制台qq(附代码) 推荐
- 第一次动手写java的简单代码,实现输出一个空心菱形。
- [JAVA]集合框架之自己实现一个具有基本增查删改功能的ArrayList
- 深度学习一:自己写java代码,训练一个神经元
- Java实现分页功能 代码很粗糙,都是根据自己所需去定义逻辑功能的。
- java事务全解析(四)--成功的案例(自己实现一个线程安全的TransactionManager)
- 结合微软的部分代码再加上自己整理的代码实现的一个我个人觉得很强大的序列化/反序化类