数据结构实验之栈与队列一:进制转换

来源:互联网 发布:蓝鸟中文编程 编辑:程序博客网 时间:2024/06/03 23:38

数据结构实验之栈与队列一:进制转换

Problem Description
输入一个十进制非负整数,将其转换成对应的 R (2 <= R <= 9) 进制数,并输出。
Input
第一行输入需要转换的十进制非负整数;
第二行输入 R。
Output
输出转换所得的 R 进制数。
Example Input
1279
8
Example Output
2377

思路:进制转换–辗转相除,倒序取余。所以把取余的依次存在栈中(入栈),全存完,在出栈(实现倒序过程–后进先出)

#include <stdio.h>#include <stdlib.h>#include <bits/stdc++.h>#define stackmax 10000  //存储空间初始分配量#define stacknum 10000  //存储空间分配增量using namespace std;typedef int selemtype;typedef struct{    selemtype *base; //栈底指针    selemtype *top;  //栈顶指针    int stacksize;} sqstack;int Initstack(sqstack &S){    S.base=(selemtype *)malloc(stackmax*sizeof(selemtype));    if (! S.base)        exit(0);  //存储分配失败    S.top=S.base;  //空栈条件    S.stacksize=stackmax;  //栈的存储空间    return 1;}int push(sqstack &S,int e)  //创建一个栈{    if(S.top-S.base >= S.stacksize)// 当前存储空间已满,增加分配    {        {            S.base = (selemtype *)realloc(S.base,(S.stacksize+stacknum)*sizeof(selemtype));            if (! S.base ) return 0; // 存储分配失败            S.top = S.base + S.stacksize;            S.stacksize += stacknum;  //增加存储容量        }    }*S.top++=e;    return 1;}void  conversion(sqstack &S, int n, int r)  //进制转换{    int t;    while(n)    {        t=n%r;        n=n/r;        push(S,t);    }}void put(sqstack &S)  //出栈{    while(S.top>S.base)    {        cout<<*(S.top-1);        S.top--;    }}int main(){    int n,r;    cin>>n>>r;    sqstack S;    Initstack(S);    if(n==0)        printf("0\n");    else    {        conversion(S,n,r);        put(S);    }    return 0;}
阅读全文
0 0
原创粉丝点击