Chinaunix首页 | 论坛 | 博客
  • 博客访问: 210333
  • 博文数量: 87
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 798
  • 用 户 组: 普通用户
  • 注册时间: 2015-01-14 14:54
文章分类

全部博文(87)

文章存档

2015年(87)

我的朋友

分类: C/C++

2015-08-25 17:34:18

十进制和其他进制d转换原理:
                  N=(N/d)*d+N%d;
例如:(1348)10=(2504)8,其运算过程如下:


N       N/d      N%d

1348     168        4

 168      21        0

  21       2        5

   2       0        2


栈的应用
代码如下:

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include<stdlib.h>

  3. typedef struct Stack
  4. {
  5.     int *top;
  6.     int *base;
  7.     int stacksize;
  8. };

  9. int main(void)
  10. {
  11.     int N = 1348;
  12.     int d = 8;
  13.     struct Stack S;
  14.     //初始化栈
  15.     S.base = (int *)malloc(100*sizeof(int));
  16.     if (!S.base)
  17.     {
  18.         printf("分配内存失败!\n");
  19.         exit(0);
  20.     }
  21.     S.top = S.base;
  22.     //压入栈
  23.     while (N)
  24.     {
  25.         *S.top++ = (N%d);
  26.         N = N/d;
  27.     }
  28.     //弹出栈
  29.     printf("转化为%d进制后是: ", d);
  30.     while (S.base != S.top)
  31.     {
  32.         printf("%d", *--S.top);
  33.     }
  34.     printf("\n");

  35.     return 0;
  36. }


栈满:S.top-S.base>=stacksize.

类似代码框架:

点击(此处)折叠或打开





























































  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. #define STACK_INIT_SIZE 100 //存储空间初始分配量
  4. #define STACKINCREMENT 10 //存储空间分配增量
  5. #define OVERFLOW 0
  6. #define OK 0
  7. #define ERROR 0
  8. #define TRUE 1
  9. #define FALSE 0

  10. typedef int SElemType;
  11. typedef int Status;

  12. typedef struct
  13. {
  14.  SElemType *base; // 在栈构造之前和销毁之后,base的值为NULL
  15.  SElemType *top; // 栈顶指针
  16.  int stacksize; // 当前已分配的存储空间,以元素为单位
  17. }SqStack;

  18. Status InitStack(SqStack S)
  19. {
  20.     S.base=(SElemType * )malloc(STACK_INIT_SIZE * sizeof(SElemType));
  21.     if(!S.base) exit(OVERFLOW); //存储分配失败
  22.     S.top = S.base;
  23.     S.stacksize = STACK_INIT_SIZE;
  24.     return OK;
  25. } // InitStack

  26. Status StackEmpty(SqStack S)
  27. {
  28.    //若栈S为空栈,则返回TRUE,否则返回FALSE
  29.     if(S.top == S.base)
  30.         return TRUE;
  31.     else
  32.         return FALSE;
  33. }

  34. Status Push (SqStack *S,SElemType e)
  35. {
  36.     // 插入元素e为新的栈顶元素
  37.     if(S->top-S->base >= S->stacksize)
  38.     {
  39.         // 栈满增加存储空间
  40.         S->base = (SElemType *)realloc(S->base,(S->stacksize+STACKINCREMENT)*
  41.         sizeof (SElemType));
  42.         if(!S->base) exit(OVERFLOW); // 存储分配失败
  43.         S->top = S->base+S->stacksize;
  44.         S->stacksize += STACKINCREMENT;
  45.     }
  46.     *S->top ++= e;

  47.     return OK;
  48. }

  49. Status Pop(SqStack *S,SElemType *e)
  50. {
  51.     //若栈不空,则删除S的栈顶元素,用e返回起值,并返回OK,否则返回ERROR
  52.     if(S->top == S->base)
  53.         return ERROR;
  54.     *e = *(--S->top);

  55.     return OK;
  56. } //Pop
  57. void conversion()
  58. {
  59.     // 对于输入的任意一个非负十进制数,打印输出与其等值的八进制数
  60.     int N;
  61.     int e = 0;
  62.     SqStack S;
  63.     InitStack(S);
  64.      //构造一个空的栈S
  65.     S.base=(SElemType * )malloc(STACK_INIT_SIZE * sizeof(SElemType));
  66.     if(!S.base)
  67.         exit(OVERFLOW); //存储分配失败
  68.     S.top = S.base;
  69.     S.stacksize = STACK_INIT_SIZE;
  70.     printf("请输入十进制数: ");
  71.     scanf("%d",&N);
  72.     while(N)
  73.     {
  74.         Push(&S,N%8);
  75.         N = N/8;
  76.     }

  77.     while(!StackEmpty(S))
  78.     {
  79.         Pop(&S,&e);
  80.         printf("%d",e);
  81.     }
  82.  } // conversion
  83. void main()
  84. {
  85.     conversion();
  86. }


递归的应用

点击(此处)折叠或打开

  1. #include <stdio.h>

  2. void Tobinary(int n);

  3. int main()
  4. {
  5.     int num;
  6.     printf("请输入一个整数: ");
  7.     scanf("%d", &num);
  8.     Tobinary(num);
  9.     return 0;
  10. }
  11. void Tobinary(int n)
  12. {
  13.     if (n>=8)
  14.         Tobinary(n/8);
  15.     printf("%d", n%8);
  16. }

阅读(1947) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~