数据结构|用栈实现十进制转换成二进制(实验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、总体收获和不足,疑问等。
本次试验较为简单,因为实验内容较少,且对书本知识掌握得有点熟悉。但本次试验还是发现了自己的不足之处。经过改进、询问同学,成功完成了实验。收获颇丰。总的来说,我对理论知识有了更充分的理解,也能较大程度明白运行原理。
