主题:[讨论]判别圆括号是否配对
神King
[专家分:0] 发布于 2009-04-11 13:19:00
最近刚学那个算法 是关于进栈和出栈的 要求写出一个判别表达式中圆括号是否配对的算法
我对那个不熟悉 请教高手
回复列表 (共3个回复)
沙发
冰河砺剑 [专家分:20] 发布于 2009-04-11 21:26:00
#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;
}
板凳
冰河砺剑 [专家分:20] 发布于 2009-04-11 21:29:00
以上的是C语言版的
该程序的功能是:在一行上输入若干个字符,如果其中的括号配对,输出“Success”否则“OMG”
例如:1+4*3*(4+6*5)+(6+4) 输出 Success
3 楼
神King [专家分:0] 发布于 2009-04-12 22:24:00
我学的是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;}
当然这个我是有抄袭书本上的嫌疑 但是老师说要自己独立写一个 我没辙了 不知道哪位高手看了有什么想法
我来回复