zoukankan      html  css  js  c++  java
  • 栈的应用(C++实现)

    使用C++语言实现栈的创建、进栈、出栈、判断栈空等功能。

      1 #include <iostream>
      2 #include <string.h>
      3 using namespace std ;
      4 
      5 #define ERROR -1
      6 #define CORRECT 1
      7 
      8 //堆栈的定义,定义一个堆栈结构,其存储结构包含栈底指针base和栈顶指针top
      9 #define MAXSTACKSIZE 100
     10 typedef struct SqStack
     11 {
     12     char base[MAXSTACKSIZE] ;
     13     char *top ;
     14 } SqStack ;
     15 
     16 SqStack MBStack ;
     17 
     18 //初始化堆栈,若栈不存在(base == NULL),返回ERROR,将top指向base
     19 int InitStack (SqStack &S)
     20 {
     21     if (S.base == NULL)
     22     {
     23         return (ERROR) ;
     24     }
     25     else
     26     {
     27         S.top = S.base ;    //初始化堆栈(清空)
     28         return (CORRECT) ;
     29     }
     30 }
     31 
     32 //进栈,若top超出范围,返回ERROR,将数据(e)插入栈顶指定位置(top)上,栈顶指针(top)加一
     33 int Push (SqStack &S , char e)
     34 {
     35     if ((S.top-S.base) >= MAXSTACKSIZE)
     36     {
     37         return (ERROR) ;
     38     }
     39     else
     40     {
     41         S.base[S.top - S.base] = e ;
     42         S.top++ ;
     43         return (CORRECT) ;
     44     }
     45 }
     46 
     47 //出栈,若为空,返回ERROR,否则取出一个数据放入变量e中,top--
     48 int Pop (SqStack &S , char &e)
     49 {
     50     if (S.top <= S.base)
     51     {
     52         return (ERROR) ;
     53     }
     54     else
     55     {
     56         e = S.base[S.top - S.base - 1] ;
     57         S.top-- ;
     58         return (CORRECT) ;
     59     }
     60 }
     61 
     62 //判断栈空
     63 int StackEmpty (SqStack &S)
     64 {
     65     if (S.top <= S.base)
     66     {
     67         return (ERROR) ;
     68     }
     69     else
     70     {
     71         return (CORRECT) ;
     72     }
     73 }
     74 
     75 //括号匹配
     76 int MatchBracket (SqStack &S , char *BracketString)
     77 {
     78     int i ;
     79     char C , sC ;
     80 
     81     InitStack (S) ;    //清空堆栈
     82     for (i = 0 ; i < strlen (BracketString) ; i++)
     83     {
     84         C = BracketString[i] ;
     85 
     86         if ((C == '(') || (C == '[') || (C == '{'))
     87         {
     88             Push (S , C) ;
     89         }
     90         if ((C == ')') || (C == ']') || (C == '}'))
     91         {
     92             if (StackEmpty (S) == ERROR)
     93             {
     94                 return (-2) ;    //右多于左
     95             }
     96             Pop (S , sC) ;
     97             if ((C == ')') && (sC != '('))
     98             {
     99                 return (-1);    //左右次序不对
    100             }
    101             if ((C == ']') && (sC != '['))
    102             {
    103                 return (-1);    //左右次序不对
    104             }
    105             if ((C == '}') && (sC != '{'))
    106             {
    107                 return (-1);    //左右次序不对
    108             }                        
    109         }
    110     }
    111 
    112     if (StackEmpty (S) != ERROR)    //非空
    113     {
    114         return (-3) ;  //左多于右
    115     }
    116 
    117     else
    118     {
    119         return (0) ;    //栈空则正确
    120     }
    121 }
    122 
    123 //主函数
    124 int main (int argc , char* argv[])
    125 {
    126     int i , SampleNum ;
    127     char BracketString[MAXSTACKSIZE] ;
    128 
    129     cin >> SampleNum ;
    130     for (i = 0 ; i < SampleNum ; i ++)
    131     {
    132         cin >> BracketString ;
    133         cout << MatchBracket (MBStack , BracketString) << endl ;
    134     }
    135     return 0 ;
    136 }
  • 相关阅读:
    jquery获得option的值和对option进行操作
    laravel 在添加操作自动完成对时间保存修改
    laravel使用ajax
    mysql操作查询结果case when then else end用法举例
    Laravel框架数据库CURD操作、连贯操作总结
    laravel5.1关于lists函数的bug
    详解AngularJS中的filter过滤器用法
    javascript中的时间处理
    angularJs--$on、$emit和$broadcast的使用
    angularJs--<ui-select>
  • 原文地址:https://www.cnblogs.com/maoguy/p/6002523.html
Copyright © 2011-2022 走看看