• 《栈的应用_版本1.1(实现了如何十进制转十六进制)》



    /*
    栈的应用:
    1:需求:对于输入的任意一个非负十进制整数,打印输出与其等值的d进制数
    2:思路:利用动态栈的后进先出的特性.
    3: 步骤:

    4:心得与体会:
    (1):这两天一直在想一个问题,如何才能实现动态栈中的元素依次输出打印出来呢?
    解决的办法就是:先定义一个整形变量len,让len的初值为栈的长度(len = StackLength(s)),再用一个for循环
    然后利用出栈操作函数Pop(SqStack &s,SElemType &e),依次输出动态栈中的数据元素.
    (2):如何打印输出十六进制数的问题,在输出之前有一个case语句进行判断。

    5:尚未解决的问题:
    (1):如何实现带小数的十进制转换为二,八,十六进制。
    */

    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    #define TRUE 1
    #define FALSE 0
    #define OK 1
    #define ERROR 0
    #define INFEASIBLE -1
    #define OvERFLOW -2
    #define STACK_INIT_SIZE 100 //栈当前可使用的最大容量
    #define STACKINCREMENT 10 //存储空间分配增量

    typedef int Status; //函数结果状态类型
    typedef int SElemType; //数据类型
    typedef struct
    {
    SElemType *top;
    SElemType *base;
    int stacksize;
    }SqStack;

    //定义InitStack函数,创建一个空栈
    Status InitStack(SqStack &s)
    {
    s.base = (SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
    if(!s.base) exit(OvERFLOW);
    s.top = s.base;
    s.stacksize = STACK_INIT_SIZE;
    return OK;
    }

    //定义Push函数
    Status Push(SqStack &s,SElemType &e)
    {
    if(s.top - s.base >= s.stacksize)
    {//栈满,追加存储空间
    s.base = (SElemType *)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(SElemType));
    if(!s.base) exit(OVERFLOW);
    s.top = s.base + s.stacksize;
    s.stacksize += STACKINCREMENT;
    }
    *s.top = e;
    s.top++;
    return OK;
    }

    //定义Pop函数
    Status Pop(SqStack &s,SElemType &e)
    {
    if(s.top == s.base) return ERROR;
    --s.top;
    e = *s.top;
    return e;
    }

    //定义StackLength(SqStck &s)
    Status StackLength(SqStack &s)
    {
    //int len;
    //len = s.top - s.base;
    //return len;
    return (s.top - s.base);
    }

    //定义TenToTwo函数,实现十进制转换为二进制
    void TenToTwo()
    {
    SqStack s;
    int n,x,e,i,len;
    //调用InitStack(SqStack &s)函数,创建一个空栈
    InitStack(s);
    printf("栈已创建好! ");
    printf("请输入一个十进制的整数:");
    scanf("%d",&n);
    printf("十进制数%d的二进制等于:",n);
    while(n)
    {
    x = n%2;
    Push(s,x);
    n = n/2;
    }

    len = StackLength(s);
    for(i=len;i>0;i--)
    {
    printf("%d",Pop(s,e));
    }
    }
    //定义TenToEight函数,实现十进制转换为八进制
    void TenToEight()
    {
    SqStack s;
    int n,x,e,i,len;
    //调用InitStack(SqStack &s)函数,创建一个空栈
    InitStack(s);
    printf("栈已创建好! ");
    printf(" ");
    printf("请输入一个十进制的整数:");
    scanf("%d",&n);
    printf("十进制数%d的八进制等于:",n);
    while(n)
    {
    x = n%8;
    Push(s,x);
    n = n/8;
    }

    len = StackLength(s);
    for(i=len;i>0;i--)
    {
    printf("%d",Pop(s,e));
    }
    }//定义TenToSixteen函数,实现十进制转换为十六进制

    void TenToSixteen()
    {
    SqStack s;
    SElemType temp;
    int n,x,i,e,len;
    //调用InitStack(SqStack &s)函数,创建一个空栈
    InitStack(s);
    printf("栈已创建好! ");
    printf(" ");
    printf("请输入一个十进制的整数:");
    scanf("%d",&n);
    printf("十进制数%d的十六进制等于:",n);
    while(n)
    {
    x = n%16;
    Push(s,x);
    n = n/16;
    }
    len = StackLength(s);
    for(i=len;i>0;i--)
    {
    temp = Pop(s,e);
    switch(temp)
    {
    case 1:case 2:case 3:case 4:case 5:
    case 6:case 7:case 8:case 9:
    printf("%d",temp);break;
    case 10:printf("A");break;
    case 11:printf("B");break;
    case 12:printf("C");break;
    case 13:printf("D");break;
    case 14:printf("E");break;
    case 15:printf("F");break;
    default:printf("data error! ");
    }
    }
    }


    //定义主函数

    int main()
    {

    void TenToTwo();
    void TenToEight();
    void TenToSixteen();
    printf(" ===================*进制转换*=================== ");
    printf(" 1->十进制转换为二进制 ");
    printf(" 2->十进制转换为八进制 ");
    printf(" 3->十进制装换为十六进制 ");
    printf(" ================================================ ");
    char ch;
    printf("请输入你的选择:");
    scanf("%c",&ch);

    switch(ch)
    {
    case '1':TenToTwo();break;
    case '2':TenToEight();break;
    case '3':TenToSixteen();break;
    default:printf("enter data error! ");
    }
    printf(" ");
    return 0;
    }

     

  • 相关阅读:
    当Django模型迁移时,报No migrations to apply 问题时
    django--各个文件的含义
    django--创建项目
    1013. Battle Over Cities (25)
    1011. World Cup Betting (20)
    1009. Product of Polynomials (25)
    1007. Maximum Subsequence Sum (25)
    1006. Sign In and Sign Out (25)
    1008. Elevator (20)
    1004. Counting Leaves (30)
  • 原文地址:https://www.cnblogs.com/sun-/p/4858372.html
Copyright © 2020-2023  润新知