zuimman 2019-05-08 21:39 采纳率: 0%
浏览 448
已采纳

利用栈进行进制转换,为什么无法运行

#include
#include
#define stacksize 100
#define stackincrease 10
typedef int elemtype;
typedef struct Stack{
elemtype bottom;
elemtype *top;
int stack_size;
}stack; //定义栈的数据结构
void initstack(stack *s);
void push(stack *s,elemtype e);
void pop(stack *s,elemtype *e);
int stacklength(stack *s);
void initstack(stack *s){
s->bottom=(elemtype *)malloc(sizeof(elemtype)*stacksize);
if(!s->bottom) exit(0);
s->top=s->bottom;
s->stack_size=stacksize;
} //初始化栈
void push(stack *s,elemtype e){
if(s->top - s->bottom>=s->stack_size){
s->bottom=(elemtype *)realloc(s->bottom,(stacksize+stackincrease)*sizeof(elemtype));
if(!s->bottom) exit(0);
s->top=s->bottom+s->stack_size;
s->stack_size+=stackincrease;
}
*(s->top)=e;
s->top++;
}//进栈操作
void pop(stack *s,elemtype *e){
if(s->top==s->bottom)
exit(0);
s->top--;
*e=
(s->top);
} //出栈操作
int main(void){
int n,k,d;
int j=0,i=0;
int *e;
stack *s;
initstack(s);
printf("请输入一个十进制的数:");
scanf("%d",&n);
printf("请输入一个d进制的数",);

scanf("%d",&d);
while(n>0){
k=n%d;
push(s,k);
n=n/d;
j++; //d进制的位数
}
while(i<j){
pop(s,e);
printf("%d",*e);
i++;
}
return 0;
}


  • 写回答

1条回答 默认 最新

  • heymye 2019-05-09 00:40
    关注

    有两个编译错误,另外有两个指针使用问题。
    帮你改了下,可以运行了,但是你的代码的逻辑不对,结果是错的,自己检查下吧。

    #include "stdio.h"
    #include "stdlib.h"
    #define stacksize 100
    #define stackincrease 10
    typedef int elemtype;
    typedef struct Stack{
    elemtype bottom;
    elemtype *top;
    int stack_size;
    }stack; //定义栈的数据结构
    void initstack(stack *s);
    void push(stack *s,elemtype e);
    void pop(stack *s,elemtype *e);
    int stacklength(stack *s);
    void initstack(stack *s){
    s->bottom=(elemtype *)malloc(sizeof(elemtype)*stacksize);
    if(!s->bottom) exit(0);
    s->top=s->bottom;
    s->stack_size=stacksize;
    } //初始化栈
    void push(stack *s,elemtype e){
    if(s->top - s->bottom>=s->stack_size){
    s->bottom=(elemtype *)realloc(s->bottom,(stacksize+stackincrease)*sizeof(elemtype));
    if(!s->bottom) exit(0);
    s->top=s->bottom+s->stack_size;
    s->stack_size+=stackincrease;
    }
    *(s->top)=e;
    s->top++;
    }//进栈操作
    void pop(stack *s,elemtype *e){
    if(s->top==s->bottom)
    exit(0);
    s->top--;
    *e=(s->top);
    } //出栈操作
    int main(void){
    int n,k,d;
    int j=0,i=0;
    int e;
    stack st;
    stack *s=&st;
    initstack(s);
    printf("请输入一个十进制的数:");
    scanf("%d",&n);
    printf("请输入一个d进制的数");
    
    scanf("%d",&d);
    while(n>0){
    k=n%d;
    push(s,k);
    n=n/d;
    j++; //d进制的位数
    }
    while(i<j){
    pop(s,&e);
    printf("%d",e);
    i++;
    }
    return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 求螺旋焊缝的图像处理
  • ¥15 blast算法(相关搜索:数据库)
  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?
  • ¥15 网络通信安全解决方案
  • ¥50 yalmip+Gurobi
  • ¥20 win10修改放大文本以及缩放与布局后蓝屏无法正常进入桌面
  • ¥15 itunes恢复数据最后一步发生错误
  • ¥15 关于#windows#的问题:2024年5月15日的win11更新后资源管理器没有地址栏了顶部的地址栏和文件搜索都消失了
  • ¥100 H5网页如何调用微信扫一扫功能?
  • ¥15 讲解电路图,付费求解