• 栈与队列 栈


    栈:先进后出,后进先出。

     1 public class Stack {
     2 
     3     private int maxSize;
     4     private int[] stackArray;
     5     private int top;
     6     
     7     public Stack(int s){
     8       this.maxSize = s;
     9       stackArray = new int[maxSize];
    10       top = -1;
    11     }
    12     
    13     public void push(int d){
    14       stackArray[++top] = d;
    15     }
    16     
    17     public int pop(){
    18       return stackArray[top--];
    19     }
    20     
    21     public int peek(){
    22       return stackArray[top];
    23     }
    24     
    25     public boolean isFull(){
    26       return top == maxSize-1;
    27     }
    28     
    29     public boolean isEmpty(){
    30       return top == -1;
    31     }
    32     
    33 }
     1     public static void main(String[] args) {
     2       Stack stack = new Stack(5);
     3       stack.push(1);
     4       stack.push(2);
     5       stack.push(3);
     6       stack.push(4);
     7       while (!stack.isEmpty()) {
     8           System.out.println(stack.pop());
     9       }
    10     }

    打印结果:
    4
    3
    2
    1

    栈的应用:分隔符匹配

     1 class BracketChecker {
     2     private String input;
     3 
     4     public BracketChecker(String s) {
     5       this.input = s;
     6     }
     7 
     8     public void check() {
     9       int size = input.length();
    10       Stack stack = new Stack(size);
    11       for (int i = 0; i < size; i++) {
    12           char c = input.charAt(i);
    13           switch (c) {
    14             case '{':
    15             case '[':
    16             case '(':
    17               stack.push(c);
    18               break;
    19             case '}':
    20             case ']':
    21             case ')':
    22               if (!stack.isEmpty()) {
    23                   char cx = (char) stack.pop();
    24                   if ((c == '{' && cx != '}') || (c == '[' && cx != ']')
    25                       || (c == '(' && cx != ')')) {
    26                   System.out.println("Error : " + c + " at " + i);
    27                   }
    28               } else {
    29                   System.out.println("Error : " + c + " at " + i);
    30               }
    31               break;
    32             default:
    33             break;
    34           }
    35       }
    36       if (!stack.isEmpty()) {
    37           System.out.println("Error : missing right delimiter .");
    38       }
    39     }
    40 }
    1     public static void main(String[] args) {
    2       String input = "{ab[c](e)}d}";
    3       BracketChecker checker = new BracketChecker(input);
    4       checker.check();
    5     }

    打印结果:
    Error : } at 11

    栈的效率:
    数据项入栈和出栈的时间复杂度都为常数O(1)。也就是说,栈操作所花的时间不依赖与栈中数据项的个数,因此操作时间很短,栈不需要比较和移动操作。

  • 相关阅读:
    洛谷P2742 【模板】二维凸包
    计算几何笔记
    洛谷P1251 餐巾计划问题(最小费用最大流)
    洛谷P2762 太空飞行计划问题(最大权闭合图)
    洛谷P2764 最小路径覆盖问题(二分图)
    [置顶] Guava学习之ArrayListMultimap
    sphinx coreseek SetSortMode(SPH_SORT_ATTR_ASC, '') 对float 排序设置bug
    magento 修改 paypal order product name
    硬盘“坏了”怎么办
    能够兼容ViewPager的ScrollView
  • 原文地址:https://www.cnblogs.com/xuekyo/p/2764931.html
Copyright © 2020-2023  润新知