代码编译成功,但**无输出信息,求解答,万分感谢!
**
#include
#include
typedef char DataType;
#define STACKSIZE 5
typedef struct
{ DataType data[STACKSIZE];
int top;
}SeqStack;
//初始化为空栈
void InitStack(SeqStack *s)
{
s->top=-1 ; //置空栈
}
//判断栈s是否为空,为空返回1,否则返回0
int StackEmpty(SeqStack *s)
{
if (s->top==-1)
return 1;
else
return 0;
}
//将元素x压入栈s中,正常入栈返回1,否则返回0
int Push(SeqStack *s, DataType x)
{
if (s->top==STACKSIZE-1) //栈满,不能入栈
{
printf("栈已满!\n");
return 0; //入栈失败
}
else
{ s->top++; //栈顶位置加1
s->data[s->top]=x; //x入栈
return 1; //入栈成功
}
}
//将栈s的栈顶出栈,并通过指针变量x将顶栈元素返回,正常出栈返回1,否则返回0
int Pop(SeqStack *s, DataType *x)
{
if (s->top==-1)
{
printf("栈已空!\n");
return 0; //栈空,不能出栈
}
else
{
x=s->data[s->top]; //栈顶元素保存在x中
s->top--; //栈顶位置减1
return 1; //出栈成功
}
}
//读取栈顶元素,并通过参数x返回其值
int GetTop(SeqStack *s, DataType *x)
{
if (s->top==-1)
{
printf("栈已空!\n");
return 0; //栈空,读取失败
}
else
{
x=s->data[s->top]; //栈顶元素保存在x中,此时栈顶并不出栈
return 1; //读取成功
}
}
int Match(char *str)
{
char *x;
int i=0;
SeqStack *L;
InitStack(L);
while(str[i]!='\0')
{
if(str[i]=='('||str[i]=='['||str[i]=='{')
{
Push(L,str[i]);
}
else
{
if(str[i]==')'&&GetTop(L, x)=='(')
{
Pop(L,x);
}
else if(str[i]==']'&&GetTop(L, x)=='[')
{
Pop(L,x);
}
else if(str[i]=='}'&&GetTop(L, x)=='{')
{
Pop(L,x);
}
}
i++;
}
return StackEmpty(L);
}
int main()
{ int t;
char str[100];
gets(str);
t=Match(str);
printf("%d\n",t);
return 0;
}
仅供参考:
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#define STACK_INIT_SIZE 10
#define STACK_GROW_SIZE 5
#define ELEMTYPE char
#define OK 1
#define ERROR 0
typedef struct { /*建立一个栈的首结点*/
ELEMTYPE * base;
ELEMTYPE * top;
int stacksize;
} SpStack;
int InitStack(SpStack *s) { /*建立空的栈并返回首地址*/
s->base=((ELEMTYPE*)malloc(STACK_INIT_SIZE*sizeof(ELEMTYPE)));
if (!s->base) return ERROR;
s->top=s->base;
s->stacksize=STACK_INIT_SIZE;
return OK;
}
int StackEmpty(SpStack *s) { /*判断栈是否为空*/
if (s->top==s->base) return OK;
else return ERROR;
}
int Push(SpStack *s,ELEMTYPE e) { /*往栈顶插入元素即进栈*/
if (s->top-s->base>=s->stacksize) { /*判断是否栈满*/
s->base=((ELEMTYPE*)realloc(s->base,(s->stacksize+STACK_GROW_SIZE)*sizeof(ELEMTYPE)));
if (!s->base) return ERROR;
s->stacksize+=STACK_GROW_SIZE;
s->top=s->base+s->stacksize;
}
*s->top++=e;
return OK;
}
int Pop(SpStack *s,ELEMTYPE *e) { /*让栈顶元素依次输出即出栈*/
if (StackEmpty(s)) return ERROR;
*e=*(--s->top);
return OK;
}
int Comp(ELEMTYPE a,ELEMTYPE b) {
if ((a=='('&&b!=')')
||(a=='['&&b!=']')
||(a=='{'&&b!='}')) {
return ERROR;
} else return OK;
}
int Count(SpStack *s) {
ELEMTYPE e[STACK_INIT_SIZE*2];
ELEMTYPE e1;
int i;
InitStack(s);
fgets(e,STACK_INIT_SIZE*2,stdin);
if ('\n'==e[strlen(e)-1]) e[strlen(e)-1]=0;
printf("%s\n",e);
for (i=0;e[i]!='\0';i++) {
switch (e[i]) {
case '(':
case '[':
case '{':
Push(s,e[i]);
break;
case ')':
case ']':
case '}':
if (StackEmpty(s)) {
printf("%*s↖右括号多余\n",i+1,"");
return(ERROR);
} else Pop(s,&e1);
if (!Comp(e1,e[i])) {
printf("%*s↖左右匹配出错\n",i+1,"");
return(ERROR);
}
}
}
if (!StackEmpty(s)) {
printf("%*s↖左括号多余\n",i,"");
return(ERROR);
} else {
printf("匹配正确\n");
return(OK);
}
}
void main() {
SpStack s;
Count(&s);
free(s.base);
}