ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

C语言数据结构_栈的实例分析

2022-01-27 09:03:10  阅读:178  来源: 互联网

标签:实例 sqStack 二进制 ElemType top C语言 base stacksize 数据结构


利用栈的数据结构,将二进制数转换为十进制数。

由于栈具有后进先出的特性,因此可以用栈很方便地实现二进制转换为十进制。

#include "stdio.h"
#include "math.h"
#define STACK_INIT_SIZE 20
#define STACKINCREMENT 10

typedef char ElemType;
typedef struct{
    ElemType *base;
    ElemType *top;
    int stacksize;
}sqStack;

initStack(sqStack *s)
{
    //内存中开辟一段连续空间作为栈空间,首地址赋给s->base
    s->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType));
    if(!s->base) exit(0);       //分配空间次数
    s->top = s->base;       //最开始,栈顶就是栈底
    s->stacksize = STACK_INIT_SIZE;         //最大容量为STACK_INIT_SIZE
}

Push(sqStack *s, ElemType e){
    if(s->top - s->base >= s->stacksize){
        //栈满,追加空间
        s->base = (ElemType *)realloc(s->base, (s->stacksize * STACKINCREMENT)*sizeof(ElemType));
        if(!s->base) exit(0);       //存储分配失败
        s->top = s->base + s->stacksize;
        s->stacksize = s->stacksize + STACKINCREMENT;       //设置栈的最大容量
    }
    *(s->top) = e;          //放入数据
        s->top++;
}

Pop(sqStack *s, ElemType *e){
    if(s->top == s->base) return;
        *e = *--(s->top);
}

int StackLen(sqStack s){
    return (s.top - s.base);
}

main()
{
    ElemType c;
    sqStack s;
    int len, i, sum=0;
    printf("Please input a Binary digit\n");

    initStack(&s);          //创建一个栈,用来存放二进制字符串
    //输入0/1字符表示的二进制数,以#结束
    scanf("%c", &c);
    while(c != '#')
    {
        Push(&s, c);
        scanf("%c", &c);
    }
    getchar();
    len = StackLen(s);          //得到栈中的元素个数,即二进制数的长度

    for(i=0; i<len; i++){
        Pop(&s, &c);
        sum = sum + (c-48) * pow(2, i);     //转换为十进制
    }
    printf("Decimal is %d\n", sum);
    getche();			//该函数一般在linux下使用
}

标签:实例,sqStack,二进制,ElemType,top,C语言,base,stacksize,数据结构
来源: https://www.cnblogs.com/zonkidd/p/15848438.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有