数据结构|用栈实现十进制转换成二进制(实验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、总体收获和不足,疑问等。

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

经验分享 程序员 微信小程序 职场和发展