当前位置: 首页 > news >正文

C语言顺序栈实现

/*数序栈*/
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define SElemType char
#define STACK_INIT_SIZE   100
#define STACK_INCREMENT 10
#define OK 1
#define ERROR -1
#define Status int
#define OVER -1
/*栈空 top == base
**栈满 top-base = stacksize
**
*/
typedef  struct
{
    SElemType *base;
    SElemType *top;
    int stacksize;
    int length;
}SqStack;
/*数序栈结构*/

/*栈的初始化*/
Status  initSqStack(SqStack *s)
{
    s->base = (SElemType*)malloc(STACK_INIT_SIZE * sizeof(SElemType));
    if(! s->base) return OVER;
    s->top = s->base;
    s->stacksize = STACK_INIT_SIZE;
    s->length = 0;
    return OK;
}
Status pushSqStack(SqStack *s,const SElemType item)
{
    /* stack full*/
    if(s->top - s->base == STACK_INIT_SIZE)
    {
        s->base = (SElemType*)realloc(s->base,(STACK_INCREMENT+STACK_INIT_SIZE)*sizeof(SElemType));
        if(!s->base) return OVER;
        s->top = s->base+ s->stacksize;
        s->stacksize += STACK_INCREMENT;
    }
    *s->top++ = item;

    return OK;
}

Status popSqStack(SqStack *s,SElemType *item)
{
    if(s->top == s->base) return ERROR;
    *item = *--(s->top);
    return OK;
}
/*获取栈长度*/
int lengthSqStack(SqStack *s)
{
    return s->top-s->base;
}

int main(void)
{
    SElemType data;
    SqStack s;
    int len,i,sum =0;
    printf("Please input a binary digit\n");
    initSqStack(&s);
    scanf("%c",&data);
    while(data !='#')
    {
        pushSqStack(&s,data);
        scanf("%c",&data);
    }
    getchar();
    len = lengthSqStack(&s);
    for(i = 0;i<len;i++)
    {
        popSqStack(&s,&data);
        printf("%c",data);
        sum += (data-48)*pow(2,i);
    }
    printf("Decimal is :%d.\n",sum);
    getchar();

    return 0;
}

 

转载于:https://www.cnblogs.com/plxx/p/3489187.html

相关文章:

  • 大整数相乘
  • 32位机器的LowMemory
  • hadoop的序列化和压缩
  • linq转载
  • SpeedPHP关于一对一和一对多关联关系的建立 model建立
  • oracle 10g 学习之.NET使用Oracle数据库(14)
  • nm 命令 程序符号信息查看
  • HBase之八--(1):HBase二级索引的设计(案例讲解)
  • 记录上锁
  • Markdown学习笔记
  • 《需求工程》阅读随笔-1.做什么和怎么做
  • curl_errno错误码说明
  • 《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇03:子弹发射》
  • 交换机的link-dependency链路依赖功能
  • 打开FTP服务器上的文件夹时发生错误,请检查是否有权限访问该文件夹
  • CAP 一致性协议及应用解析
  • Git初体验
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • Redux系列x:源码分析
  • RxJS: 简单入门
  • 程序员该如何有效的找工作?
  • 面试遇到的一些题
  • 移动端 h5开发相关内容总结(三)
  • 应用生命周期终极 DevOps 工具包
  • 选择阿里云数据库HBase版十大理由
  • #14vue3生成表单并跳转到外部地址的方式
  • (C语言)字符分类函数
  • (笔试题)分解质因式
  • (定时器/计数器)中断系统(详解与使用)
  • (转)Scala的“=”符号简介
  • (转)大型网站的系统架构
  • (转)重识new
  • .gitignore文件---让git自动忽略指定文件
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境
  • .NET框架
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • /run/containerd/containerd.sock connect: connection refused
  • @Data注解的作用
  • @javax.ws.rs Webservice注解
  • @RequestBody详解:用于获取请求体中的Json格式参数
  • @synthesize和@dynamic分别有什么作用?
  • [ 蓝桥杯Web真题 ]-Markdown 文档解析
  • [04]Web前端进阶—JS伪数组
  • [1]-基于图搜索的路径规划基础
  • [100天算法】-目标和(day 79)
  • [1159]adb判断手机屏幕状态并点亮屏幕
  • [20171101]rman to destination.txt
  • [C进阶] 数据在内存中的存储——浮点型篇
  • [GXYCTF2019]BabySQli1
  • [Java][Liferay] File system in liferay
  • [leetcode 数位计算]2520. 统计能整除数字的位数
  • [LeetCode] 197. 上升的温度
  • [NOIP 2003] 栈(三种方法:DP、数论、搜索)
  • [POI2009]WIE-Hexer