zoukankan      html  css  js  c++  java
  • 《栈的应用_版本1.2(实现了可以在一次运行后进行多次操作)》

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

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

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

    (2):如何实现用户输入一个十进制的数,用户可以在一个界面上直接实现这个十进制的数转化为二,八,十六进制。
    */

    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    #include<conio.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 //存储空间分配增量
    void menu();
    void TuiChu();
    void TenToTwo();
    void TenToEigth();
    void TenToSixteen();

    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)
    {
    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));
    }
    getch();
    system("cls");
    menu();
    }
    //定义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));
    }
    getch();
    system("cls");
    menu();
    }

    //定义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! ");
    }
    }
    getch();
    system("cls");
    menu();
    }

    //定义退出函数
    void TuiChu()
    {
    printf("系统已退出,请按任意键关闭本页面... ");
    exit(0);
    }

    //定义一个界面函数
    void menu()
    {
    printf(" ===================*进制转换*=================== ");
    printf(" 1->十进制转换为二进制 ");
    printf(" 2->十进制转换为八进制 ");
    printf(" 3->十进制装换为十六进制 ");
    printf(" 0->退出 ");
    printf(" ================================================ ");
    int n;
    printf("请输入你的选择:");
    scanf("%d",&n);
    switch(n)
    {
    case 1:TenToTwo();break;
    case 2:TenToEight();break;
    case 3:TenToSixteen();break;
    case 0:TuiChu();break;
    default:printf("enter data error! ");
    }
    }

    //定义主函数
    int main()
    {
    menu();
    printf(" ");
    return 0;
    }

     

  • 相关阅读:
    eclipse中的Invalid text string (xxx).
    在jsp文件中出现Unknown tag (c:out)
    eclipse 界面复原
    ecilpse 纠错插件
    Multiple annotations found at this line:- The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
    Port 8080 required by Tomcat v9.0 Server at localhost is already in use. The server may already be running in another process, or a system process may be using the port.
    调用第三方https接口
    调用第三方http接口
    创建带值枚举
    spring整合redis之Redis配置文件
  • 原文地址:https://www.cnblogs.com/sun-/p/4858455.html
Copyright © 2011-2022 走看看