设计一个进制转换程序,使用顺序栈设计一个把十进制数转换为十六进制数的接口,实现当通过键盘输入一个非负的十进制数,可以在终端输出对应的十六进制数

/*************************************************
 *
 *   file name:DecHex.c
 *   author   :momolyl@126.com
 *   date     :2024/04/25
 *   brief    :使用顺序栈设计一个把十进制数转换为十六进制数的接口,实现当通过键盘输入一个非负的十进制数,可以在终端输出对应的十六进制数。
 *   note     :None
 *
 *   CopyRight (c) 2024    momolyl@126.com    All Right Reseverd
 *
 **************************************************/
#include <stdbool.h>
#include <stdlib.h>
#include <stdio.h>
/*************************************************
 *
 *   func name     :
 *   brief         :
 *   func parameter:
 *
 *
 *   return        :None
 *   note          :None
 *   func author   :momolyl@126.com
 *   date          :2024/04/25
 *   version       :V1.0
 **************************************************/
typedef int DataType_t;
typedef struct SqStack // 存储栈的数据(栈底+栈顶+栈容量)
{
    DataType_t *Bottom;
    unsigned int Size;
    int Top;
} SqStack_t;

// 创建一个空的顺序栈
SqStack_t *SqStack_Create(unsigned int size)
{
    SqStack_t *Manager = (SqStack_t *)calloc(1, sizeof(SqStack_t));

    if (NULL == Manager)
    {
        perror("calloc memory for manager is failed!\n");
        exit(-1);
    }
    Manager->Bottom = (DataType_t *)calloc(1, sizeof(DataType_t));
    if (NULL == Manager->Bottom)
    {
        perror("calloc memory for Stack is failed!\n");
        free(Manager);
        exit(-1);
    }
    Manager->Size = size;
    Manager->Top = -1;

    return Manager;
}

// 判断栈是否已满
bool SqStack_IsFull(SqStack_t *Manager)
{
    if (Manager->Top + 1 == Manager->Size)
        return true;
    return false;
}
// 新元素从栈顶入栈,即从数组的尾部插入元素
bool SqStack_Push(SqStack_t *Manager, DataType_t Data)
{
    // 判断栈是否已满
    if (SqStack_IsFull(Manager))
    {
        printf("SqStack is full!\n");
        return false;
    }

    Manager->Bottom[++Manager->Top] = Data;
    return true;
}
// 判断栈是否为空
bool SqStack_IsEmpty(SqStack_t *Manager)
{
    if (Manager->Top == -1)
        return true;
    return false;
}

DataType_t SqStack_Pop(SqStack_t *Manager)
{
    DataType_t temp = 0; // 存储出栈元素的值
    // 判断栈是否为空
    if (SqStack_IsEmpty(Manager))
    {
        printf("SqStack is empty!\n");
        return;
    }

    temp = Manager->Bottom[Manager->Top--];
    return temp;
}
// 遍历顺序栈元素(测试函数)
void SqStack_Print(SqStack_t *Manager)
{
    for (int i = 0; i <= Manager->Top; i++)
        printf("Stack element[%d]=%d\n", i, Manager->Bottom[i]);
}
int main(void)
{
    printf("Please input a non-negative decimal integer:");
    unsigned int Decimal;
    scanf("%d", &Decimal);
    int count = 1;
    SqStack_t *Manager = SqStack_Create(100);
    SqStack_Push(Manager, Decimal % 16);
    while (Decimal >= 16)
    {
        Decimal /= 16;
        SqStack_Push(Manager, Decimal % 16);
        count++;
    }
    printf("The hexdecimal is:");
    for (int i = 0; i < count; i++)
        printf("%X", SqStack_Pop(Manager));
    printf("\n");
    return 0;
}
posted @   铃是铃铛的铃  阅读(38)  评论(2编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示