C语言关于栈的问题·新人求教·
E存新人 2013-06-11 06:23:27 刚学没多久·这是一次作业。是要用栈弄一个检查字符串或者表达式括号是否配对的。这个程序能运行,但是不知道为什么调试的时候一旦出现两个)就会出现DEBUG·是出栈的问题么?弄了一个下午都不能解决·求高人帮忙~谢谢!哦,上面有一个转换十进制那些是错误的,先放着,暂时不用管它。
#include <stdio.h>
#include <stdlib.h>
#define N 100
typedef struct stack
{
char data;
struct stack *next;
}stack,*stacktop;
stacktop top;
void stack1 (stacktop top)
{
top=NULL;
}//栈的初始化
stacktop push (stacktop top,char x)
{
stacktop t=(stacktop)malloc(sizeof(stack));
t->data=x;
t->next=top;
top=t;
return top;
}//入栈
stacktop pop (stacktop top)
{
stacktop x;
if (top!=NULL)
{
x=top;
top=top->next;
free(x);
printf ("已出栈");
return top;
}else printf("已空栈,无法退栈\n"); return 0;
}//出栈
int change (int a,int b)
{
if (b!=2 && b!=8 && b!=16) return 0;
int t,q;
t=a/b;
q=t*b+a%b;
return q;
}//十进制数转换
int checkout (char t[N])
{
int i,a=0,b=0;
for (i=0;t[i]!='\0';i++)
{
if (t[i]=='(')
{
top=push (top,t[N]);
b++;
}
}
if (top==NULL)
{
printf("FLASE or NO brackets\n");
}
for (i=0;t[i]!='\0';i++)
{
if (t[i]==')')
{
a++;
if (top->data='(') pop (top);
else return 0;
}
}
if (a==b&&a!=0) return 1;
else return 0;
}//检查括号是否匹配
void main()
{
int c,d;
char t[N]={'\0'};
stack1 (top);
printf ("输入一位十进制整数:\n");
scanf ("%d",&c);
printf ("转化为__进制(二,八,十六)\n");
scanf ("%d",&d);
a:
if (change (N,d)==0)
{
printf ("仅可转化为二、八、十六进制,重新输入__进制\n");
scanf ("%d",&d);
goto a;
}
printf ("%d\n",change (N,d));
printf ("输入一串字符串或表达式,回车结束\n");
getchar();
gets(t);
if (checkout(t)==0) printf ("FLASE\n");
else printf("Success\n");
}