利用栈的基本操作实现将任意一个十进制整数转化为R进制整数。 算法为:
1、定义栈的顺序存取结构
2、分别定义栈的基本操作(初始化栈、判栈为空、出栈、入栈等) 3、定义一个函数用来实现上面问题: (1)十进制整数X和R作为形参 (2)初始化栈
(3)只要X不为0重复做下列动作
将X % R入栈, X=X/R
(4)只要栈不为空重复做下列动作
栈顶出栈 , 输出栈顶元素
#include
#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(\
printf(\要转化为多少进制:2 进制、8 进制、16 进制 填数字!\\n\ scanf(\
printf(\将十进制数%d 转化为%d 进制是:\\n\ while(n) {
Push(s,n%flag); n=n/flag; }
while(!stackempty(s)) {
e=Pop(s,e); switch(e) {
case 10: printf(\ break;
case 11: printf(\
break;
case 12: printf(\ break;
case 13: printf(\ break;
case 14: printf(\ break;
case 15: printf(\ break;
default: printf(\ } }
printf(\ return 0; }
int main() {
sqstack s; StackInit(&s); conversion(&s); return 0; }
相关推荐: