1.堆栈是一种线性数据结构,先进后出。

2.应用一:在程序中匹配分隔符(在 java程序中读取一个字符,如果它是左分隔符就将他压入堆栈。如果它是右分隔符,就将他和栈中弹出的一个分隔符相比较,如果匹配,就继续处理,否则就发出了一个错误信号,停止处理)

 应用二:执行一些非常大的数字的加法。

   应用三:java中的jvm是基于堆栈的。

3.堆栈的数组链表实现

1 package sequence_stack;
 2 
 3 public class sq_Stack {
 4     private java.util.ArrayList pool = new java.util.ArrayList();
 5     public sq_Stack(){
 6 
 7     }
 8     public sq_Stack(int n){
 9         pool.ensureCapacity(n);
10     }
11     public void clear(){
12         pool.clear();
13     }
14     public boolean isEmpty(){
15         return pool.isEmpty();
16     }
17 //    public Object topEl(){    据初步估计,这个函数应该是为了返回最后一个元素,但出错了,不知道为什么。
18 //        if(isEmpty())
19 //             throw new java.util.EmptyStackException();
20 //        return pool.lastElement();
21 //    }
22     public Object pop(){
23         if(isEmpty())
24             throw new java.util.EmptyStackException();
25         return pool.remove(pool.size() - 1);
26     }
27     public void push(Object e1){
28         pool.add(e1);
29     }
30     public String toString(){
31         return pool.toString();
32     }
33 }

4.堆栈的链表实现

1 package linklist_stack;
 2 
 3 public class LLStack {
 4     private java.util.LinkedList list = new java.util.LinkedList();
 5     public LLStack(){
 6         
 7     }
 8     public void clear(){
 9         list.clear();
10     }
11     public boolean isEmpty(){
12         return list.isEmpty();
13     }
14     public Object topEl(){
15         if(isEmpty())
16             throw new java.util.EmptyStackException();
17         return list.getLast();
18     }
19     public Object pop(){
20         if(isEmpty())
21             throw new java.util.EmptyStackException();
22         return list.removeLast();
23     }
24     public void push(Object e1){
25         list.addLast(e1);
26     }
27     public String toString(){
28         return list.toString();
29     }
30 }