博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用堆栈实现括号的匹配
阅读量:6154 次
发布时间:2019-06-21

本文共 2250 字,大约阅读时间需要 7 分钟。

hot3.png

//使用堆栈实现括号的匹配

#include <string.h>

 #include<stdio.h>

typedef char DataType;

#define  MaxSize 10

typedef struct

{

 DataType stack [MaxSize];

 int top;

}sstack;

//堆栈的初始化

void StackInit(sstack *s)

{

    s->top=0;      //定义指针变量,他指向的变量的成员变量为0;

}               

//插入数据

int StackInsert(sstack*s,DataType x)

{

    if(s->top>MaxSize)

    {

      printf("堆栈已满不能插如");

      return 0;

    }

    else

    {

      s->stack[s->top]=x;

      s->top++;

        return 1;

    }

}

//判断堆栈是否为空

int StackNe(sstack s)

{

    if(s.top<=0)

    {

      return 0;

    }

    else

    {

       return 1;

    }

}

//出栈

int StackDelete(sstack *s,DataType *x)

{

    if(s->top<=0)

    {

      printf("堆栈为空");

      return 0;

    }

    else

    {    s->top--;

        *x=s->stack[s->top];

        return 1;

    }

}

//取出栈顶元素

 int StackGet(sstack s, DataType *x)

 {

     if(s.top<0)

     {

         printf("堆栈为空");

          return 0;

     }

     else

     {        

         *x=s.stack[s.top-1];

         return 1;

     }                                        

 }

 

 //函数实现括号的匹配

 void  pipei(char ele[],int n)

  {      int i;

      sstack  mystack;

      char c;

      //初始化栈

      StackInit(&mystack);

       for(i=0;i<n;i++)

      {

          //如果是左括号则入栈

           if((ele[i]=='{')||(ele[i]=='[')||(ele[i]=='('))  

         {

                StackInsert(&mystack,ele[i]) ;

         }

         //如果是有括号则进行匹配,如果不是空的而且是在栈顶则出栈,说明他们是匹配的。

         else if((ele[i])==')'&&StackNe(mystack)&&StackGet(mystack,&c)&&c=='(')

         {

           //如果是匹配的则出栈

             StackDelete(&mystack,&c);

             printf("()\t");

         }

         else if((ele[i])==')'&&StackNe(mystack)&&StackGet(mystack,&c)&&c!='(')

         {

            printf("括号匹配不正确\n");

              return ;

         }

         //[][][][][][]]]]]]]][[[[[[[[[[[[[[]]]]]]]]]]]]][[[[[[[[[[]]]]]

       

         else if((ele[i])==']'&&StackNe(mystack)&&StackGet(mystack,&c)&&c=='[')

         {

           //如果是匹配的则出栈

             StackDelete(&mystack,&c);

             //printf("括号是匹配的");

             printf("[] \t");

         }

         else if((ele[i])==']'&&StackNe(mystack)&&StackGet(mystack,&c)&&c!='[')

         {

            printf("括号匹配不正确 \n");

              return ;

         }

         //{

{
{
{
{
{
{
{
{
{
{
{}}}}}}}}}}}}}}}}}}}}{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{}}}}}}}}}}}}

         else if((ele[i])=='}'&&StackNe(mystack)&&StackGet(mystack,&c)&&c=='{')

         {

           //如果是匹配的则出栈

             StackDelete(&mystack,&c);

             //printf("括号匹配真确 \n");

             printf("{} \t");

         }

         else if((ele[i])=='}'&&StackNe(mystack)&&StackGet(mystack,&c)&&c!='{')

         {

            printf("括号匹配不正确 \n");

              return ;

         }

         else if((ele[i]==')')||(ele[i]==']')||(ele[i]=='}')&&!StackNe(mystack))

         {

            printf("右括号多于左括号! \n");

         }

      }

      if(StackNe(mystack))

      {

         printf("左括号多于右括号! \n");

      }

       

      else

       {

             printf("括号匹配正确!\n");

       }

  }

 int   main ()

 {        

     char a[]={'{','[','(',')',']','}'} ;

     char b[]={'{','{','[','(',')',']','}'};

     pipei(b,10);

  return 0;

 }

转载于:https://my.oschina.net/u/930370/blog/145495

你可能感兴趣的文章
数据运营的三种角色
查看>>
【译】CSS 自定义属性的策略指南
查看>>
从零实现一个自定义 HTML5 播放器
查看>>
WeGeek Talk | 美团外卖
查看>>
使用 Karma、Mocha、Chai 搭建支持 ES6 的测试环境
查看>>
linux/unix编程手册-16_20
查看>>
[译] Android 的多摄像头支持
查看>>
【个人思考系列】美团点评 Java 后端新人第一年总结&面试经验 | 掘金技术征文...
查看>>
从零开始netty学习笔记之BIO
查看>>
快来围观一下JavaScript的Proxy
查看>>
基于可靠消息方案的分布式事务:Lottor介绍
查看>>
分布式存储的六大优点
查看>>
闭包总结(2018.03.19)
查看>>
Exploiting “BadIRET” vulnerability (CVE-2014-9322, Linux kernel privilege escalation)
查看>>
磁盘分区原理:从MBR到GPT
查看>>
再谈 Go 语言在前端的应用前景
查看>>
机器学习能诊断病情,还能预测患者出院后的情况?
查看>>
使用云效在阿里云上进行一站式开发运维
查看>>
《JavaScript设计模式与开发实践》原则篇(3)—— 开放-封闭原则
查看>>
浅析 React Fiber
查看>>