zoukankan      html  css  js  c++  java
  • 数据结构C语言实现----栈的实例

    用栈的知识,编写一个程序,输入二进制,输出十进制

    注意点:

        1.在主函数里别忘了先创建一个栈,在进行入栈操作

        2.转换过程会用到一个循环,需要用到栈的实际长度作为条件,要在进入循环前先把长度计算出来存入到变量len中,而不能用stack.top - stack.base来代替len,因为在循环中需要出栈操作,所以(stack.top - stack.base)是变化的

    代码如下:

    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    /******************************************************
     * 做一个入栈操作,把一串二进制数字压入栈里
     * 之后应该是一个出栈操作,包括在一个大循环中
     * 第一个出栈的乘以2^0,第二个出栈的乘以2^1.....以此类推
     * 把每个二次幂的结果求和就得到十进制
     * **************************************************/
    
    typedef struct 
    {
        int *base;
        int *top;
        int stacksize;
    }sqStack;
    //////////////////////////////////////////////////////
    //创建栈
    #define STACK_INIT_SIZE 100
    void initstack(sqStack *stack)
    {
        stack->base = (int*)malloc( STACK_INIT_SIZE * sizeof(int));
        if (!stack->base)
        {
            exit(0);
        }
        stack->top = stack->base;
        stack->stacksize = STACK_INIT_SIZE;
    }
    /////////////////////////////////////////////////////////
    //入栈操作
    #define STACK_MORE 10
    void Push(sqStack *stack , int c)
    {
        if (stack->top - stack->base > stack->stacksize)
        {
            stack->base = (int*)realloc(stack->base , (stack->stacksize + STACK_MORE) * sizeof(int));
            if (!stack->base)
            {
                exit(0);
            }
            stack->top = stack->base + stack->stacksize;
            stack->stacksize = stack->stacksize + STACK_MORE;
        }
        *(stack->top)=c;
        stack->top++;
    }
    ////////////////////////////////////////////////////////////
    //出栈操作
    void Pop(sqStack *stack , int *c)
    {
        if (stack->base == stack->top)
        {
            return;
        }
        *c = *--(stack->top);
    }
    
    int main()
    {
        sqStack stack;
        int c;
        initstack(&stack);//创建一个栈
        printf("请输入需要转换的二进制:");
        while ((c = getchar()) != '
    ')//读取输入的二进制字符串,输入回车停止
        {
            if (c!='
    ')//防止回车符压进栈中
            {
                Push(&stack , c);
            }
        }
        int sum = 0;//十进制结果
        int len = stack.top - stack.base;//计算栈的实际长度
        for (size_t i = 0; i < len; i++)
        {
            Pop(&stack, &c);//注意这边出栈操作后栈的长度会减小,所以前面用一个len,而不是直接用stack.top - stack.base
            sum = sum + (c-48)* pow(2,i);//这边我也不知道为什么变量c从int类型变成了char型,所以减去48
        }
        printf("对应的十进制为:%d",sum);
        return 0;
    }
    

      

    运行结果:

      

  • 相关阅读:
    Python基础语法 第2节课(数据类型转换、运算符、字符串)
    python基础语法 第5节课 ( if 、 for )
    python基础语法 第4节课 (字典 元组 集合)
    Python基础语法 第3节课 (列表)
    A. Peter and Snow Blower 解析(思維、幾何)
    C. Dima and Salad 解析(思維、DP)
    D. Serval and Rooted Tree (樹狀DP)
    C2. Balanced Removals (Harder) (幾何、思維)
    B. Two Fairs 解析(思維、DFS、組合)
    D. Bash and a Tough Math Puzzle 解析(線段樹、數論)
  • 原文地址:https://www.cnblogs.com/jerryleesir/p/13336350.html
Copyright © 2011-2022 走看看