实现一个栈操作,将1~12月的英文单词压入栈中,然后再取出

来源:互联网 发布:域名交易网站源码 编辑:程序博客网 时间:2024/05/01 05:06

栈(stack)可以是一个“后进先出”的数据结构,先进入的元素在栈底,最后一个元素在栈顶,换言之,在栈里最后一个压入的元素将会是第一个取出来的。这里和其他java一样,入栈和出栈的元素都是Object类型。

这里我实现的栈的初始容量为10,当容量不够时自动扩容,每次扩容为原来的一倍。

pop()方法,可以返回栈顶元素的引用。

实现代码如下:

/*程序来源:德国著名ERP软件公司S2005年10月面试题 * 源文件名称:Stack.java *要  点: *实现一个栈操作,将1~12月的英文单词压入栈中, *然后再将其取出,使用java代码实现。 */public class Stack{private int CAPACITY = 10;private int stackp = 0;//栈顶指针Object[] objs;public Stack(){objs = new Object[CAPACITY];}public Stack(int capacity){CAPACITY = capacity;objs = new Object[CAPACITY];}public void push(Object obj){if(stackp < CAPACITY){objs[stackp] = obj;stackp++;}else{//如果栈满了自动扩容,每次扩大一倍int temp_capacity = CAPACITY*2;Object[] temp_objs = new Object[temp_capacity];for(int i = 0;i<CAPACITY;i++){temp_objs[i] = objs[i];}CAPACITY = temp_capacity;objs = temp_objs;objs[stackp] = obj;stackp++;}}public Object pop(){Object obj = null;if(stackp>0){stackp--;obj = objs[stackp];objs[stackp] = null;}return obj;}public Object top(){if(!isEmpty)return objs[stackp-1];else{return null;}}public int size(){return stackp;}public boolean isEmpty(){return stackp==0?true:false;}public static void main(String[] args){Stack s = new Stack();String[] months = {"January","February","March","April","May","June","July","August","September","October","November","December"};for(int i =0;i<months.length;i++){s.push(months[i]);}System.out.println(s.size()+" "+s.isEmpty());for(int i =0;i<months.length;i++){System.out.println( s.pop());}System.out.println(s.size()+" "+s.isEmpty());//测试栈自动扩容for(int i = 0;i<10;i++){s.push(i+"");}System.out.println(s.size()+" "+s.isEmpty());for(int i = 10;i<20;i++){s.push(i+"");}System.out.println(s.size()+" "+s.isEmpty());}}

结果如图所示:



0 0
原创粉丝点击