自定义实现的一个简单的栈结构

来源:互联网 发布:淘宝网首页官网登录 编辑:程序博客网 时间:2024/05/13 18:33


package testJava;import java.util.Arrays;public class MyStack<T> {//设置栈的默认大小private static int DEFAULT_SIZE=3;//当前栈中的元首private int size=0;//每次需要扩展的容量private int capacity=0;//永远指向可添加元素的位置private int index=0;  private Object[] array;public MyStack(){this.capacity=this.DEFAULT_SIZE;array=new Object[this.capacity];}//自定义栈大小public MyStack(int capacity){this.capacity=capacity;array=new Object[this.capacity];}//判断栈是否为空public boolean isEmpty() {return size==0;}//查看栈顶元素,并不出栈public T peek() {return (T)this.array[this.index-1];}//出栈public T pop() {index--;T t= (T)this.array[this.index];this.array[this.index]=null;this.size--;return t;}//压栈public void push(T t) {if (this.size<this.capacity) {this.array[this.index]=t;this.index++;this.size++;}else {enlarge();this.array[this.index]=t;this.index++;this.size++;}}//扩充容量,然后把原始数据复制到新数组中,然后再赋值回array数组public void enlarge(){System.out.println("enlarge----");//设置新数组扩充的大小this.capacity=this.capacity+this.DEFAULT_SIZE;Object[] temp=new Object[this.capacity];//把原始数据复制到新的数组中System.arraycopy(array, 0, temp, 0, array.length);//清空原始数据的值Arrays.fill(array, null);//把新的数组再赋值回原始数组this.array=temp;}//清空栈数据,让数组成为初始状态public void clear(){Arrays.fill(array, null);this.index=0;this.size=0;this.capacity=this.DEFAULT_SIZE;//重新创建一个数组array=new Object[this.capacity];}//计算当前的元素个数public int count() {return this.size;}public static void main(String[] args) {MyStack<String> myStack = new  MyStack<String>();System.out.println("判断数组是否为空:"+myStack.isEmpty());myStack.push("a");myStack.push("b");myStack.push("c");System.out.println("判断数组的元素数量:"+myStack.count());System.out.println("查看栈顶的元素:"+myStack.peek());System.out.println("判断数组的元素数量:"+myStack.count());myStack.push("d");System.out.println("判断数组的元素数量:"+myStack.count());System.out.println("出栈操作:"+myStack.pop());System.out.println("出栈操作:"+myStack.pop());System.out.println("出栈操作:"+myStack.pop());System.out.println("出栈操作:"+myStack.pop());System.out.println("判断数组是否为空:"+myStack.isEmpty());myStack.clear();System.out.println("this.size="+myStack.count()+","+"this.capacity="+myStack.capacity);}}


0 0
原创粉丝点击