葫芦娃* 2022-11-05 16:59 采纳率: 80%
浏览 61
已结题

帮我看一看我的这个程序呗

我输入65536 2然后输出结果不对
#include <stdio.h>
#include <stdlib.h>
#define Maxsize 10
#define ElementType int
typedef int Position;
typedef struct SNode *PtrToSNode;
struct SNode{
ElementType *Data;//存储元素的数组
Position Top; //栈顶指针
int MaxSize; //堆栈最大容量
};
typedef PtrToSNode Stack;
//顺序栈的创建
Stack CreateStack(int MaxSize)
{ Stack S=(Stack)malloc(sizeof(struct SNode));
S->Data=(ElementType )malloc(Maxsizesizeof(ElementType));
S->Top=-1;
S->MaxSize=MaxSize;
return S;
}
//释放栈
void Destory_Stack(Stack *S)
{ if(*S) free(*S);
*S=NULL;
return;
}

//判断栈是否已满
int IsFull(Stack S)
{ if(S->Top==Maxsize-1) return 1;//表示堆栈已满
else return 0;//表示堆栈未满
}
//判断栈是否为空
int IsEmpty(Stack S)
{ if(S->Top==-1) return 1;//表示空
else return 0;//表示非空
}
//顺序栈入栈
int Push(Stack S,ElementType X)
{ if(IsFull(S)){
printf("堆栈已满,不能入栈");
return 0;
}
else{//入栈
S->Top++;
S->Data[S->Top]=X;
return 1;
}
}
//顺序栈出栈
ElementType Pop(Stack S)
{ if(IsEmpty(S)){
printf("堆栈空,不能删除元素");
return 0;
}
else{//出栈
return (S->Data[(S->Top)--]);
}
}
//数制转换
int Conversion(int Num,int Radix)
{ Stack S;
int tmp;
if(Radix==0)
{ printf("基数不能为0\n");
return 0;
}
S=CreateStack(30);//定义堆栈最大值
if(!S)
{ printf("栈初始化失败\n");
return 0;
}
while(Num)
{ Push(S, Num%Radix);//余数入栈
Num=Num/Radix; //商作为被除数
}
while(!IsEmpty(S))
{ tmp=Pop(S);
printf("%d",tmp);
}
printf("\n");
Destory_Stack(&S);
}
//主函数实现
int main()
{
int N,R;
printf("请输入一个十进制数:\n");
scanf("%d",&N);
printf("请输入转换后的数制:\n");
scanf("%d",&R);
Conversion(N,R);
return 0;
}

  • 写回答

1条回答 默认 最新

  • qzjhjxj 2022-11-05 17:34
    关注

    没什么问题,堆栈最大容量值#define Maxsize 10 这里预定义多余了,见修改处,其它没发现问题,65536 转 8 进制得 200000,这结果正确。

    #include <stdio.h>
    #include <stdlib.h>
    //#define Maxsize 10  修改
    #define ElementType int
    typedef int Position;
    typedef struct SNode *PtrToSNode;
    struct SNode{
        ElementType *Data;//存储元素的数组
        Position Top;     //栈顶指针
        int MaxSize;      //堆栈最大容量
    };
    typedef PtrToSNode Stack;
    //顺序栈的创建
    Stack CreateStack(int MaxSize)
    {
        Stack S=(Stack)malloc(sizeof(struct SNode));
        S->Data=(ElementType*)malloc(MaxSize*sizeof(ElementType));
        S->Top=-1;
        S->MaxSize=MaxSize;
        return S;
    }
    //释放栈
    void Destory_Stack(Stack *S)
    {
        if(*S) free(*S);
        *S=NULL;
        return;
    }
    
    //判断栈是否已满
    int IsFull(Stack S)
    {
        if(S->Top==S->MaxSize-1) //if(S->Top==MaxSize-1)修改
            return 1;//表示堆栈已满
        else
            return 0;//表示堆栈未满
    }
    //判断栈是否为空
    int IsEmpty(Stack S)
    {
        if(S->Top==-1)
            return 1;//表示空
        else
            return 0;//表示非空
    }
    //顺序栈入栈
    int Push(Stack S,ElementType X)
    {
        if(IsFull(S)){
            printf("堆栈已满,不能入栈");
            return 0;
        }
        else{//入栈
            S->Top++;
            S->Data[S->Top]=X;
            return 1;
        }
    }
    //顺序栈出栈
    ElementType Pop(Stack S)
    {
        if(IsEmpty(S)){
            printf("堆栈空,不能删除元素");
            return 0;
        }
        else{//出栈
            return (S->Data[(S->Top)--]);
    }
    }
    //数制转换
    int Conversion(int Num,int Radix)
    {
        Stack S;
        int tmp;
        if(Radix==0)
        {
             printf("基数不能为0\n");
             return 0;
        }
        S=CreateStack(30);//定义堆栈最大值
        if(!S)
        {
            printf("栈初始化失败\n");
            return 0;
        }
        while(Num)
        {
            Push(S, Num%Radix);//余数入栈
            Num=Num/Radix; //商作为被除数
        }
        while(!IsEmpty(S))
        {
            tmp=Pop(S);
            printf("%d",tmp);
        }
        printf("\n");
        Destory_Stack(&S);
    }
    //主函数实现
    int main()
    {
        int N,R;
        printf("请输入一个十进制数:\n");
        scanf("%d",&N);
        printf("请输入转换后的数制:\n");
        scanf("%d",&R);
        Conversion(N,R);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月13日
  • 已采纳回答 11月5日
  • 修改了问题 11月5日
  • 创建了问题 11月5日

悬赏问题

  • ¥15 halcon DrawRegion 提示错误
  • ¥15 FastAPI Uvicorn启动显示404
  • ¥15 centos7.9脚本,怎么排除特定的访问记录
  • ¥15 关于#Django#的问题:我的静态文件呢?
  • ¥15 关于CPLEX的问题,请专家解答
  • ¥15 cocos的点击事件 怎么穿透到 原生fragment上。
  • ¥20 基于相关估计的TDOA算法中的加权最小二乘拟合法matlab仿真
  • ¥20 基于相关估计的TDOA算法中的自适应加权广义互相关法。
  • ¥15 abaqus CAE 2024软件启动问题
  • ¥20 基于相关估计的TDOA算法中的局部互相关函数滤波matlab仿真