码迷,mamicode.com
首页 > 其他好文 > 详细

栈的实验的括号匹配问题

时间:2020-09-18 01:28:01      阅读:26      评论:0      收藏:0      [点我收藏+]

标签:堆栈   括号   define   种类   typedef   char   else   turn   算术   

实验内容

算术表达式中右括号和左括号匹配的次序正好符合后到括号要最先被匹配的“后进先出”堆栈操作特点,因此可以借用一个堆栈来进行判断。

具体方法:

⑴ 顺序扫描算术表达式(表现为一个字符串);

⑵ 当遇到三种类型的左括号时,让该括号进栈;

⑶ 当遇到某一种类型的右括号时,比较当前栈顶括号是否与之匹配,

⑷ 若匹配则退栈,转(1)继续进行判断;

⑸ 若不匹配,则左右括号配对次序不正确,结束。

⑹ 若字符串当前为某一类型的右括号而堆栈为空,则右括号多于左括号,结束。

⑺ 若字符串扫描结束而堆栈非空,则左括号多于右括号,结束。

⑻ 若字符串扫描结束而堆栈为空,则左右括号匹配正确,结束。

#include <stdio.h>
#include <stdlib.h>


#define bool int
#define true 1
#define false 0

typedef struct stack {
    char* top;
    char* base;
    int MaxStack;

}sqstack;


int initstack(sqstack* S) {
    S->base = (char*)malloc(sizeof(int) * 100);
    if (S->base) {
        S->top = S->base;
    }
    return 0;
}



int pushstack(sqstack* S, char a) {
    *(S->top++) = a;
    return 0;
}

int popstack(sqstack* S) {
    int e = *(--S->top);
    return e;
}

bool empty(sqstack* S) {
    if (S->base == S->top)
    {
        return false;

    }
    return true;
}




int main() {
    sqstack S;
    int flag = 1;
    int i = 0;
    initstack(&S);
    char c[100];
    fgets(c, 100, stdin);
    if (c[i] == ( || c[i] == [ || c[i] == {)
    {
        pushstack(&S, c[i]);

    }
    else if (c[i] == ) || c[i] == } || c[i] == ])
    {

        flag = 0;
        printf("%d", flag);
        return flag;

    }
    i++;
    while (c[i] != \0)
    {
        if (c[i] == ( || c[i] == [ || c[i] == {)
        {
            pushstack(&S, c[i]);

        }
        else if (c[i] == ) || c[i] == } || c[i] == ])
        {
            if (empty(&S) == true) {
                char c1 = popstack(&S);
                if (!((c1 == ( && c[i] == )) || (c1 == { && c[i] == }) || (c1 == [ && c[i] == ])))
                {
                    flag = 0;
                    printf("%d", flag);
                    return flag;
                }
            }
            else
            {
                flag = 0;
                printf("%d", flag);
                return flag;
            }
        }

        i++;
    }
    printf("%d", flag);
    return flag;
}

 

好了,我们下回见,peace

栈的实验的括号匹配问题

标签:堆栈   括号   define   种类   typedef   char   else   turn   算术   

原文地址:https://www.cnblogs.com/gitpy123/p/13669498.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有 京ICP备13008772号-2
迷上了代码!