数据结构|用栈实现十进制转换成二进制(实验3.5)
一、实验目的
1、熟练掌栈的结构特点,掌握栈的顺序存储结构和实现。
2、学会使用栈解决实际问题。
二、实验内容
1、自己确定结点的具体数据类型和问题规模,建立一个顺序栈,实现栈的压栈和出栈操作。
三、实验步骤
1、依据实验内容分别说明实验程序中用到的数据类型的定义;
class SeqStack { private: int data[Size]; //数据存储数组 int top; public: SeqStack (){top=-1;} ~SeqStack (){} void Push(int x); //入栈操作 void Pop(); //出栈操作 };
2、相关操作的算法表达;
2.1、构造函数,初始化一个空栈
2.2、入栈操作函数:①.判断是否栈满,若是则抛出上溢错误,否则 ②.进行十进制向二进制的转换
2.3、出栈操作函数:①判断是否栈空,若是则抛出下溢错误,否则 ②先返回栈顶指针 top 指向的位置的值,再把栈顶指针 top 往下移一位,输出数值
3、完整程序;
由于结点元素类型不确定,因此采用C++模板机制。
源代码如下:
#include<iostream> using namespace std; const int Size = 50; class SeqStack { private: int data[Size]; //数据存储数组 int top; public: SeqStack (){top=-1;} ~SeqStack (){} void Push(int x); //入栈操作 void Pop(); //出栈操作 }; void SeqStack ::Push(int x) { top=-1; int y; int m=2; if(top==Size-1) throw "上溢"; while(x!=0) { y=x%m; data[++top]=y; x=x/m; }; } void SeqStack ::Pop() { if (top == -1) throw "下溢"; while(top!=-1) { int x=data[top--]; cout<<x; } } void main() { int i=1; int number; SeqStack a; do{ cout<<"请输入一个十进制整数!"<<endl; cin>>number; a.Push(number); a.Pop(); cout<<endl; cout<<"若需要继续转换,请输入1;否则请输入0!"<<endl; cin>>i; }while(i==1); }
4、总结、运行结果和分析。
①总结
在程序内输入对象,将对象入栈。
通过调用函数,实现入栈、出栈、进制转换等基本功能。
②运行结果如下:
5、总体收获和不足,疑问等。
本次试验较为简单,因为实验内容较少,且对书本知识掌握得有点熟悉。但本次试验还是发现了自己的不足之处。经过改进、询问同学,成功完成了实验。收获颇丰。总的来说,我对理论知识有了更充分的理解,也能较大程度明白运行原理。