怎样将字符串读入栈c语言程序,栈的操作--将二进制数转化为十进制数输出-C语言教程...

//  这是一个“栈”操作的例子源码:

#include"stdio.h"#include"stdlib.h"//exit(0),malloc()

#include"math.h"//pow(int a ,int b);a的b次方

/*

将PC键盘输入的二进制数转化为十进制数输出,以“#”作为结束符;

将键盘输入的0或1视为字符,ACSII码字符0对应的十六进制数是0x48

*/

#define STACK_INIT_SIZE 20

#define STACKINCRESIZE  10

typedef char ElemType;//创建一个类型,下面凡事ElemType都代表char类型

//声明一个栈类型数据结构,元素是栈的3个基本要素

struct qstack

{

ElemType  *top; //栈顶指针,字节指针

ElemType  *base; //栈底指针

int stacksize; // 栈的容量

};

//通过这个函数将栈的三要素进行初始化

void Stack_Iinit(qstack *s)

{

s->base=(ElemType *)malloc(STACK_INIT_SIZE*sizeof(ElemType));

if(!s->base)//如果内存分配失败

{

printf("内存分配失败!");

exit(0);//

}

s->top=s->base; //

s->stacksize = STACK_INIT_SIZE;//

}

void push(qstack *s,ElemType e)//注意传入的类型

{

if(s->top-s->base >= s->stacksize )//说明栈已经满了

{

s->base=(ElemType *)realloc(s->base,(STACK_INIT_SIZE+STACKINCRESIZE)*sizeof(ElemType));

//重新分配空间,注意空间加大了

}

*(s->top)=e;//

s->top++;

}

void pop(qstack *s,ElemType *e)//将出栈数据放在e中,所以形参用指针为宜

{

if(s->top==s->base)//

{

return;

}

*e=*--(s->top);//注意!括号不要搞错!否则结果出错!

}

//

int StackLen(qstack *s)

{

return (s->top-s->base);//栈的长度

}

//注意:用键盘输入“0”和“1”字符时,以“#”结束。比如输入:“1110#”按回车键就可以得出答案

void main()

{

qstack s;

ElemType c;

int i,len,sum=0;

Stack_Iinit(&s);

printf("请输入0或1字符,以#作为结束符\n");

scanf("%c",&c);//注意!本句表示一次输入一个字符

/*

注意:比如输入“1110010#”再按下回车键,字符串“1110010#”就以一次一个字符的顺序输入到PC键盘缓冲区即入栈;

出栈时是以“后进先出”的顺序出栈,刚好最后入栈的字符就是二进制的最低位。对于栈的操作一定要注意入栈出栈顺序

*/

while(c!='#')

{

push(&s,c);

scanf("%c",&c);//这里为什么还要此句呢?因为scanf()一次只能输入一个字符,所以必须循环输入

}

getchar();//改变键盘输入缓存指针,即将回车键读出来,这样可以避免“\r”字符(回车键)输出

len= StackLen(&s);

printf("当前栈的容量是:%d\n",len);

for(i=0;i

{

pop(&s, &c );

sum = sum + (c-48)*pow(2,i);//48对应ACSII码字符“0”;(c-48)的值要么是0要么是1字符

}

printf("转换的十进制数是:%d\n",sum);

}

/-----------------GKXW---------2015年11月14日 00:03:08--//

栈(stack)是一种“后进先出”的数据结构,属于线性表的一种,只能在一头操作。在现实生活中应用很大,多学习一种数据结构就意味着多一种能力。本来是要分析uc/os-ii操作系统的,但是由于在学习STeMwin的时候涉及到文件系统的操作,所以就专门学习了C语言文件部分内容。计划不得不推迟了。程序好不好关键就看数据结构用得合不合理,编程实际上就是数据的怎样存储,以什么数据结构存储的问题。《数据结构与算法》是修炼内功的,是对计算机语言学习的一种提高。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值