堆栈(Stack)是一个比较普通,而又特别的数据结构。合理利用它的先进后出(FILO),有时候会有一些比较好的作用。这里面不多讲的它的应用,而是举一个很简单的例子来表明它的FILO特性,并用数组来实现一个堆栈算法。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
请看代码:
- importjava.util.*;
- publicclassTestStack{
- publicstaticvoidmain(Stringargs[]){
- Stack<String>stack=newStack<String>();
- for(inti=0;i<10;i++)
- stack.push("Stack"+i);
- while(!stack.isEmpty())
- System.out.println(stack.pop());
- }
- }
结果我就不打印了,从上面的例子中,我们可以看出Stack类的一些典型方法,比如push,pop和isEmpty方法。下面就利用数组来实现一个Stack算法:
- classStackOverflowExceptionextendsException{
- publicStackOverflowException(){
- }
- }
- classStackEmptyExceptionextendsException{
- publicStackEmptyException(){
- }
- }
- publicclassStackClass{
- privateintstackSize;
- privateintstackTop;
- privateString[]array;
- publicStackClass(){
- System.out.println("ThecurrentStackcapacityis100.");
- stackSize=100;
- stackTop=0;
- array=newString[stackSize];
- }
- publicStackClass(intsize){
- if(size<=0){
- System.out.println("ThecurrentStackcapacityis100.");
- stackSize=100;
- }
- stackSize=size;
- stackTop=0;
- array=newString[stackSize];
- }
- publicbooleanisFullStack(){
- returnstackSize==stackTop;
- }
- publicbooleanisEmptyStack(){
- returnstackTop==0;
- }
- publicvoidpush(Stringstr)throwsStackOverflowException{
- if(isFullStack())
- thrownewStackOverflowException();
- array[stackTop]=str;
- stackTop++;
- }
- publicStringpop()throwsStackEmptyException{
- if(isEmptyStack())
- thrownewStackEmptyException();
- stackTop--;
- returnarray[stackTop];
- }
- publicstaticvoidmain(Stringargs[]){
- StackClassstack=newStackClass();
- try{
- stack.push("a");
- stack.push("aa");
- stack.push("aaa");
- }
- catch(StackOverflowExceptione){
- e.printStackTrace();
- }
- try{
- while(!stack.isEmptyStack())
- System.out.println(stack.pop());
- }
- catch(StackEmptyExceptione){
- e.printStackTrace();
- }
- }
- }
输出结果是:
- ThecurrentStackcapacityis100.
- aaa
- aa
- a
当然这个堆栈的实现还是有许多不足的地方,比如只能存储字符串型的元素,关于它的完善将在以后进行。大家先只是看看想想吧...^_^...