zoukankan      html  css  js  c++  java
  • 栈与队列 栈

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

     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)。也就是说,栈操作所花的时间不依赖与栈中数据项的个数,因此操作时间很短,栈不需要比较和移动操作。

  • 相关阅读:
    一百一十:CMS系统之剩余菜单栏的页面和视图
    一百零九:CMS系统之前端根据不同权限渲染不同菜单
    一百零八:CMS系统之封装权限判断功能
    一百零七:CMS系统之权限和角色模型定义
    一百零六:CMS系统之修改邮箱功能完成
    一百零五:CMS系统之flask-mail使用和邮箱配置、发送邮件功能
    一百零四:CMS系统之修改邮箱界面
    一百零三:CMS系统之使用sweetalert提示框优化返回结果
    一百零二:CMS系统之sweetalert提示框和使用
    一百零一:CMS系统之自定义restful风格json返回格式和内容
  • 原文地址:https://www.cnblogs.com/xuekyo/p/2764931.html
Copyright © 2011-2022 走看看