《数据结构与算法A》实验2:栈的应用
描述
根据栈的特点,实现十进制到其他进制之间的转换,具体要求如下:
(1)利用栈进行十进制数与N进制(如二进制、八进制、十六进制)数据之间的转换;
(2)通过顺序栈记录进制转换的中间结果,该顺序栈有一个指示栈顶的变量top,实现栈的判空、判满、入栈、出栈、进制转换等操作;
(3)顺序栈类定义的参考代码如下:
const int MaxStackSize=10; //栈最大容量(根据问题修改该值)
class SeqStack {
DataType StackList[MaxStackSize];
int top; //指示栈顶的变量
public:
SeqStack( ); //构造函数
bool IsEmpty( ); //判断栈空
bool IsFull( ) ; //判断栈满
void Push(const DataType x); //入栈
DataType Pop( ); //出栈
void Clear( ) ; //置栈空
void Conversion(int M, int N); //进制转换,并输出结果
}; //SeqStack
输入
该题目有多组测试数据,每组测试数据占一行。例如:M N,其中M(1≤M≤10000)是待转换的十进制数,N(2≤N≤9)表示某种进制。当输入-1 -1时结束。
输出
输出对应进制的数值,每条数据占一行。
样例输入
1 9 9999 7 7 2 10000 2 156 8 15 5 10000 9 1234 6 780 4 6143 3 -1 -1
样例输出
1 41103 111 10011100010000 234 30 14641 5414 30030 22102112
代码
#include<iostream>
using namespace std;
const int MaxStackSize = 16;
class SeqStack {
int StackList[MaxStackSize];
int top;
public:
SeqStack();
bool IsEmpty();
bool IsFull();
void Push(const int x);
int Pop();
void Clear();
void Conversion(int M, int N);
};
//构造函数,初始化栈顶
SeqStack::SeqStack()
{
top = -1;
}
//判断栈是否为空
bool SeqStack::IsEmpty()
{
return top == -1;
}
//判断栈是否已满
bool SeqStack::IsFull()
{
return top != -1;
}
//入栈
void SeqStack::Push(const int x)
{
StackList[++top] = x;
}
//出栈
int SeqStack::Pop()
{
return StackList[top--];
}
//重置栈顶
void SeqStack::Clear()
{
top = -1;
}
//进制转换,并输出结果
void SeqStack::Conversion(int M, int N)
{
int base = M;
while (base)
{
this->Push(base%N);
base = base / N;
}
while (!(this->IsEmpty()))
{
cout << this->Pop();
}
cout << endl;
}
int main()
{
int M, N;
SeqStack s;
while (cin >> M >> N)
{
if (M == -1 && N == -1) break;
s.Conversion(M, N);
s.Clear();
}
}