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 }