数据结构--括号匹配(C++栈)

#include<iostream>
using namespace std;
#include<stdlib.h>
typedef struct//定义栈的存储结构

{
      int *base;

      int *top;

      int size;

}sqstack;
sqstack initstack()//对栈进行初始化
{
      sqstack s;

      s.base=(int *)malloc(100*sizeof(int));//对栈开辟动态空间

      s.top=s.base;

      return s;
}

sqstack push(sqstack s,int e)//入栈工作
{
      *(s.top)=e;

      s.top++;

      return s;

}

int gettop(sqstack s)//出栈工作
{
      if(s.base==s.top)

      {
            return 0;
      }

      return *(s.top-1);
}

sqstack pop(sqstack s)

{
      s.top--;

      return s;

}
int main()

{
      sqstack s;//定义链表S

      char c=' ';

      s=initstack();

      cout<<"请输入括号,以#结束"<<endl;

      while(c!='#')

      {
            cin>>c;

            switch (c)//用1.2.3.来分别代替“(”,“[”,“{”入栈;

            {
                  case '(':s=push(s,1);break;

                  case '[':s=push(s,2);break;

                  case '{':s=push(s,3);break;

                  case ')':

                       {
                             if(gettop(s)==0)

                             {
                                   cout<<"多了*)*"<<endl;

                                   return 0;

                             }

                             else if(gettop(s)==1)

                             {
                                   s=pop(s);

                             }

                             else

                             {
                                   cout<<"括号不匹配!"<<endl;

                                   return 0;
                         }
                       };break;

                  case ']':

                       {
                             if(gettop(s)==0)

                             {
                                   cout<<"多了*]*"<<endl;

                                   return 0;

                             }

                             else if(gettop(s)==2)

                             {
                                   s=pop(s);

                             }

                             else

                             {
                                   cout<<"括号不匹配!"<<endl;

                                   return 0;
                         }
                       };break;

                  case '}':

                       {
                             if(gettop(s)==0)

                             {
                                   cout<<"多了*}*"<<endl;
                                   return 0;
                             }

                             else if(gettop(s)==3)

                             {
                                   s=pop(s);

                             }
                             else

                             {
                                   cout<<"括号不匹配!"<<endl;

                                   return 0;

                             }
                       };break;

                  default:break;

            }
      }
      if(s.top==s.base)

      {
            cout<<"括号匹配"<<endl;

      }
      else

      {
            cout<<"多了左括号"<<endl;
      }

      return 0;
 }

本实验代码采取的思想是使用1,2,3分别代替(,[,{入栈以简化检索过程。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值