当前位置:首页 > 嵌入式培训 > 嵌入式学习 > 讲师博文 > 一个数据结构中栈的应用

一个数据结构中栈的应用 时间:2018-08-16      来源:未知

在linux的shell命令下不知道有没有同学使用dc命令。这是一个算数命令。相信同学们对这种算式都比较熟悉:(1 + 2)* 3结果等于9 dc命令也是一种算式表达——压栈式算术运算。

当输入dc命令后我们像上图那样输入,特点是遇到运算符对前面两个数进行运算,然后再讲结果返回。那么上面的算式就是1和2相加后结果返回,然后遇到乘法后,再将1和2相加的结果与3相乘,摁p输出结果。

仔细看一下这个过程,是不是和压栈很像。过程大体是这样的:

1.数字依次进栈

2.遇到运算符将处于栈顶的两个元素出栈,根据运算符计算出结果,然后再将结果压栈。

3.依次进行指导“p”将结果输出。

当然,这其中还有很多细节,比如后栈里只有单个数字,则自己和自己运算等。我们这里先不考虑这些。只是实现上面简单的功能,做个抛砖引玉,供同学们继续思考深化。

我们看一下下面的程序:

int main(int argc,const char *argv[])

{

int i = 0,x,y;

sqstack * sq;

if((sq = stack_create()) == NULL)

return -1;

while(*argv[i] != 'p')

{

if(*argv[i] <= '9' && *argv[i] >= '0')

push(sq,(*argv[i] - '0'));

if(*argv[i] == '+' || *argv[i] == '-' || *argv[i] == '*' || *argv[i] == '/')

{

y = pop(sq);

x = pop(sq);

printf("x: %d,y:%d\n",x,y);

switch(*argv[i])

{

case '+':

push(sq,x + y);

break;

case '-':

push(sq,x - y);

break;

case '*':

push(sq,x * y);

break;

default:

puts("intput error");

}

}

i++;

// printf("i:%d,%c\n",i,*argv[i]);

}

printf("%d\n",pop(sq));

return 0;

}

在程序中我们用直接从命令行输入的方式。具体的算法就是我们上面描述的那样里面运用的函数栈的创建(stack_create),出栈(push),压栈(pop)等就是我们课上所讲的基础程序。之前也很多同学提出,基础程序熟练了可是就是不知道怎么用。其实在实际中栈和队列的应用还是非常多的,所以希望同学们对所学的多去尝试使用才能熟练。

下面是一个简单的运行效果,同学们可以自己尝试完善一下:

上一篇:栈及其应用

下一篇:C语言中常见的笔试题

热点文章推荐
华清学员就业榜单
高薪学员经验分享
热点新闻推荐
前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2022 北京华清远见科技集团有限公司 版权所有 ,京ICP备16055225号-5京公海网安备11010802025203号

回到顶部