困的时候在睡觉 2022-11-25 11:27 采纳率: 50%
浏览 5
已结题

数据结构C程序栈的问题

目的:将输入的数字转为二进制,接着将转换后的元素入栈。全部入栈完再把元素一个个出栈,出栈的结果即为转换完的结果

我的问题:运行无报错,但输入数字运行没有结果

#include<stdio.h>
#include<malloc.h>
#include<math.h>
#include<string.h>
#include "process.h"
#define SIZE 100// 存储空间初始分配
#define STACKINCREMENT 10// 存储空间分配增量
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int Status;
typedef int SElemType;
typedef struct
{
    SElemType *base;//栈底
    int *top;//栈顶
    int stacksize;//栈容量
} SqStack;
SqStack *S; //定义全局变量


 //初始化栈
int InitStack(SqStack *S) {
S->base=(SElemType*)malloc(SIZE*sizeof(SElemType));
if(!S->base)exit(OVERFLOW);
S->top=S->base;
S->stacksize=SIZE;
return OK;
}

//入栈操作 
void Push(SqStack *S, int e){

if(S->top-S->base>=S->stacksize){
S->base=(SElemType*)realloc(S->base,(S->stacksize+10)*sizeof(SElemType));
if(!S->base)exit (OVERFLOW);
S->top=S->base+S->stacksize;
S->stacksize+=10;    
}
S->top=&e;
S->top++;
}

//判空操作 
Status Stackempty(SqStack *S){
if(S->top==S->base) return ERROR;
return OK;
}

// 出栈操作
void Pop(SqStack *S){
    SElemType *e;
if(S->top==S->base)  printf("ERROR");
else *e=*--S->top ;
    printf("%d",*e);
}

//数制转换函数 
void conversion(SElemType N, SqStack *S){
InitStack(S);
while(N>=0){
    Push(S,N%2);
    N=N/2;}
while(!Stackempty(S)){

    Pop(S);
}
}

 //主函数 
int main(){
SElemType N; 
printf("输入要转换的数字N\n");
scanf("%d",&N);
printf("转换结果为:");
conversion(N,S);
return 0;
}

  • 写回答

2条回答 默认 最新

  • qzjhjxj 2022-11-25 13:16
    关注

    修改如下,改动处见注释,供参考:

    #include <stdio.h>
    #include <stdlib.h>
    //#include <>
    //#include <>
    //#include "process.h"
    #define SIZE 100// 存储空间初始分配
    #define STACKINCREMENT 10// 存储空间分配增量
    #define OK 1
    #define ERROR 0
    #define TRUE 1
    #define FALSE 0
    #define OVERFLOW -1
    typedef int Status;
    typedef int SElemType;
    typedef struct
    {
        SElemType* base;//栈底
        int* top;//栈顶
        int stacksize;//栈容量
    } SqStack;
    SqStack* S; //定义全局变量
     //初始化栈
    int InitStack(SqStack** S) {  //修改
        (*S) = (SqStack*)malloc(sizeof(SqStack)); //修改
        (*S)->base = (SElemType*)malloc(SIZE * sizeof(SElemType));  //修改
        if (!(*S)->base) exit(OVERFLOW);   //修改
        (*S)->top = (*S)->base;             //修改
        (*S)->stacksize = SIZE;             //修改
        return OK;
    }
    //入栈操作 
    void Push(SqStack* S, int e) {
        if (S->top - S->base >= S->stacksize) {
            S->base = (SElemType*)realloc(S->base, (S->stacksize + 10) * sizeof(SElemType));
            if (!S->base)  exit(OVERFLOW);
            S->top = S->base + S->stacksize;
            S->stacksize += 10;
        }
        *S->top = e; //S->top = &e;  修改
        S->top++;
    }
    //判空操作 
    Status Stackempty(SqStack* S) {
        if (S->top == S->base) 
            return OK;          //修改
        return ERROR;           //修改
    }
    // 出栈操作
    void Pop(SqStack* S) {
        SElemType e;  //SElemType* e; 修改
        if (S->top == S->base) 
            printf("ERROR");
        else {                 //修改
            e = *--S->top;     //修改
            printf("%d", e);  
        }                      //修改
    }
    //数制转换函数 
    void conversion(SElemType N, SqStack* S) {
        //InitStack(S);    //修改
        while (N > 0) {   //while (N >= 0) 修改
            Push(S, N % 2);
            N = N / 2;
        }
        while (!Stackempty(S)) {
            Pop(S);
        }
    }
    //主函数 
    int main() {
        SElemType N;
        InitStack(&S);  //修改
        printf("输入要转换的数字N\n");
        scanf("%d", &N);
        printf("转换结果为:");
        conversion(N, S);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月5日
  • 已采纳回答 11月27日
  • 创建了问题 11月25日

悬赏问题

  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?