数据结构论坛

首页 » 分类 » 定义 » 带你认识数据结构栈的实际应用
TUhjnbcbe - 2023/7/18 20:18:00
医治白癜风的知名专家 http://m.39.net/news/a_5941620.html

在之前的文章中,作者以及介绍过了栈以及栈的相关操作。

在本章中,作者将于大家一起了解一下栈的实际应用——利用栈解决括号匹配问题。

什么是括号匹配问题呢?例如“(())”这样的括号它们就是匹配的,左括号与右括号刚好搭配起来,形成合法的式子,而例如“(()”或“(}”这样的括号就是不匹配的。

我们可以发现,如果想要使用代码实现这种算法,那么可以创建一个先进后出的线性表,在遇到左括号时将其放入线性表中,遇到又括号时将已经放入线性表中的左括号拿出来,看看两者是否匹配。然后循环遍历线性表中的全部元素即可。

而我们之前也已经了解过,栈就是一种先进后出的线性表,接下来我们就来看看如何使用代码来实现这一算法!

一,首先初始化一个顺序栈:

#includestdio.h

#includestdlib.h

#includemalloc.h

#defineMaxSize10

typedefstruct{

  chardata[MaxSize];

  inttop;

}SqStack;

voidInitStack(SqStacks){

  s.top=-1;

}

二,判断栈空操作:

boolStackEmpty(SqStacks){

  if(s.top==-1){

    returntrue;

    //TODO

  }else{

    returnfalse;

  }

}

三,入栈和出栈:

boolPush(SqStacks,charx){

  if(s.top==MaxSize-1){

    returnfalse;

    //TODO

  }

  s.top=s.top+1;

  s.data[s.top]=x;

  returntrue;

}

boolPop(SqStackS,charx){

  if(S.top==-1){

    returnfalse;

    //TODO

  }

  x=S.data[S.top];

  S.top=S.top-1;

  returntrue;

}

四,判断括号匹配:

boolbracketCheck(chars[],intlength){

  SqStackS;

  InitStack(S);

  for(inti=0;ilength;i++){

    if(s==(

s==[

s=={){

      Push(S,s);  //如果检查到左括号那么就入栈    

      //TODO

    }else{

      if(StackEmpty(S)){

        returnfalse;//如果检查到右括号,那么就检查栈是否空,空则代表不匹配

      }  //TODO

        chartope;

        Pop(S,tope);

      if(s==)tope!=(){

        returnfalse;

        //TODO

      }  

      if(s==]tope!=[){

              returnfalse;

              //TODO

            }

      if(s==}tope!={){

              returnfalse;

              //TODO

            }      

    }

    //TODO

  }

  returnStackEmpty(S);//最后返回的值是true则代表匹配,否则不匹配

  }

本篇文章到此就结束了,欢迎大家

1