在老师开设的算法课上,老师要求用三种不同的方法做十进制转换,就用了以下三种,其实不止十进制转换,任何进制之间的转换都适用。
第一种方法:链栈的方式
#include<iostream>
#define MAXSIZE 10000
using namespace std;
typedef struct StackNode{
int data;
struct StackNode *next;
}StackNode,*LinkStack;
int InitStack(LinkStack &S)
{
S=NULL;
//return 1;
}
int Push(LinkStack &S,int &e)
{
StackNode *p;
p=new StackNode;
p->data=e;
p->next=S;
S=p;
return 1;
}
int Pop(LinkStack &S,int &e){
StackNode *p;
if(S==NULL)
{
cout<<"此栈已空,无法正常出栈;";
}
e=S->data;
p=S;
S=S->next;
delete p;
}
int main()
{
int n,e,i,j,q;
LinkStack S;
InitStack(S);
cout<<"请输入想要转换的十进制数:";
cin>>n;
while(n!=0)
{ q=n%8;
Push(S,q);
i++;
n=n/8;
}
for(j=0;j<i;j++)
{
Pop(S,e);
cout<<e;
}
}
第二种方式:顺序栈 非指针
#include<iostream>
#define MAXSIZE 10000
using namespace std;
typedef struct{
int *data;
int top;
}SqStack;
int InitStack(SqStack &S)
{
S.data=new int[MAXSIZE];
S.top=-1;
}
int Push(SqStack &S,int &e)
{
if(S.top==MAXSIZE-1)
{
return 0;
}
S.top++;
S.data[S.top]=e;
}
int Pop(SqStack &S,int &e){
if(S.top==-1)
{
return 0;
}
e=S.data[S.top];
S.top--;
}
int main()
{
int n,e,i,j,q;
SqStack S;
InitStack(S);
cout<<"请输入想要转换的十进制数:";
cin>>n;
while(n!=0)
{ q=n%8;
Push(S,q);
i++;
n=n/8;
}
for(j=0;j<i;j++)
{
Pop(S,e);
cout<<e;
}
}
第三种方法:顺序栈 指针
#include<iostream>
#define MAXSIZE 10000
using namespace std;
typedef struct{
int *base;
int *top;
int stacksize;
}SqStack;
int InitStack(SqStack &S)
{
S.base=new int[MAXSIZE];
if(!S.base)
{
exit(0);
}
S.top=S.base;
S.stacksize=MAXSIZE;
//return 1;
}
int Push(SqStack &S,int &e)
{
if(S.top-S.base==S.stacksize)
{
return 0;
}
*S.top++=e;
return e;
}
int Pop(SqStack &S,int &e){
if(S.top==S.base)
{
return 0;
}
e=*--S.top;
return e;
}
int main()
{
int n,e,i,j,q;
SqStack S;
InitStack(S);
cout<<"请输入想要转换的十进制数:";
cin>>n;
while(n!=0)
{ q=n%8;
Push(S,q);
i++;
n=n/8;
}
for(j=0;j<i;j++)
{
Pop(S,e);
cout<<e;
}
}
大家一起进步呀~