/***链栈实现数制的转换***/
#include<iostream>
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
#define E 8
typedef struct SNode{
int data;
struct SNode *next;
}SNode,*LinkStack;
Status InitStack(LinkStack &S)
{
S = NULL;//构建一个空的栈,栈顶指针为空
return OK;
}
bool StackEmpty(LinkStack S)//判断栈是否为空
{
if(!S)
return true;
return false;
}
Status Push(LinkStack &S,int e)//入栈
{
SNode *p = new SNode;//建立一个新的节点
if(!p)
{
return OVERFLOW;
}
p->data = e;//新节点的数据域为e
p->next = S;//将新节点插入栈顶(栈的指针是从栈顶指向栈底的)
S = p;//栈顶指针向上移动一个
return OK;
}
Status Pop(LinkStack &S,int &e)
{
SNode *p;
if(!S)
return ERROR;
e = S->data;//将栈顶元素赋值给e
p = S;//修改栈顶指针
S = S->next;
delete p;//释放空间
return OK;
}
//算法3.8 数制的转换(链栈实现)
void conversion ( ) {
//对于输入的任意一个非负十进制数,打印输出与其等值的八进制数
LinkStack S;
int e,N;
InitStack(S); //构造一个空栈
cout<<"请输入被转换的数:";
cin>>N;//输入需要转换的数字
while(N)
{
Push(S,N%E);
N = N/E;
}
while(!StackEmpty(S))
{
Pop(S,e);
cout<<e;
}
}
#include<iostream>
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
#define E 8
typedef struct SNode{
int data;
struct SNode *next;
}SNode,*LinkStack;
Status InitStack(LinkStack &S)
{
S = NULL;//构建一个空的栈,栈顶指针为空
return OK;
}
bool StackEmpty(LinkStack S)//判断栈是否为空
{
if(!S)
return true;
return false;
}
Status Push(LinkStack &S,int e)//入栈
{
SNode *p = new SNode;//建立一个新的节点
if(!p)
{
return OVERFLOW;
}
p->data = e;//新节点的数据域为e
p->next = S;//将新节点插入栈顶(栈的指针是从栈顶指向栈底的)
S = p;//栈顶指针向上移动一个
return OK;
}
Status Pop(LinkStack &S,int &e)
{
SNode *p;
if(!S)
return ERROR;
e = S->data;//将栈顶元素赋值给e
p = S;//修改栈顶指针
S = S->next;
delete p;//释放空间
return OK;
}
//算法3.8 数制的转换(链栈实现)
void conversion ( ) {
//对于输入的任意一个非负十进制数,打印输出与其等值的八进制数
LinkStack S;
int e,N;
InitStack(S); //构造一个空栈
cout<<"请输入被转换的数:";
cin>>N;//输入需要转换的数字
while(N)
{
Push(S,N%E);
N = N/E;
}
while(!StackEmpty(S))
{
Pop(S,e);
cout<<e;
}
}