“数据结构与算法”平时测验二

■ 堆栈ADT实现及应用

假设栈ADT的数据元素为整数,栈ADT的实现采用顺序存储结构。现要用栈来辅助完成任意非负十进制整数到Base(Base不大于35)进制的转换。部分代码已经给出,请补充完善栈溢出处理函数和主函数。 注意:只提交需要补充的函数,其他代码不允许自己重写和修改。

栈溢出处理函数overflowProcess:当栈满时,将栈的空间在原来基础上扩大1倍。

主函数: 输入一个非负十进制整数n及要转换的进制Base,输出其转换后的进制形式,以及长度。输出格式如下:

($...$)10=(#...#)Base 

 Length=转换进制后数的位数

其中$...$是输入的十进制数n,#...#是转换得到的Base进制数,如果转换后位码多于1位,则用大写字母A,B,...等表示,10-A, 11-B,......

例如,输入:1024 2

       输出:(1024)10=(10000000000)2

                  Length=11

再如,输入: 25 30

       输出:(25)10=(P)30          

                  Length=1

预置代码如下:

#include

using namespace std;

#include <stdio.h>

#include <stdlib.h>

typedef int ElemType;

class SeqStack

{ //顺序栈类定义

private:     

    ElemType *elements; //数组存放栈元素

    int top;             //栈顶指示器

    int maxSize;               //栈最大容量     

    void overflowProcess(); //栈的溢出处理

public:

     SeqStack(int sz);                    //构造函数

     ~SeqStack() { delete []elements; };        //析构函数

     void Push(ElemType x);    //进栈

     int Pop(ElemType &x);     //出栈

     int IsEmpty() const { return top == -1; }

     int IsFull() const { return top == maxSize-1; }

     int GetSize() const {return top+1;}

};

SeqStack::SeqStack(int sz)

{ elements=new ElemType[sz]; //申请连续空间

if(elements==NULL) {cout<<"空间申请错误!"<<endl;exit(1);}

else { top=-1;       //栈顶指示器指向栈底

           maxSize=sz;     //栈的最大空间

           };

};

/*


补充overflowProcess() 函数


*/

void SeqStack::Push(ElemType x)

{ //若栈满,则溢出处理,将元素x插入该栈栈顶

if (IsFull() == 1) overflowProcess();   //栈满

elements[++top] = x;       //栈顶指针先加1, 再元素进栈

};

int SeqStack::Pop(ElemType & x)

{//若栈不空,函数退出栈顶元素并将栈顶元素的值赋给x,

//返回true,否则返回false

if (IsEmpty() == 1) return 0;

x = elements[top--];           //先取元素,栈顶指针退1

  return 1;    //退栈成功

};

/*


补充mian()函数


*/
答案:

void SeqStack::overflowProcess()
{
    ElemType *a=new ElemType[maxSize*2];
    if(a==NULL) {exit(1);}
    else
    {
        for(int i=0;i<=top-1;i++)
            a[i]=elements[i];
        elements=a;
    }
}

int main()
{
    int num,base,cnt=0;
    cin>>num>>base;
    cout<<'('<<num<<")10=(";
    SeqStack wjy(100);
    while(num)
    {
        wjy.Push(num%base);
        num=num/base;
    }
    while(!wjy.IsEmpty())
    {
        int x;
        wjy.Pop(x);
        if(x>=0&&x<=9)cout<<x;
        else cout<<(char)(x-10+'A');
        cnt++;
    }
    cout<<')'<<base<<endl;
    cout<<"Length="<<cnt<<endl;
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值