找回密码
 立即注册
首页 业界区 科技 数据结构-十进制转换成十六进制

数据结构-十进制转换成十六进制

兑谓 7 天前
使用链式栈将一个十进制数转换成十六进制数
  1. /***************************************************************************
  2. *function:创建一个链栈,实现把一个十进制数转换成十六进制数
  3. *author:jindouliu2024@163.com
  4. *date:2025.4.4
  5. *
  6. * Copyright (c)  2024-2025   jindouliu2024@163.com   All right Reserved
  7. *****************************************************************************/
  8. #include<stdio.h>
  9. #include<stdlib.h>
  10. #include<stdbool.h>
  11. //指的是单向链表中的结点有效数据类型,用户可以根据需要进行修改
  12. typedef int  DataType_t;
  13. //构造链式栈的结点,链式栈中所有结点的数据类型应该是相同的
  14. typedef struct LinkedStack
  15. {
  16.         DataType_t                   data; //结点的数据域
  17.         struct LinkedStack        *next; //结点的指针域
  18. }LStack_t;
  19. //创建一个链式栈,链式栈应该有一个头结点,对链式栈进行初始化
  20. LStack_t * LStack_Create(void)
  21. {
  22.         //1.创建一个头结点并对头结点申请内存
  23.         LStack_t *Head = (LStack_t *)calloc(1,sizeof(LStack_t));
  24.         if (NULL == Head)
  25.         {
  26.                 perror("Calloc memory for Head is Failed");
  27.                 exit(-1);
  28.         }
  29.         //2.对头结点进行初始化,头结点是不存储有效内容的!!!
  30.         Head->next = NULL;
  31.         //3.把头结点的地址返回即可
  32.         return Head;
  33. }
  34. //创建新的结点,并对新结点进行初始化(数据域 + 指针域)
  35. LStack_t * LStack_NewNode(DataType_t data)
  36. {
  37.         //1.创建一个新结点并对新结点申请内存
  38.         LStack_t *New = (LStack_t *)calloc(1,sizeof(LStack_t));
  39.         if (NULL == New)
  40.         {
  41.                 perror("Calloc memory for NewNode is Failed");
  42.                 return NULL;
  43.         }
  44.         //2.对新结点的数据域和指针域进行初始化
  45.         New->data = data;
  46.         New->next = NULL;
  47.         return New;
  48. }
  49. //入栈
  50. bool LStack_Push(LStack_t *Head,DataType_t data)
  51. {
  52.         //1.创建新的结点,并对新结点进行初始化
  53.         LStack_t *New = LStack_NewNode(data);
  54.         if (NULL == New)
  55.         {
  56.                 printf("can not insert new node\n");
  57.                 return false;
  58.         }
  59.         //2.判断链式栈是否为空,如果为空,则直接入栈即可
  60.         if (NULL == Head->next)
  61.         {
  62.                 Head->next = New;
  63.                 return true;
  64.         }
  65.         //3.如果链式栈为非空,则把新结点加入到链式栈的头部
  66.         New->next  = Head->next;
  67.         Head->next = New;
  68.         return true;
  69. }
  70. //出栈
  71. DataType_t LStack_Pop(LStack_t *Head)
  72. {
  73.         LStack_t *Phead = Head->next;
  74.         DataType_t data = -1;
  75.         //1.链式栈不为空
  76.         if (NULL != Head->next)
  77.         {
  78.                 //出栈操作
  79.                 Head->next = Phead->next;
  80.                 Phead->next = NULL;
  81.                 data = Phead->data;
  82.                 free(Phead);
  83.         }
  84.         return data;
  85. }
  86. //遍历链式栈
  87. DataType_t LStack_Print(LStack_t *Head)
  88. {
  89.         //对链shi栈的头结点的地址进行备份
  90.         LStack_t *Phead = Head;
  91.        
  92.         //首结点
  93.         while(Phead->next)
  94.         {
  95.                 //把头的直接后继作为新的头结点
  96.                 Phead = Phead->next;
  97.                
  98.                 switch(Phead->data){
  99.                         case 10:printf("A");break;
  100.                         case 11:printf("B");break;
  101.                         case 12:printf("C");break;
  102.                         case 13:printf("D");break;
  103.                         case 14:printf("E");break;
  104.                         case 15:printf("F");break;
  105.                         default:printf("%d",Phead->data);break;
  106.                 }
  107.                
  108.         }
  109. }
  110. //实现将十进制数转换变成十六进制数
  111. void DecConvertHex(LStack_t *p,DataType_t data)
  112. {
  113.        
  114.         while(1){
  115.                
  116.                 LStack_Push(p,data % 16);
  117.                 LStack_Push(p,data / 16);
  118.                 if(data/16 > 16){
  119.                         data = data / 16;
  120.                 }
  121.                 else{
  122.                         break;
  123.                 }
  124.         }
  125.        
  126.         printf("0X");
  127.         LStack_Print(p);
  128.         }
  129.        
  130. int main(int argc, char const *argv[])
  131. {
  132.         //创建链式栈
  133.         LStack_t *p = LStack_Create();
  134.         //输入一个要转换别的十进制数
  135.         DataType_t data;
  136.         printf("请输入一个整数\n");
  137.         scanf("%d",&data);
  138.         //进制转换函数
  139.         DecoConvertHex(p,data);
  140.         return 0;
  141. }
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册