首页 新闻 会员 周边 捐助

关于数据结构程序求指正!

0
悬赏园豆:60 [待解决问题]

关于数据结构十进制转换为十六进制的源程序,编译时没报错,运行时也没报错,但是无法运行,只是弹出来一个.exe停止运行,通过调试,个人觉得是InitStack函数出错了,求大神帮忙改正。

 

源程序:

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

#define STACK_INIT_SIZE 100 //存储空间初始分配量
#define STACKINCREMENT 10 //存储空间分配增量

typedef int SElemType;
typedef struct Sqstack{
SElemType *base; //在栈构造之前和销毁之后,base的值为Null
SElemType *top; //栈顶指针
int stacksize; //当前已分配的存储空间,以元素为单位
}SqStack;


int InitStack(SqStack *S){
//构造一个空栈S
printf("Hello!");
(*S).base=(SElemType *)(STACK_INIT_SIZE*sizeof(SElemType));
if(!(*S).base)
exit(0);
(*S).top=(*S).base;
(*S).stacksize=STACK_INIT_SIZE;
return 1;
}

int StackEmpty(SqStack *S){
//判断栈S是否为空栈
if(S->top==S->base )return 1;
else return 0;
}
int Pop(SqStack *S,SElemType *e){
//若栈不空,则删除S的栈顶元素,用e返回其值,并返回1,否则返回0
if(S->top==S->base) return 0;
*e=*--(S->top);
return 1;
}

int Push(SqStack *S,SElemType e){
//插入元素e为新的栈顶元素
if(((S->top)-(S->base))>=(S->stacksize)){
//栈满,追加存储空间
S->base=(SElemType*)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!S->base) exit(0);//存储失败
S->top=S->base+S->stacksize;
S->stacksize+=STACKINCREMENT;
}
*(S->top)++ =e;
return 1;
}
main()
{
//对于输入的任意一个非负十进制整数,打印输出与其等值十六进制数
int N,*e;
SqStack *S;
InitStack(S);
printf("请输入要转换的十进制数N:\n");
scanf("%d",&N);
while(N){
Push(S,N%16);
N=N/16;
}
printf("转换后的十六进制数为:\n");
while(!StackEmpty(S)){
Pop(S,e);
printf("%d",*e);
}
printf("\n");
return 1;
}

 

 

 

 

晚枫晓棠的主页 晚枫晓棠 | 初学一级 | 园豆:142
提问于:2016-10-15 23:32
< >
分享
所有回答(2)
0

有一个明显的错误,后面没有仔细看。

int InitStack(SqStack *S){

应为

int InitStack(SqStack **S){

Anthony-黄亮 | 园豆:219 (菜鸟二级) | 2016-10-27 14:44
0

printf "%X" 十进制 ,直接能转十六进制,O(∩_∩)O 

创心coder | 园豆:736 (小虾三级) | 2017-01-13 13:01
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册