栈的应用(一)数制转换

xiaoxiao2025-05-18  25

1.问题描述

将十进制数N转换成其他d进制数

2.原理

N=(N div d) * d+N mod d (其中:div为整除运算,mod为求余运算)

3.例如

(1348)10=(2504)8,其运算过程如下:

4.程序代码

//----*-----*------ //程序名称:数制转换 //编译环境:VC++ 6.0 //作者:Bee_darker //修改日期:2018-10-25 #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 #define OVERFLOW -1 #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #include<stdio.h> #include<stdlib.h> typedef int Status; typedef int SElemType; //定义顺序栈 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 GetTop(SqStack S,SElemType &e) { if(S.top == S.base) return ERROR; e = *(S.top-1); return OK; } //出栈操作 Status Pop(SqStack &S,SElemType &e) { if(S.top == S.base) return ERROR; e = * --S.top; return OK; } //求栈长 Status StackLength(SqStack S) { return S.top-S.base; } //清空栈 Status ClearStack(SqStack &S) { S.top = S.base; return OK; } //探空 Status StackEmpty(SqStack S) { if(S.top == S.base) return TRUE; else return FALSE; } //输出栈中元素 void Print(SqStack S) { SElemType x; while(S.top-S.base != 0) { x = * --S.top; printf("%d\t",x); } } //销毁栈 Status DestroyStack(SqStack &S) { S.base = NULL; return OK; } //数制转换 void main() { SqStack S; InitStack(S); int N; SElemType e; scanf("%d",&N); while(N) { Push(S,N%8); N=N/8; } while(!StackEmpty(S)) { Pop(S,e); printf("%d",e); } }
转载请注明原文地址: https://www.6miu.com/read-5030305.html

最新回复(0)