数据结构|用栈实现十进制转换成二进制(实验3.5)

来源:互联网 发布:怎么自己注册域名 编辑:程序博客网 时间:2024/05/21 19:24

一、实验目的

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、总体收获和不足,疑问等。

  本次试验较为简单,因为实验内容较少,且对书本知识掌握得有点熟悉。但本次试验还是发现了自己的不足之处。经过改进、询问同学,成功完成了实验。收获颇丰。总的来说,我对理论知识有了更充分的理解,也能较大程度明白运行原理。