C语言栈:进制 10转2,8,16

数组写法:

  1. #include<stdio.h>      
  2.   
  3. #define  MAX_LEN 100      
  4.   
  5. typedef int Elemtype;   
  6.   
  7. typedef struct {   
  8.     Elemtype data[MAX_LEN];   
  9.     int StackSize;   
  10. }SqStack;   
  11.   
  12. int InitStack(SqStack* S)   
  13. {   
  14.     S->StackSize = -1;   
  15.     return 1;   
  16. }   
  17.   
  18. int PushStack(SqStack* S, Elemtype e)   
  19. {   
  20.     S->data[++S->StackSize] = e;   
  21.     return 1;   
  22. }   
  23.   
  24. int StackEmpty(SqStack* S)   
  25. {   
  26.     return S->StackSize == -1 ? 1 : 0;   
  27. }   
  28.   
  29. int PopStack(SqStack* S, Elemtype* e)   
  30. {   
  31.     *e = S->data[S->StackSize--];   
  32.     return 1;   
  33. }   
  34.   
  35. void TrsNum(int number, int cet)   
  36. {   
  37.     SqStack S;   
  38.     Elemtype e;   
  39.     InitStack(&S);   
  40.     number == 0 ? PushStack(&S, 0) : NULL;   
  41.     while (number)   
  42.     {   
  43.         PushStack(&S, number % cet);   
  44.         number = number / cet;   
  45.     }   
  46.   
  47.     while (!StackEmpty(&S))   
  48.     {   
  49.         PopStack(&S, &e);   
  50.         switch (e)   
  51.         {   
  52.         case 10:   
  53.         case 11:   
  54.         case 12:   
  55.         case 13:   
  56.         case 14:   
  57.         case 15:   
  58.             e += 55;   
  59.             break;   
  60.         default:   
  61.             e += 48;   
  62.         }   
  63.         printf("%c", e);   
  64.     }   
  65.     printf("\n");   
  66. }   
  67.   
  68. int main()   
  69. {   
  70.     int number;   
  71.     printf("十进制数:");   
  72.     scanf("%d", &number);   
  73.     TrsNum(number, 2);   
  74.     TrsNum(number, 8);   
  75.     TrsNum(number, 16);   
  76.     return 0;   
  77. }  

动态栈写法:

  1. #include<stdio.h>      
  2. #include<stdlib.h>      
  3.   
  4. #define  INITSIZE 100      
  5. #define  INCREMENT 10      
  6.   
  7. typedef int Elemtype;   
  8. typedef struct {   
  9.     Elemtype* base;   
  10.     Elemtype* top;   
  11.     int StackSize;   
  12. }SqStack;   
  13.   
  14. int InitStack(SqStack* S)   
  15. {   
  16.     S->base = (Elemtype*)malloc(sizeof(Elemtype) * INITSIZE);   
  17.     if (!S->base)   
  18.         return 0;   
  19.     S->top = S->base;   
  20.     S->StackSize = INITSIZE;   
  21.     return 1;   
  22. }   
  23.   
  24. int PushStack(SqStack* S, Elemtype e)   
  25. {   
  26.     if (S->top - S->base >= S->StackSize)   
  27.     {   
  28.         S->base = (Elemtype*)realloc(S->base, (S->StackSize + INCREMENT) * sizeof(Elemtype));   
  29.         if (!S->base)   
  30.             return 0;   
  31.         S->top = S->base + S->StackSize;   
  32.         S->StackSize += INCREMENT;   
  33.     }   
  34.     *S->top++ = e;   
  35.     return 1;   
  36. }   
  37.   
  38. int StackEmpty(SqStack* S)   
  39. {   
  40.     return S->top == S->base;   
  41. }   
  42.   
  43. int PopStack(SqStack* S, Elemtype* e)   
  44. {   
  45.     if (S->top == S->base)   
  46.         return 0;   
  47.     *e = *--S->top;   
  48.     return 1;   
  49. }   
  50.   
  51. void TrsNum(int number, int cet)   
  52. {   
  53.     SqStack S;   
  54.     Elemtype e;   
  55.     InitStack(&S);   
  56.     number == 0 ? PushStack(&S, 0) : NULL;   
  57.     while (number)   
  58.     {   
  59.         PushStack(&S, number % cet);   
  60.         number = number / cet;   
  61.     }   
  62.   
  63.     while (!StackEmpty(&S))   
  64.     {   
  65.         PopStack(&S, &e);   
  66.         switch (e)   
  67.         {   
  68.         case 10:   
  69.         case 11:   
  70.         case 12:   
  71.         case 13:   
  72.         case 14:   
  73.         case 15:   
  74.             e += 55;   
  75.             break;   
  76.         default:   
  77.             e += 48;   
  78.         }   
  79.         printf("%c", e);   
  80.     }   
  81.     printf("\n");   
  82. }   
  83.   
  84. int main()   
  85. {   
  86.     int number;   
  87.     printf("十进制数:");   
  88.     scanf("%d", &number);   
  89.     TrsNum(number, 2);   
  90.     TrsNum(number, 8);   
  91.     TrsNum(number, 16);   
  92.     return 0;   
  93. }  

 如未特殊声明,文章均为原创。
 本文标题:C语言栈:进制 10转2,8,16
 本文链接:https://manwish.cn/article/decimaltoboh.html

留下评论