~何羡乎 2023-03-25 20:35 采纳率: 71.4%
浏览 35
已结题

用栈实现十进制转二进制

#无法打印出栈数据
#

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>//realloc 
#include<string.h>

#define Status int
#define OK  1
#define ERROR  0 
#define OVERFLOW -2

#define STACK_INIT_SIZE 100
#define STACKINCREMENT   //stackincrement

//自定义数据类型
typedef int SElemType;
 
typedef struct
{
    SElemType *base;
    SElemType  *top;
    int stacksize;
}SqStack;


//构造一个空栈
Status InitStack(SqStack *S)
{
    S->base = (SElemType * )malloc(STACK_INIT_SIZE * sizeof(SElemType));
    if( !S->base )exit(OVERFLOW);
    S->top=S->base;
    S->stacksize=STACK_INIT_SIZE;
    return OK;

}


//入栈
Status Push(SqStack *S , SElemType e)
{
    if((S->top - S->base) >= S->stacksize)
    {
        return ERROR;
    }
    /*{
        S->base = (SElemType * )realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof (SElemType));
        if (!S->base)exit(OVERFLOW);
    S->top = S->base + S->stacksize;
    S->stacksize+=STACKINCREMENT;
    }*/
    *S->top++=e;
    return OK;
} 

//出栈
Status Pop(SqStack* S, SElemType* e)
{
    if(S->top==S->base)
    {
        return ERROR;
    }
    e = * --S->top;
    return OK;
 } 
 
//判断是否为空栈 
Status StackEmpty(SqStack S)
{
    if(S.top==S.base)
        return ERROR;
    else
        return OK;
}


//功能:将十进制数转换为八进制数
void conversion()
{
    SqStack S;
    SElemType N;
    InitStack(&S);
    printf("请输入非负的数:\n"); 
    scanf("%d",&N); 
    while(N)
    {
        
        Push(&S,N%8);
        N=N/8;
     } 
    SElemType e;
    while (StackEmpty(S))
    {
        //printf("text");
        Pop(&S,e);
        printf("%d",e);
    }
 } 
 
 
int main()
{
    printf("欢迎使用进制数转换程序!!\n") ;
    conversion();
    system("pause");
}

61 4 [Warning] assignment makes pointer from integer without a cast
In function 'conversion':
93 10 [Warning] passing argument 2 of 'Pop' makes pointer from integer without a cast
55 8 [Note] expected 'SElemType *' but argument is of type 'SElemType'

  • 写回答

2条回答 默认 最新

  • IT_service_mesh 2023-03-25 20:37
    关注

    参考GPT和自己的思路:关于第一个问题,程序中没有涉及到栈数据的打印,所以无法打印出栈数据是正常的现象,不需要处理。

    关于第二个问题,在函数Pop中传递参数e时,需要传递SElemType类型的指针,而代码中传递的是SElemType类型的变量,可以将函数声明修改为Status Pop(SqStack* S, SElemType* e),同时在函数中使用*e来修改指针所指向的变量。

    关于第三个问题,在函数Pop中,应该将* --S->top作为一个整体赋值给e,即*e = * --S->top。这样可以正确获取栈顶值并将其弹出,避免了类型不匹配的问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月2日
  • 已采纳回答 3月25日
  • 创建了问题 3月25日

悬赏问题

  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 matlab(相关搜索:紧聚焦)
  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计
  • ¥15 Arduino无法同时连接多个hx711模块,如何解决?
  • ¥50 需求一个up主付费课程
  • ¥20 模型在y分布之外的数据上预测能力不好如何解决