首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C语言关于栈的有关问题·新人求教

2013-07-01 
C语言关于栈的问题·新人求教·本帖最后由 u011034778 于 2013-06-11 18:24:54 编辑刚学没多久·这是一次作业

C语言关于栈的问题·新人求教·
本帖最后由 u011034778 于 2013-06-11 18:24:54 编辑 刚学没多久·这是一次作业。是要用栈弄一个检查字符串或者表达式括号是否配对的。这个程序能运行,但是不知道为什么调试的时候一旦出现两个)就会出现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");
}

[解决办法]

引用:

if (top && top->data=='(') pop(top); //这里是==

改了这里就不会崩溃了。。不过你整个算法都是错的。。


不过你整个算法都是错的 这个更严重
[解决办法]
引用:
Quote: 引用:


if (top && top->data=='(') pop(top); //这里是==

改了这里就不会崩溃了。。不过你整个算法都是错的。。


不过你整个算法都是错的 这个更严重



那还是最好按照数据结构书上的伪代码实现一边把

热点排行