zoukankan      html  css  js  c++  java
  • 数据存储--栈

      常见的三种数据存储类型:栈、队列和优先队列。其不同于数组类型,类似有链表、数等。它们适用于数据库应用中作数据记录,方便作一些增删改,而本次所述的这三种,通常用作算法辅助工具。并且不像数组中是通过下标访问结构中的元素,这里对数据的访问时受限的,只可提供某个时刻的一个数据项。

      

      认识:栈类似于面试官手里不断接收到的应聘简历,在不考虑其他因素下,总是看到最上面的简历。栈包含三个基本操作:push(入栈)、pop(出栈)、peek(查看)。

      下面的例子,描述了类似于a(b(c))(d)e这样的字符串,检测括号是否匹配。

      1 package com.test;
      2 
      3 public class Test{
      4     public static void main(String[] args) {
      5         
      6         String input = "aa(vv(cew)(ew))(w)";
      7         checker c = new checker(input);
      8         c.check();
      9         
     10     }
     11 }
     12 
     13 /**
     14  * 检测类
     15  * @author jingxin
     16  *
     17  */
     18 class checker{
     19     private String input;
     20     
     21     public checker(String in){
     22         input = in;
     23     }
     24     
     25     public void check(){
     26         stack s = new stack(input.length());  // 初始化栈
     27         
     28         for (int i = 0; i < input.length(); i++) {
     29             char ch = input.charAt(i);
     30             switch(ch){
     31                 case '{':  // 开始标签
     32                 case '[':
     33                 case '(':
     34                     if(!s.isFull()){
     35                         // 压入开始标签
     36                         s.push(ch);
     37                     }
     38                     break;
     39                 case '}':  // 结束标签
     40                 case ']':
     41                 case ')':
     42                     if(!s.isEmpty()){
     43                         // 取出开始标签
     44                         char chp = s.pop();
     45                         if(ch=='}' && chp!='{' ||
     46                            ch==']' && chp!='[' ||
     47                            ch==')' && chp!='('){
     48                             System.out.println("Error:"+ch+"在位置"+i+"上");
     49                         }
     50                         
     51                     }else{
     52                         System.out.println("Error:"+ch+"在位置"+i+"上");
     53                     }
     54                     break;
     55                 default:
     56                     break;
     57             }
     58         }
     59         if(!s.isEmpty()){
     60             System.out.println("Error: 缺少正确的分隔符");
     61         }
     62         
     63     }
     64     
     65 }
     66 
     67 
     68 
     69 /**
     70  * 栈
     71  * @author jingxin
     72  *
     73  */
     74 class stack {
     75 
     76     private int maxSize; // 栈大小
     77     private char[] stackArray;  // 基于数组
     78     private int top; // 栈顶位置
     79     
     80     public stack(int s){
     81         maxSize = s;
     82         stackArray = new char[maxSize];
     83         top = -1;  // 空栈
     84     }
     85     
     86     // 入栈
     87     public void push(char j){
     88         stackArray[++top] = j;  // 先将指针向上移,再添加元素
     89     }
     90     
     91     // 出栈
     92     public char pop(){
     93         return stackArray[top--];  // 先出栈,然后将指针下移
     94     }
     95     
     96     // 查看栈(只能查看栈顶的一个元素)
     97     public char peek(){
     98         return stackArray[top];
     99     }
    100     
    101     // 判断栈是否为空
    102     public boolean isEmpty(){
    103         return (top == -1);
    104     }
    105 
    106     // 判断栈是否满了
    107     public boolean isFull(){
    108         return (top == maxSize-1);
    109     }
    110 }
  • 相关阅读:
    Nginx进阶-不停服更新
    Tengine安装
    初识Nginx
    自建Nuget服务器
    WebApi PUT、DELETE请求时出现405
    Mysql分页查询性能分析
    Asp.Net WebApi Swagger终极搭建
    到底什么是程序员思维,设计师思维
    [有了SSL证书,如何在IIS环境下部署https?【转载】]
    div 文章内容自动分屏显示
  • 原文地址:https://www.cnblogs.com/x-jingxin/p/6831745.html
Copyright © 2011-2022 走看看