关于数据结构十进制转换为十六进制的源程序,编译时没报错,运行时也没报错,但是无法运行,只是弹出来一个.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;
}
有一个明显的错误,后面没有仔细看。
int InitStack(SqStack *S){
应为
int InitStack(SqStack **S){
printf "%X" 十进制 ,直接能转十六进制,O(∩_∩)O