Java数据结构:栈的实现

发表于:2012-5-17 09:27

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:liuzhenfeng    来源:51Testing软件测试网采编

  栈是Java语言中最重要的数据结构之一,它的实现,至少应该包括以下几个方法:

  1、pop() 出栈操作,弹出栈顶元素。

  2、push(E e) 入栈操作

  3、peek() 查看栈顶元素

  4、isEmpty() 栈是否为空

  另外,实现一个栈,还应该考虑到几个问题:

  1、栈的初始大小以及栈满以后如何新增栈空间

  2、对栈进行更新时需要进行同步

  简单示例,使用数组实现栈,代码如下:

  1. <pre name="code" class="java">public class Stack<E> {  
  2.     // Java 不支持泛型数组,如需使用,请使用Java提供的容器 
  3.     private Object[] stack;  
  4.     // 栈的默认初始大小 
  5.     private static final int INIT_SIZE = 2;  
  6.     // 栈顶索引 
  7.     private int index;  
  8.     public Stack() {  
  9.         stack = new Object[INIT_SIZE];  
  10.         index = -1;  
  11.     }  
  12.     /** 
  13.      * 构造方法 
  14.      *  
  15.      * @param initSize 
  16.      *            栈的初始大小 
  17.      */ 
  18.     public Stack(int initSize) {  
  19.         if (initSize < 0) {  
  20.             throw new IllegalArgumentException();  
  21.         }  
  22.         stack = new Object[initSize];  
  23.         index = -1;  
  24.     }  
  25.     /** 
  26.      * 出栈操作 
  27.      *  
  28.      * @return 栈顶对象 
  29.      */ 
  30.     public synchronized E pop() {  
  31.         if (!isEmpty()) {  
  32.             E temp = peek();  
  33.             stack[index--] = null;  
  34.             return temp;  
  35.         }  
  36.         return null;  
  37.     }  
  38.     /** 
  39.      * 入栈操作 
  40.      *  
  41.      * @param obj 
  42.      *            等待入栈的对象 
  43.      */ 
  44.     public synchronized void push(E obj) {  
  45.         if (isFull()) {  
  46.             Object[] temp = stack;  
  47.             // 如果栈满,则创建空间为当前栈空间两倍的栈 
  48.             stack = new Object[2 * stack.length];  
  49.             System.arraycopy(temp, 0, stack, 0, temp.length);  
  50.         }  
  51.         stack[++index] = obj;  
  52.     }  
  53.     /** 
  54.      * 查看栈顶对象 
  55.      *  
  56.      * @return 栈顶对象 
  57.      */ 
  58.     public E peek() {  
  59.         if (!isEmpty()) {  
  60.             return (E) stack[index];  
  61.         }  
  62.         return null;  
  63.     }  
  64.     /** 
  65.      * 查看栈是否为空 
  66.      *  
  67.      * @return 如果栈为空返回true,否则返回false 
  68.      */ 
  69.     public boolean isEmpty() {  
  70.         return index == -1;  
  71.     }  
  72.     /** 
  73.      * 查看栈是否满 
  74.      *  
  75.      * @return 如果栈满返回true,否则返回false 
  76.      */ 
  77.     public boolean isFull() {  
  78.         return index >= stack.length - 1;  
  79.     }  
  80. }

  最后说明,Java中实现了栈(java.util.Stack)的数据结构,它是通过继承Vector类实现的,一般情况下我们直接拿来用就行了。

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号