您的位置:首页 > 其它

十进制数任意转换2-9进制数——栈的应用

2014-08-15 09:08 225 查看
最近看了看数据结构,用栈的基本原理写了一个进制转换程序,在此分享以下!!

头文件stdafx.h如下

#pragma once

#include "targetver.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);

源文件3.2ds.cpp如下

// 3.2ds.cpp : 定义控制台应用程序的入口点。

//十进制数任意转换为2-9进制数

#include "stdafx.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 _tmain(int argc, _TCHAR* 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;

}

测试结果如下:



感悟:使用相除法,将除得的结果依次入栈,然后依次出栈,即可输出转换结果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: