一、实验目的
熟练掌栈的结构特点,学会使用栈解决实际问题。实现十进制转二进制的功能。
二、实验内容
十进制转二进制的一个算法是不断的去余,再逆序拼接在一起。注意,是逆序,就是先算出来的后拼接。这个特性正和栈的先进后出相匹配,只要把取余的出来的数压栈,计算完之后,再逐个弹栈出来,拼接在一起,就可以完成这一功能。之前写过一个顺序栈的C++模板,这里给它增加一个函数方法。下面给给出了上一版本的顺序表模板连接。
顺序栈模板1.0
SeqStack.h 的public中添加:
// 进制转换
void Decimaltor(DataType n,int r);
SeqStack.cpp中添加上面方法的实现:
// 在之前模板基础上增加的功能
template <class DataType>
void SeqStack<DataType>::Decimaltor(DataType n,int r)
{
top = -1;
int k;
while(n != 0) {
k = n % r;
Push(k);
n = n / r;
}
while(top != -1) {
cout << Pop() << '\t';
}
}
main.cpp
#include <iostream>
#include "SeqStack.cpp"
using namespace std;
int main(int argc, const char * argv[]) {
SeqStack<int> stack = SeqStack<int>();
int n, r;
cout << "请输入一个十进制数字 : " << endl;
cin >> n;
cout << "需要转换成的进制 : " << endl;
cin >> r;
stack.Decimaltor(n, r);
cout << endl;
return 0;
}
三、心得和体会
一开始看到十进制转二进制这个题目出现在栈和队列的练习中,一开始我还是有疑惑的,这转换进制和这个数据结构有关系吗?可是仔细一想进制转换的算法,突然发现其中的相似的先进后出的特点。当然,我写的这个模板也可以应用于十进制转任意进制。这里就体现了C++模板的便利,栈的用途。
在空闲的时候更新的地方,大家可以捧一下场,嘿嘿~
新世界的大门 (๑•̀ㅂ•́)و✧