如何将栈应用于数制转换的长尾?

2026-04-10 09:202阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计452个文字,预计阅读时间需要2分钟。

如何将栈应用于数制转换的长尾?

设计算法,将十进制整数转换为八进制。在函数中输入数据并输出结果。

如何将栈应用于数制转换的长尾?

由于计算过程是从低位到高位进行,产生八进制数的各个数位,然后打印输出。一般来说,是从高位到低位进行。

设计算法,将十进制整数转换为八进制,在函数中输入数据并输出结果。

由于计算过程是从低位到高位顺序产生八进制数的各个数位,而打印输出,一般来说应从高位到低位进行,恰好和计算过程相反。因此,若将计算过程中得到的八进制数的各位顺序进栈,则按出栈顺序打印输出的即为与输入对应的八进制数

#include<stdio.h> #include<stdlib.h> #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef int SElemType; typedef int Status; typedef struct { SElemType *base; SElemType *top; int stacksize; }SqStack; Status InitStack(SqStack *S) { S->base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType)); if(!S->base) exit(OVERFLOW); S->top=S->base; S->stacksize=STACK_INIT_SIZE; return OK; } Status Push(SqStack *S,SElemType e) { if(S->top-S->base>=S->stacksize) { S->base=(SElemType*)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(SElemType)); if(!S->base) exit(OVERFLOW); S->top=S->base+S->stacksize; S->stacksize+=STACKINCREMENT; } *S->top++=e; return OK; } Status StackEmpty(SqStack S) { return S.top==S.base; } Status Pop(SqStack *S,SElemType *e) { if(S->top==S->base) return ERROR; *e=*--S->top; return OK; } void conversion() { SqStack S; SElemType e; InitStack(&S); int n; printf("请输入要转换的十进制数:"); scanf("%d",&n); while(n) { Push(&S,n%8); n=n/8; } printf("得到八进制数为:"); while(!StackEmpty(S)) { Pop(&S,&e); printf("%d",e); } } int main() { conversion(); return 0; }

本文共计452个文字,预计阅读时间需要2分钟。

如何将栈应用于数制转换的长尾?

设计算法,将十进制整数转换为八进制。在函数中输入数据并输出结果。

如何将栈应用于数制转换的长尾?

由于计算过程是从低位到高位进行,产生八进制数的各个数位,然后打印输出。一般来说,是从高位到低位进行。

设计算法,将十进制整数转换为八进制,在函数中输入数据并输出结果。

由于计算过程是从低位到高位顺序产生八进制数的各个数位,而打印输出,一般来说应从高位到低位进行,恰好和计算过程相反。因此,若将计算过程中得到的八进制数的各位顺序进栈,则按出栈顺序打印输出的即为与输入对应的八进制数

#include<stdio.h> #include<stdlib.h> #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef int SElemType; typedef int Status; typedef struct { SElemType *base; SElemType *top; int stacksize; }SqStack; Status InitStack(SqStack *S) { S->base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType)); if(!S->base) exit(OVERFLOW); S->top=S->base; S->stacksize=STACK_INIT_SIZE; return OK; } Status Push(SqStack *S,SElemType e) { if(S->top-S->base>=S->stacksize) { S->base=(SElemType*)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(SElemType)); if(!S->base) exit(OVERFLOW); S->top=S->base+S->stacksize; S->stacksize+=STACKINCREMENT; } *S->top++=e; return OK; } Status StackEmpty(SqStack S) { return S.top==S.base; } Status Pop(SqStack *S,SElemType *e) { if(S->top==S->base) return ERROR; *e=*--S->top; return OK; } void conversion() { SqStack S; SElemType e; InitStack(&S); int n; printf("请输入要转换的十进制数:"); scanf("%d",&n); while(n) { Push(&S,n%8); n=n/8; } printf("得到八进制数为:"); while(!StackEmpty(S)) { Pop(&S,&e); printf("%d",e); } } int main() { conversion(); return 0; }