定义:也称堆栈,一种限制只能在一端进行插入和删除操作的线性表。遵循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 }