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



  • 相关阅读:
    JavaScript面向对象精要(一)
    触摸事件
    移动端触摸事件介绍
    总结js常用函数和常用技巧(持续更新)
    JavaScript 常用函数总结
    windows环境下安装vue+webpack的开发环境
    js面向对象,多种创建对象方法!
    javascript遍历算法与技巧
    前端工作面试问题--摘取自github
    c++刷题(27/100)反转单项链表,链表的倒数第k个
  • 原文地址:https://www.cnblogs.com/ivy-xu/p/5749498.html
Copyright © 2020-2023  润新知