数据结构栈之进制转换

来源:互联网 发布:草东没有派对知乎 编辑:程序博客网 时间:2024/05/16 04:40

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

Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic

Problem Description

输入一个十进制非负整数,将其转换成对应的 R (2 <= R <= 9) 进制数,并输出。

Input

第一行输入需要转换的十进制非负整数;
第二行输入 R。

Output

输出转换所得的 R 进制数。

Example Input

12798

Example Output

2377
代码:
C语言中,*表示指针。&表示取址。定义函数时SqStack *S为一个结构体指针,所以实参&S,传递的时结构体的地址C语言规定,地址必须用指针来接收。小知识点:空间不够用realloc函数来开辟空间
#include <stdio.h>#include <stdlib.h>#include <string.h>#define STACKINCREMENT 10000     //存储空间分配增量#define STACKINITSIZE 10000    //存储空间初始分配量typedef char SElemType;typedef struct{    SElemType *base;//定义栈底指针;    SElemType *top;//定义暂定指针,    int stacksize;//当前已分配的存储空间}SqStack;int InitStack(SqStack *S)  //初始化栈{    S->base = (SElemType *)malloc(STACKINITSIZE*sizeof(SElemType));//为栈底开辟空间    if(!S->base)        return 0;//如果开辟空间失败,返回为0;    S->top = S->base;    S->stacksize = STACKINITSIZE;//S->stacksize为开辟的空间    return 1;}int Push(SqStack *S,char e)//入栈函数{    if(S->top - S->base>=S->stacksize)//先判断空间是否足够    {        S->base = (SElemType *)realloc(S->base, (S->stacksize + STACKINCREMENT)*sizeof(SElemType));//新开的空间,用realloc函数        if(!S->base)            return 0;//如果创建失败,返回0        S->top = S->base + S->stacksize;//再次确定S->top的地址,防止S->base改变。而丢失了S->top的地址        S->stacksize = S->stacksize + STACKINCREMENT;//更新S->stacksize    }    *(S->top) = e;//进行进栈操作    S->top++;    return 1;}int Pop(SqStack *S)//出栈函数{  while(S->top != S->base)//出栈到底返回为0        {            printf("%d",*(S->top-1));        S->top--;        }      return 1;}int main(){   SqStack S;   InitStack(&S);//记得要初始化栈!!!第二次做的时候忘初始化栈一直做不出来   int m,n,e;   scanf("%d%d",&m,&n);   if(m==0)    printf("0");   while(m)   {       e = m%n;       m = m/n;       Push(&S,e);    }    Pop(&S);   printf("\n");    return 0;}

原创粉丝点击