利用栈的基本操作实现将任意一个十进制整数转化为R进制整数

更新时间:2023-09-05 10:39:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

利用栈的基本操作实现将任意一个十进制整数转化为R进制整数。 算法为:

1、定义栈的顺序存取结构

2、分别定义栈的基本操作(初始化栈、判栈为空、出栈、入栈等)

3、定义一个函数用来实现上面问题:

(1)十进制整数X和R作为形参

(2)初始化栈

(3)只要X不为0重复做下列动作

将X % R入栈, X=X/R

(4)只要栈不为空重复做下列动作

栈顶出栈 , 输出栈顶元素

#include <stdio.h>

#include <stdlib.h>

#include <malloc.h>

#define stack_init_size 100

#define stackincrement 10

typedef struct sqstack

{

int *base;

int *top;

int stacksize;

} sqstack;

int StackInit(sqstack *s)

{

s->base=(int *)malloc(stack_init_size *sizeof(int));

if(!s->base)

return 0;

s->top=s->base;

s->stacksize=stack_init_size;

return 1;

}

int Push(sqstack *s,int e)

{

if(s->top-s->base>=s->stacksize)

{

s->base=(int *)realloc(s->base,(s->stacksize+stackincrement)*sizeof(int)); if(!s->base)

return 0;

s->top=s->base+s->stacksize;

s->stacksize+=stackincrement;

}

*(s->top++)=e;

return e;

}

int Pop(sqstack *s,int e)

{

if(s->top==s->base)

return 0;

e=*--s->top;

return e;

}

int stackempty(sqstack *s)

{

if(s->top==s->base)

{

return 1;

}

else

{

return 0;

}

}

int conversion(sqstack *s)

{

int n,e=0,flag=0;

printf("输入要转化的十进制数:\n");

scanf("%d",&n);

printf("要转化为多少进制:2 进制、8 进制、16 进制 填数字!\n"); scanf("%d",&flag);

printf("将十进制数%d 转化为%d 进制是:\n",n,flag);

while(n)

{

Push(s,n%flag);

n=n/flag;

}

while(!stackempty(s))

{

e=Pop(s,e);

switch(e)

{

case 10: printf("A");

break;

case 11: printf("B");

break;

case 12: printf("C"); break;

case 13: printf("D"); break;

case 14: printf("E"); break;

case 15: printf("F"); break;

default: printf("%d",e); }

}

printf("\n");

return 0;

}

int main()

{

sqstack s;

StackInit(&s);

conversion(&s);

return 0;

}

本文来源:https://www.bwwdw.com/article/nl3i.html

Top