数据布局(四)——栈的应用—数制转换

打印 上一主题 下一主题

主题 1978|帖子 1978|积分 5944

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
利用栈举行数制转换:
十进制转换八进制:先将十进制数除以八得到余数,余数入栈,然后将得到的商继承除以八,直到商为零
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define MAXSIZE 100
  4. //数制转换
  5. //定义链表节点结构体
  6. typedef struct{
  7.         int data[MAXSIZE];
  8.         int top;
  9. }Stack;
  10. //初始化栈
  11. void InitStack(Stack *S){
  12.         S->top = -1;  //栈为空
  13. }
  14. //判断栈是否为空
  15. int StackEmpty(Stack *S){
  16.         return S->top == -1;
  17. }
  18. //入栈
  19. void Push(Stack *S,int value){
  20.         if(S->top<MAXSIZE-1){
  21.                 S->data[++(S->top)] = value;
  22.         }else{
  23.                 printf("Stack overflow!\n");
  24.         }
  25. }
  26. //出栈
  27. void Pop(Stack *S,int *value){
  28.         if(!StackEmpty(S)){
  29.                 *value = S->data[(S->top)--];
  30.         }else{
  31.                 printf("Stack underflow!\n");
  32.         }
  33. }
  34. void conversation(){
  35.         Stack S; //定义栈变量
  36.         int N,e;
  37.        
  38.         //对于输入的任意一个非负十进制整数,打印输出与其等值的八进制数
  39.         InitStack(&S);  //构造空栈
  40.        
  41.         scanf("%d",&N);
  42.        
  43.         if(N == 0){
  44.                 printf("0\n");
  45.                 return;
  46.         }
  47.        
  48.         //十进制转八进制
  49.         while(N){
  50.                 Push(&S,N % 8); //余数入栈
  51.                 N = N / 8;
  52.         }
  53.        
  54.         //输出八进制数
  55.         while(!StackEmpty(&S)){
  56.                 Pop(&S,&e);
  57.                 printf("%d",e);
  58.         }
  59.         printf("\n");
  60. } //conversation
  61. int main() {
  62.         conversation();
  63.         return 0;
  64. }
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

篮之新喜

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表