69,371
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
#include<stdlib.h>
#define A 30
#define B 10
#define ERROR 0
typedef struct sqstack
{
int *base;
int *top;
int stacksize;
}sqstack;
sqstack s;
int initstack(sqstack &s);
int gettop();
int pop();
int push();
int check(sqstack s);
int initstack(sqstack &s)
{
s.base = (int*)malloc(A * sizeof(char));
if(!s.base) exit(-2);
s.top = s.base;
s.stacksize = A;
return 1;
}
int gettop(sqstack s, char e)
{
if(s.top == s.base) exit(-2);
e = *(s.top - 1);
return e;
}
int pop(sqstack s, char e)
{
if(s.top == s.base) return ERROR;
e = *--s.top;//s.top--;e=*s.top;
return 1;
}
int push(sqstack s,char e)
{
if(s.top - s.base >= s.stacksize)
{
s.base = (int*)realloc(s.base, (s.stacksize + B) * sizeof(char));
if(!s.base) exit(-2);
s.top = s.base + s.stacksize;
s.stacksize += B;
}
*s.top++ = e;//*s.top=e; s.top++;
return 1;
}
int check(sqstack s)
{
char a[8];int i;char c;char e=0;
printf("请输入括号\n");
for(i=0 ; i<8 ; i++) scanf("%c",&a[i]);
printf("输出括号\n");
for(i=0 ; i<8 ; i++) printf("%c",a[i]);
printf("\n");
initstack(s);
while(1)
{
for(i=0 ; i<8 ; i++)
{
c=a[i];
switch(c)
{
case '[':
case '(':
case '{':
case '<':
push(s,c);
printf("成功!\n");
break;
case ']':
if(gettop(s,e) == '[')
{
printf("进行ing!");
pop(s,e);
printf("%c",e);
}
break;
case ')':
if(gettop(s,e) != '(')
pop(s,e);
break;
case '}':
if(gettop(s,e) != '{')
pop(s,e);
break;
case '>':
if(gettop(s,e) != '<')
pop(s,e);
break;
default: break;
}
}
}
return 1;
}
int main()
{
sqstack s;
initstack(s);
check(s);
return 0;
}
initstack();
check();
main中调用没有传入参数,前面函数声明也有问题