十进制数任意转换2-9进制数--栈的应用
最近看了看数据结构,用栈的基本原理写了一个进制转换程序,在此分享一下,以便于后续查阅!
头文件nb.h如下
#include <stdio.h>
//#include <tchar.h>
#define stack_init_size 100
#define stackincreament 10
//定义栈的结构体
typedef struct
{
int *base;
int *top;
int stacksize;
}sqstack;
int initstack(sqstack &s);
int push(sqstack &s,int e);
int pop(sqstack &s,int &e);
源文件nb.cpp如下
// 3.2ds.cpp : 定义控制台应用程序的入口点。
//十进制数任意转换为2-9进制数
#include "nb.h"
#include "iostream"
using namespace std;
//初始化栈
int initstack(sqstack &s)
{
s.base=(int *)malloc(stack_init_size *sizeof(int));
if(!s.base)
{
cout<<"init error!!\n";
exit(0);
}else
s.top=s.base;
s.stacksize=stack_init_size;
return 0;
}
//入栈
int push(sqstack &s,int e){
if(s.top-s.base>=s.stacksize){
s.base=(int *)realloc(s.base,(s.stacksize+stackincreament)*sizeof(int));
if(!s.base)cout<<"relloc error!!\n";
s.top=s.base+s.stacksize;
s.stacksize+=stackincreament;
}
*s.top++=e;
return 0;
}
//出栈
int pop(sqstack &s,int &e)
{
if(s.top==s.base)
cout<<"pop error!!\n";
e=*--s.top;
return 0;
}
int main(int argc, char* argv[])
{
sqstack st;
initstack(st);//初始化栈
int num,divnum,modnum,j,e;
cout<<"请输入要转换的进制数(2-9):";
cin>>j;
cout<<"请输入原数据:";
cin>>num;
cout<<"转换结果如下:"<<endl;
cout<<"("<<num<<")10=(";
//将对j取余的数入栈
while(num){
push(st,num%j);
num=num/j;
}
//出栈并且输出结果
while(st.base!=st.top){
pop(st,e);
cout<<e;
}
cout<<")"<<j<<endl;
return 0;
}
测试结果如下:
$ g++ nb.cpp
$ ./a.out
请输入要转换的进制数(2-9):4
请输入原数据:23
转换结果如下:
(23)10=(113)4
$ ./a.out
请输入要转换的进制数(2-9):8
请输入原数据:85
转换结果如下:
(85)10=(125)8
思路: 使用相除法,将除得的结果依次入栈,然后依次出栈,即可输出转换结果。