4.将堆栈内容输出就是转换后的结果。
/* * Copyright (c) 2014, 武汉大学 * All rights reserved. * * 文件名称:number_conversion.cpp * 摘 要:实现10进制数向其它进制的转换 * * 当前版本:1.0 * 作 者:田鑫 * 完成日期:2014年3月29日 */ #include<iostream> #include "stack.h" bool number_conversion(){ //对于输入的任意一个非负十进制数,打印输出与其等值的K进制数 SqStack s; InitStack(s); std::cout << "请输入待转换的十进制数N:"; int N; std::cin >> N; int temp = N; if( N < 0) { std::cout << "不能输入负数\n"; return false; } std::cout << "请输入欲转换为的目标进制K:"; int K; std::cin >> K; if( K <= 1 || K > 10 ) { std::cout << "输入进制不合法,请输入2—10之间的进制\n"; return false; } while ( N != 0 ) { Push(s, N % K ); N = N/K; } std::cout << temp <<"的" << K << "进制形式为:"; while( !StackEmpty(s)) { ElemType e; Pop(s, e); std::cout << e; } std::cout << std::endl; return true; }
/* * Copyright (c) 2014, 武汉大学 * All rights reserved. * * 文件名称:stack.h * 摘 要:声明与堆栈操作相关的常用函数 * * 当前版本:1.0 * 作 者:田鑫 * 完成日期:2014年3月29日 */ #ifndef STACK_H #define STACK_H typedef int ElemType; //堆栈元素的数据类型 const int STACK_INIT_SIZE = 20; //定义堆栈初始大小 const int STACK_INCREMENT = 10; //当堆栈空间不够时,堆栈增量的大小 typedef struct { ElemType * base; ElemType * top; int stacksize; }SqStack; bool InitStack(SqStack &s); /* * 函数介绍:构造一个空堆栈 * 输入参数:堆栈名 * 输出参数:无 * 返回值 :bool值 */ bool Push(SqStack &s, ElemType e); /* * 函数介绍:将元素e压入栈顶 * 输入参数:堆栈名,待入栈元素值 * 输出参数:无 * 返回值 :bool值 */ bool Pop(SqStack &s, ElemType & e); /* * 函数介绍:弹出栈顶元素,用e返回栈顶元素的值 * 输入参数:堆栈名 * 输出参数:e:返回栈顶元素的值 * 返回值 :bool值 */ bool StackEmpty(SqStack &s); /* * 函数介绍:栈空返回true,否则返回false * 输入参数:堆栈名 * 输出参数:空 * 返回值 :bool值 */ #endif
/* * Copyright (c) 2014, 武汉大学 * All rights reserved. * * 文件名称:stack.cpp * 摘 要:实现与堆栈操作相关的常用函数 * * 当前版本:1.0 * 作 者:田鑫 * 完成日期:2014年3月29日 */ #include<iostream> #include "stack.h" bool InitStack(SqStack &s){ //构造一个空栈 s.base = (ElemType*) malloc(STACK_INIT_SIZE*sizeof(ElemType)); if( s.base == NULL ) { std::cout << "内存分配失败:\n"; return false; } s.top = s.base; //堆栈为空时,栈顶指针和栈底指针都指向栈底 s.stacksize = STACK_INIT_SIZE; return true; } bool Push(SqStack &s, ElemType e){ //将元素e压入栈顶 if(s.top - s.base >= STACK_INIT_SIZE) //判断堆栈是否还有剩余空间 { s.base = (ElemType*) realloc( s.base, (s.stacksize+STACK_INCREMENT) * sizeof(ElemType) ); if( s.base == NULL ) { std::cout << "内存分配失败:\n"; return false; } s.top = s.base + s.stacksize; s.stacksize += STACK_INCREMENT; } *s.top = e; ++s.top; return true; } bool Pop(SqStack &s, ElemType & e){ //若栈不空,则删除s的栈顶元素,用e返回其值,并返回true;否则返回false if(s.top == s.base) return false; --s.top; e = *s.top; return true; } bool StackEmpty(SqStack &s){ if(s.base == s.top) return true; else return false; }
原文:http://blog.csdn.net/xinshen1860/article/details/22517569