瞬秒爆加速
发表于 2015-1-27 20:16:05
原来python的逆波兰的思路在这个地方
此地无银
发表于 2015-1-28 16:34:42
#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");
}
}
此地无银
发表于 2015-1-28 16:51:29
楼上我写的代码是错的。修改了下调试成功了。
基本跟小甲鱼老师一样,不过在主函数里,写法稍有不同。下面是主函数源代码:
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入账。最后判定栈里无字符,则全部匹配成功。
wuyixin
发表于 2015-2-1 10:41:01
强烈支持楼主ing……
bluegyfrys
发表于 2015-2-15 14:03:17
强烈支持楼主ing……
gk-jsj
发表于 2015-3-2 21:49:50
强烈支持楼主ing……
星星当空照
发表于 2015-3-8 15:45:27
VIP都要回复啊
天外飞mao
发表于 2015-3-13 15:18:47
比较一下啦!
weiqi7777
发表于 2015-3-14 13:49:18
#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");
}
wmh.
发表于 2015-3-25 09:42:26
强烈支持楼主ing……
stopit
发表于 2015-3-27 09:57:46
1111111111
喵小乐cherry
发表于 2015-3-31 19:26:38
我能说小甲鱼帮了我一个大忙吗?{:7_114:}
喵小乐cherry
发表于 2015-3-31 21:42:59
{:1_1:}
ryoko
发表于 2015-4-11 12:22:51
强烈支持楼主ing……
Alphacoder
发表于 2015-4-11 23:48:25
丢个5鱼币顶一下
陈轸
发表于 2015-4-14 23:03:32
强烈支持楼主ing……
馨馨予
发表于 2015-4-22 16:56:56
好好学习了 强烈支持楼主ing……
无影飞飞雪
发表于 2015-5-6 13:42:11
感谢小甲鱼强烈支持楼主ing……
FTD_Chen
发表于 2015-5-10 19:23:44
真是难得给力的帖子啊。
yuelintao
发表于 2015-5-14 10:56:15
感兴趣,看看。。。。
页:
1
2
3
4
5
[6]
7
8
9
10
11
12
13
14
15