栈应用于括号匹配

栈是一种先进后出的结构,它在程序设计中有很多的应用,今天咱们介绍一下栈应用于括号匹配的问题


有一行括号序列输入数据是一个字符串S(S的长度小于100,且S不是空串),数据保证S中只含有”[“,”]”,”(“,”)”四种字符
如果字符串中所含的括号是配对的,则输出YES!,如果不配对则输出NO!


分析:
首先咱们先将输入的字符串输入到一个字符数组中,然后依次入栈,若下一次输入的括号刚好能和栈顶的括号匹配,则将栈顶的元素出栈,若本次输入的括号和栈顶元素不匹配则将本次元素入栈。
最后检查栈是否为空,如果栈是空的则说明括号匹配,如果非空则括号不匹配。

#include<iostream>
using namespace std;
#include<assert.h>
#define SIZE 100
typedef struct stack               //定义一个栈
{
    int size;                      //栈的容量
    char* arr;                     //存储数据的容器
    int top;                       //栈顶
}stack;
void init(stack* p)                //栈的初始化
{
    p->size=SIZE;
    assert((p->arr=(char*)malloc(SIZE))!=NULL);  //为容器分配大小
    p->top=0;
}
void push(stack* p,char c)
{
    assert(p->top!=p->size);       //此处使用了断言(assert的头文件为assert.h)
    p->arr[p->top++]=c;
}
void pop(stack* p)
{
    assert(p->top!=0);
    p->top--;
}
void input(stack* p)
{
    char arr[SIZE];
    cin>>arr;                     //输入待检测的括号串
    int i=0;
    p->arr[p->top++]=arr[i++];
    while(arr[i]!='\0')
    {
        if((arr[i]==')'&&p->arr[p->top-1]=='(')||(arr[i]==']'&&p->arr[p->top-1]=='['))
        {
            pop(p);              //若待入栈的和栈顶元素匹配,放弃入栈,并将栈顶元素出栈
        }
        else
            push(p,arr[i]);      //若不匹配,则正常入栈
        i++;
    }   
}
void check(stack* p)                 //检测栈是否为空,并输出结果
{
    if(p->top==0)
        cout<<"YES!"<<endl;
    else
        cout<<"NO!"<<endl;
}
int main()
{
    stack p;            //创建一个栈
    init(&p);           //将栈初始化
    input(&p);          //前面分析部分的代码实现
    check(&p);         //判断栈是否为空
}

放截图给大家看看吧
结果

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值