定义:也称堆栈,一种限制只能在一端进行插入和删除操作的线性表。遵循LIFO(Last In First Out)后进先出
    一种特殊的线性表,它在存储结构上分顺序存储和链式存储,只是在操作上与普通线性表不一样。
    
栈顶:(插入和删除数据端)存储在栈顶位置的数据元素称栈顶元素
栈底:存储在栈底位置的数据元素称栈底元素
    
进栈:插入操作
出栈(退栈):删除操作

范例:检测字符串中包含的小括号是否配对
1.栈操作的接口 - Stack

 1 /**
 2  * @Description: 栈的接口
 3  * @author Ivy
 4  */
 5 public interface Stack {
 6 //    入栈
 7     public void push(Object item);
 8 //    查询并返回栈顶值,并出栈(删除栈顶值)
 9     public Object pop();
10 //    查询并返回栈顶值
11     public Object peek();
12 //    判断是否为空栈
13     public boolean isEmpty();
14 //    返回栈的大小
15     public int size();
16 }


2.栈的顺序存储 - SequenceStack

 1 /**
 2  * @Description: 栈的顺序存储
 3  * @author Ivy
 4  */
 5 public class SequenceStack implements Stack{
 6 
 7     private SequenceList stackList;
 8     
 9     public SequenceStack(){
10         stackList = new SequenceList();
11     }
12     
13     @Override
14     public void push(Object item) {
15         stackList.add(item);
16     }
17 
18     @Override
19     public Object pop() {
20         if (isEmpty()) {
21             throw new EmptyStackException();
22         }
23         return stackList.remove(stackList.size() - 1);
24     }
25 
26     @Override
27     public Object peek() {
28         if (isEmpty()) {
29             throw new EmptyStackException();
30         }
31         return stackList.get(stackList.size() - 1);
32     }
33 
34     @Override
35     public boolean isEmpty() {
36         return stackList.isEmpty();
37     }
38 
39     @Override
40     public int size() {
41         return stackList.size();
42     }
43 
44 }


3.功能类 - Symmetry

 1 public class Symmetry {
 2     public static boolean isSymmetry(String args) {
 3         Stack SS = new SequenceStack();
 4         int size = args.length();
 5         for (int i = 0; i < size; i++) {
 6             char c = args.charAt(i);
 7             switch (c) {
 8             case 40://左括号"("的ASCII码
 9                 SS.push("(");
10                 break;
11 
12             case 41://右括号")"的ASCII码
13                 if (SS.pop().equals(")")) {
14                     return true;
15                 }
16                 break;
17             }
18         }
19         return false;
20     }
21 }


4.测试类

1 public class Test {
2     public static void main(String[] args) {
3         String s = "111(222)333";
4         boolean flag = Symmetry.isSymmetry(s);
5         System.out.println("小括号是否匹配:" + flag);
6     }
7 
8 }

 



posted @ 2016-08-08 15:35  Ivy_Xu  阅读(215)  评论(0编辑  收藏  举报