• (数据结构)数制转换——将一个十进制整数转换成一个非十进制数


    1. #include
    2. #include
    3. //类型创建
    4. typedef struct LinkedStackNode
    5. {
    6. int data;
    7. struct LinkedStackNode* next;
    8. }LinkedStackNode, * LinkedStack;
    9. LinkedStack top;
    10. //链栈的初始化
    11. //头结点的初始化
    12. LinkedStack Init_LinkedStack()
    13. {
    14. LinkedStack top = (LinkedStackNode*)malloc(sizeof(LinkedStackNode));
    15. if (top != NULL)
    16. {
    17. top->next = NULL;
    18. }
    19. else
    20. {
    21. printf("头结点申请空间失败\n");
    22. }
    23. return top;
    24. }
    25. //判断栈空
    26. int LinkedStack_Empty(LinkedStack top)
    27. {
    28. if (top->next == NULL)
    29. {
    30. return 1;
    31. }
    32. else
    33. {
    34. return 0;
    35. }
    36. }
    37. //入栈
    38. int Push_LinkedStack(LinkedStack top, int x)
    39. {
    40. LinkedStackNode* node;
    41. node = (LinkedStackNode*)malloc(sizeof(LinkedStackNode));
    42. if (node == NULL)
    43. {
    44. printf("节点申请空间失败\n");
    45. return 0;
    46. }
    47. node->data = x;
    48. node->next = top->next;
    49. top->next = node;
    50. return 1;
    51. }
    52. //出栈
    53. int Pop_LinkedStack(LinkedStack top, int* x)
    54. {
    55. LinkedStackNode* node;
    56. if (top->next == NULL)
    57. {
    58. printf("链栈为空,无法进行出栈操作\n");
    59. return 0;
    60. }
    61. else
    62. {
    63. node = top->next;
    64. *x = node->data;
    65. top->next = node->next; //将头结点后的节点整体向前一位
    66. free(node);
    67. return 1;
    68. }
    69. }
    70. //读取栈顶元素
    71. int Get_LinkedStack(LinkedStack top, int* x)
    72. {
    73. if (top->next == NULL)
    74. {
    75. printf("链栈为空\n");
    76. return 0;
    77. }
    78. else
    79. {
    80. *x = top->next->data;
    81. return 1;
    82. }
    83. }
    84. //对于输入的任意一个非负十进制整数,打印输出与其等值的任意进制数
    85. void Conversion(int N)
    86. {
    87. int x; //声明变量x,输出转换后各个位数上的数
    88. int jinzhi;
    89. printf("请输入需要转换为的进制数\n");
    90. scanf("%d",&jinzhi);
    91. LinkedStack S = Init_LinkedStack(); //构造空链栈S
    92. while (N > 0) //当N>0时,继续进行数值转换
    93. {
    94. Push_LinkedStack(S,N%jinzhi); //对N对进制数的余数的入栈
    95. N /=jinzhi; //将N的商赋值给本身,便于下一轮计算
    96. }
    97. printf("转化后的进制数为:");
    98. while (!LinkedStack_Empty(S)) //栈不为空时,出栈栈中的余数
    99. {
    100. Pop_LinkedStack(S,&x); //进行出栈操作
    101. printf("%d ",x);
    102. }
    103. }
    104. int main()
    105. {
    106. //栈的初始化
    107. //头结点的初始化
    108. LinkedStack top;
    109. top = Init_LinkedStack();
    110. if (top == NULL)
    111. {
    112. printf("申请链栈空间失败\n");
    113. }
    114. //对于输入的任意一个非负十进制整数,打印输出与其等值的任意进制数
    115. int N;
    116. printf("请输入需要转换的非负十进制数\n");
    117. scanf("%d",&N);
    118. Conversion(N);
    119. return 0;
    120. }

  • 相关阅读:
    Redis 过期删除策略和内存淘汰策略
    C++ —— 继承
    【Arduino TFT】基于 ESP8266 以及 SSD1306实现的天气时钟
    Java 中常用的进制转换
    秋招测试开发面经总结
    Linux CentOS7 vim临时文件
    Google Earth Engine(GEE)——快速建立一个10km的格网
    《Go题库·16》读写锁底层是怎么实现的
    v-model和v-bind的区别?
    OpenCV 4基础篇| OpenCV图像的拆分和合并
  • 原文地址:https://blog.csdn.net/2301_79580018/article/details/134035401