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 matlab数字图像处理频率域滤波
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 ubuntu系统下挂载磁盘上执行./提示权限不够
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行