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");
}
...全文
93 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
E存新人 2013-06-12
  • 打赏
  • 举报
回复
引用 1 楼 hugett 的回复:

if (top && top->data=='(') pop(top); //这里是==
改了这里就不会崩溃了。。不过你整个算法都是错的。。
蛋疼··我结贴结错了··没看清楚··sorry```
E存新人 2013-06-12
  • 打赏
  • 举报
回复
引用 2 楼 AnYidan 的回复:
[quote=引用 1 楼 hugett 的回复:]

if (top && top->data=='(') pop(top); //这里是==
改了这里就不会崩溃了。。不过你整个算法都是错的。。
不过你整个算法都是错的 这个更严重[/quote]好吧··还得继续用心去学··
十八道胡同 2013-06-11
  • 打赏
  • 举报
回复
引用 2 楼 AnYidan 的回复:
[quote=引用 1 楼 hugett 的回复:]

if (top && top->data=='(') pop(top); //这里是==
改了这里就不会崩溃了。。不过你整个算法都是错的。。
不过你整个算法都是错的 这个更严重[/quote] 那还是最好按照数据结构书上的伪代码实现一边把
AnYidan 2013-06-11
  • 打赏
  • 举报
回复
引用 1 楼 hugett 的回复:

if (top && top->data=='(') pop(top); //这里是==
改了这里就不会崩溃了。。不过你整个算法都是错的。。
不过你整个算法都是错的 这个更严重
hugett 2013-06-11
  • 打赏
  • 举报
回复

if (top && top->data=='(') pop(top); //这里是==
改了这里就不会崩溃了。。不过你整个算法都是错的。。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧