回 帖 发 新 帖 刷新版面

主题:[讨论]判别圆括号是否配对

最近刚学那个算法 是关于进栈和出栈的  要求写出一个判别表达式中圆括号是否配对的算法
    我对那个不熟悉 请教高手

回复列表 (共3个回复)

沙发

#include<stdio.h>
#define MAX 30
typedef struct Stack
{
    char sym[MAX];
    int top;
};
void Initstack(Stack *s)
{
    s->top=-1;
}
void Pushstack(Stack *s,char ch)
{
    s->top++;
    s->sym[s->top]=ch;
}
void Popstack(Stack *s)
{
    printf("%c,",s->sym[s->top]);
    s->top--;
}
int Empty(Stack *s)
{
    if(s->top==-1)
    return 1;
    else
    return 0;
}


int main()
{
    struct Stack *s;
    s=malloc(sizeof(Stack));
    Initstack(s);
    int i;
    char ch;
    printf("Put in a char:");
    scanf("%c",ch);
    for(;ch!='#';)
    {
        if(ch=='(')
        Pushstack(s,ch);
        if(ch==')')
        Popstack(s);
        printf("Put in a char:");
        scanf("%c",ch);
    }
    if(Empty(s))
    printf("\nSuccess!\n");
    else
    printf("\nOMG!\n");


    return 0;
}

板凳

以上的是C语言版的
该程序的功能是:在一行上输入若干个字符,如果其中的括号配对,输出“Success”否则“OMG”
例如:1+4*3*(4+6*5)+(6+4)  输出 Success

3 楼


 我学的是C++版的呀 而却你那个代码比较复杂 我试着写了一个
   
    int yn(char a[], int n)
{ seqstack s;
  inistack(&s);
for (int j=0;j<n;j++)
if(a[j]=='(') push(&s,a[j]);
else if(a[j]==')') pop(&s);
if(empty(s)) return 1;
else return 0;}    
  当然这个我是有抄袭书本上的嫌疑 但是老师说要自己独立写一个 我没辙了  不知道哪位高手看了有什么想法

我来回复

您尚未登录,请登录后再回复。点此登录或注册