原来python的逆波兰的思路在这个地方
#include <stdio.h>
#include <stdlib.h>
#define STACK_INIT_SIZE 20
#define STACKINCREAMENT 10
typedef char ElemType;
typedef struct
{
ElemType *base;
ElemType *top;
int stackSize;
}sqStack;
void initStack( sqStack *s )
{
s->base = (ElemType*)malloc(STACK_INIT_SIZE * sizeof(ElemType));
if( !s->base )
{
exit(0);
}
s->top = s->base;
s->stackSize = STACK_INIT_SIZE;
}
void Push( sqStack *s, ElemType *e )
{
if( s->top - s->base >= s->stackSize )
{
s->base = (ElemType*)realloc( s->base, ( s->stackSize + STACKINCREAMENT ) * sizeof(ElemType) );
if( !s->base )
{
exit(0);
}
}
*(s->top) = e;
s->top++;
}
void Pop( sqStack *s, ElemType *e )
{
if(s->top == s->base)
return;
*e = * --(s->top);
}
int StackLen(sqStack s)
{
return (s.top - s.base);
}
int main()
{
sqStack s;
char c;
int e;
initStack( &s );
printf("请输入需要验证的括号,以#结束:\n");
scanf("%c", &c);
while(c != '#')
{
if( c!='(' && c!=')' && c!='[' && c!=']' && c!='{' && c!='}' && c!='<' && c!='>')
{
printf("输入的字符不为括号!\n");
return -1;
}
if( c == s.base )
{
Push(&s, e);
break;
}
Pop( &s, c );
}
if( s.top == s.base )
{
printf("\n输入的括号匹配成功!\n");
}
else
{
printf("\n输入的括号不匹配!\n");
}
}
楼上我写的代码是错的。修改了下调试成功了。
基本跟小甲鱼老师一样,不过在主函数里,写法稍有不同。下面是主函数源代码:
int main()
{
sqStack s;
char c;
int e;
initStack( &s );
printf("请输入需要验证的括号,以#结束:\n");
scanf("%c", &c);
while(c != '#')
{
// 如果是括号,就压栈
if( c=='(' || c==')' || c=='[' || c==']' || c=='<' || c=='>' || c=='\'' || c=='\"' || c=='{' || c=='}' )
{
if( !StackLen(s) )
{
Push(&s, c);
}
else
{
if( match(s.top, c) )
{
Pop( &s, e);
}
else
{
Push( &s, c);
}
}
}
scanf("%c", &c); // 输入下一个字符
}
if( !StackLen(s) )
{
printf("\n输入的括号匹配成功!\n");
}
else
{
printf("\n输入的括号不匹配!\n");
}
}
具体来说,每次先判定s.top和c是否匹配,如果匹配,则栈底出栈;如果不匹配,则将c入账。最后判定栈里无字符,则全部匹配成功。
强烈支持楼主ing……
强烈支持楼主ing……
强烈支持楼主ing……
VIP都要回复啊
比较一下啦!
#include"iostream"
using namespace std;
typedef struct {
int top;
char a;
}stack;
void push(stack s, char a)
{
if (s.top == 99)
return;
else
s.a[++s.top] = a;
}
char pop(stack s)
{
if (s.top == -1)
return 0;
else
return s.a[--s.top];
}
int main()
{
stack s;
s.top = -1;
char k;
char n;
int flag = 1;
cin >> k;
while (k != '#')
{
cin >> k;
if (k == '(' || k == '{' || k == '[')
push(s, k);
if (k == ')')
{
n = pop(s);
if (n != '(')
flag = 0;
}
if (k == '}')
{
n = pop(s);
if (n != '{')
flag = 0;
}
if (k == ']')
{
n = pop(s);
if (n != '[')
flag = 0;
}
}
if (flag == 1)
printf("输入字符串的括号完全匹配\n");
else
printf("输入字符串的括号不完全匹配\n");
}
强烈支持楼主ing……
1111111111
我能说小甲鱼帮了我一个大忙吗?{:7_114:}
{:1_1:}
强烈支持楼主ing……
丢个5鱼币顶一下
强烈支持楼主ing……
好好学习了 强烈支持楼主ing……
感谢小甲鱼强烈支持楼主ing……
真是难得给力的帖子啊。
感兴趣,看看。。。。