ijava学习网> 知识分享> JAVA框架> java栈实现的两种方式

java栈实现的两种方式

时间: 2018-09-11 13:52:12 标签


2种实现方式:

一、数组实现的栈,能存储任意类型的数据;

二、Java的 Collection集合 中自带的"栈"(stack)的示例;

1、数组实现的栈,能存储任意类型的数据方式的代码实现

/**
* Java : 数组实现的栈,能存储任意类型的数据
*
* @author skywang
* @date 2013/11/07
*/
import java.lang.reflect.Array;

public class GeneralArrayStack{

   private static final int DEFAULT_SIZE = 12;
   private T[] mArray;
   private int count;

   public GeneralArrayStack(Classtype) {
       this(type, DEFAULT_SIZE);
   }

   public GeneralArrayStack(Classtype, int size) {
       // 不能直接使用mArray = new T[DEFAULT_SIZE];
       mArray = (T[]) Array.newInstance(type, size);
       count = 0;
   }

   // 将val添加到栈中
   public void push(T val) {
       mArray[count++] = val;
   }

   // 返回“栈顶元素值”
   public T peek() {
       return mArray[count-1];
   }

   // 返回“栈顶元素值”,并删除“栈顶元素”
   public T pop() {
       T ret = mArray[count-1];
       count--;
       return ret;
   }

   // 返回“栈”的大小
   public int size() {
       return count;
   }

   // 返回“栈”是否为空
   public boolean isEmpty() {
       return size()==0;
   }

   // 打印“栈”
   public void PrintArrayStack() {
       if (isEmpty()) {
           System.out.printf("stack is Empty\n");
       }

       System.out.printf("stack size()=%d\n", size());

       int i=size()-1;
       while (i>=0) {
           System.out.println(mArray[i]);
           i--;
       }
   }

   public static void main(String[] args) {
       String tmp;
       GeneralArrayStackastack = new GeneralArrayStack(String.class);

       // 将10, 20, 30 依次推入栈中
       astack.push("10");
       astack.push("20");
       astack.push("30");

       // 将“栈顶元素”赋值给tmp,并删除“栈顶元素”
       tmp = astack.pop();
       System.out.println("tmp="+tmp);

       // 只将“栈顶”赋值给tmp,不删除该元素.
       tmp = astack.peek();
       System.out.println("tmp="+tmp);

       astack.push("40");
       astack.PrintArrayStack();    // 打印栈
   }
}

测试代码

运行结果:


1 tmp=30
2 tmp=20
3 stack size()=3
4 40
5 20
6 10

结果说明:GeneralArrayStack是通过数组实现的栈,而且GeneralArrayStack中使用到了泛型。

2、Java的 Collection集合 中自带的"栈"(stack)的代码实现

import java.util.Stack;

/**
* Java : java集合包中的Stack的演示程序
*
* @author skywang
* @date 2013/11/07
*/
public class StackTest {

   public static void main(String[] args) {
       int tmp=0;
       Stackastack = new Stack();

       // 将10, 20, 30 依次推入栈中
       astack.push(10);
       astack.push(20);
       astack.push(30);

       // 将“栈顶元素”赋值给tmp,并删除“栈顶元素”
       tmp = astack.pop();
       //System.out.printf("tmp=%d\n", tmp);

       // 只将“栈顶”赋值给tmp,不删除该元素.
       tmp = (int)astack.peek();
       //System.out.printf("tmp=%d\n", tmp);
       
       astack.push(40);
       while(!astack.empty()) {
           tmp = (int)astack.pop();
           System.out.printf("tmp=%d\n", tmp);
       }
   }
}

测试结果

tmp=40
tmp=20
tmp=10

 


 

版权说明| 关于ijava| 合作伙伴| 联系我们| 网站地图| 招贤纳士

Copyright © 2017 www.ijava.com All Rights Reserved 版权所有•ijava学习网 京ICP备14061482号-18         官方QQ:3325669927

ijava学习网提供免费java教程和大量java面试题库,给高级会员提供免费的java培训,同时提共一些java开发项目和java下载,java工程师,java菜鸟们快来哦。记住我们的网站:www.ijava.com