注册 登录
编程论坛 数据结构与算法

利用进栈,出栈操作实现十进制数转换为K进制数

小萍子 发布于 2013-11-11 12:21, 745 次点击
求各位大神看看这程序哪错了,执行结果很离谱,让人很无语
利用进栈,出栈操作实现十进制数转换为K进制数
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef struct
{
    char *base;
    char *top;
    int stacksize;
}Sqstack;
int StackInit(Sqstack *s)
{
    s->base=(char *)malloc(STACK_INIT_SIZE *sizeof(int));
    if(!s->base)
        return 0;
    s->top=s->base;
    s->stacksize=STACK_INIT_SIZE;
    return 1;
}
int Push(Sqstack *s,char e)
{
    if(s->top-s->base>=s->stacksize)
    {
        s->base=(char *)realloc(s->base,(s->stacksize+STACKINCREMENT)*sizeof(int));
        if(!s->base)
            return 0;
    s->top=s->base+s->stacksize;
    s->stacksize+=STACKINCREMENT;
    }
    *s->top++=e;
    return e;
}
int Pop(Sqstack *s,char e)
{
    if(s->top==s->base)
        return 0;
    e=--*s->top;
    return e;
}
int stackempty(Sqstack *s)
{
    if(s->top==s->base)
       return 1;
    else
        return 0;
}
int tf(Sqstack *s)
{
    int n,i=0,k,m;
    char a,e;
    printf("输入要转化的十进制数:\n");
    scanf("%d",&n);
    printf("输入要转化为的进制:\n");
    scanf("%d",&k);
    printf("将十进制数%d转化为%d进制是:\n",n,k);
    while(n)
    {
        m=n%k;
        if(m<10)
            a=48+m;
        else
            a=65+m-10;
        Push(s,a);
        n=n/k;
    }
    while(!stackempty(s))
    {
        Pop(s,e);
        printf("%c",e);
    }
    printf("\n");
    return 0;
}
int main()
{
    Sqstack s;
    StackInit(&s);
    tf(&s);
    return 0;
}
4 回复
#2
yuccn2013-11-11 15:09
int Pop(Sqstack *s,char &e) // 这个用引用吧,你原来的你怎么能够带出去?
{
    if(s->top==s->base)
        return 0;
    // e=--*s->top;  // 因为你push的时候,就把top放在下一个没有使用的内存了,应该把top挪回一个单位在取。
    // 其实我很鄙视 e=--*s->top;这种风格
    s->top--;
    e = *s->top;

    return e;
}
#3
小萍子2013-11-13 10:31
回复 2楼 yuccn
哇!!!对了哎!太强了,太感谢了!
#4
子元2013-11-17 11:59
回复 2楼 yuccn
程序代码:
int Pop(Sqstack *s,char &e)
{
    if(s->top==s->base)
        return 0;
    e=--*s->top;
    return e;
}
加上&后为什么会出现下面这几个错误啊?
D:\as\ffg\a.c(34) : error C2143: syntax error : missing ')' before '&'
D:\as\ffg\a.c(34) : error C2143: syntax error : missing '{' before '&'
D:\as\ffg\a.c(34) : error C2059: syntax error : '&'
D:\as\ffg\a.c(34) : error C2059: syntax error : ')'
#5
暂不存在2013-12-05 00:28
想问下为什么代码中多处都出现到char呢,值的转换不是应该用int吗?因为我输出的字符乱码?
1