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;
    }
    

      

    运行结果:

      

  • 相关阅读:
    【先定一个小目标】在Windows下的安装Elasticsearch
    【先定一个小目标】Windows下Redis的安装使用
    【.net core 跨平台】第一步 在Ubuntu16.04 配置.net core环境
    Caf.CMS是一个免费的、 开源,功能齐全的CMS
    使用MicroService4Net 快速创建一个简单的微服务
    记录-div绝对定位针对手机浏览器的区别
    OS X 下不通过Homebrew安装ASP.NET 5开发环境
    结合谷歌地图多边形(polygon)与Sql Server 2008的空间数据类型计算某个点是否在多边形内的注意事项
    插入排序
    修复lvm的逻辑卷
  • 原文地址:https://www.cnblogs.com/jerryleesir/p/13336350.html
Copyright © 2011-2022 走看看