国产成人精品三级麻豆,色综合天天综合高清网,亚洲精品夜夜夜,国产成人综合在线女婷五月99播放,色婷婷色综合激情国产日韩

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > 一個數(shù)據(jù)結(jié)構(gòu)中棧的應(yīng)用

一個數(shù)據(jù)結(jié)構(gòu)中棧的應(yīng)用 時間:2018-08-16      來源:未知

在linux的shell命令下不知道有沒有同學使用dc命令。這是一個算數(shù)命令。相信同學們對這種算式都比較熟悉:(1 + 2)* 3結(jié)果等于9 dc命令也是一種算式表達——壓棧式算術(shù)運算。

當輸入dc命令后我們像上圖那樣輸入,特點是遇到運算符對前面兩個數(shù)進行運算,然后再講結(jié)果返回。那么上面的算式就是1和2相加后結(jié)果返回,然后遇到乘法后,再將1和2相加的結(jié)果與3相乘,摁p輸出結(jié)果。

仔細看一下這個過程,是不是和壓棧很像。過程大體是這樣的:

1.數(shù)字依次進棧

2.遇到運算符將處于棧頂?shù)膬蓚元素出棧,根據(jù)運算符計算出結(jié)果,然后再將結(jié)果壓棧。

3.依次進行指導(dǎo)“p”將結(jié)果輸出。

當然,這其中還有很多細節(jié),比如后棧里只有單個數(shù)字,則自己和自己運算等。我們這里先不考慮這些。只是實現(xiàn)上面簡單的功能,做個拋磚引玉,供同學們繼續(xù)思考深化。

我們看一下下面的程序:

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;

}

在程序中我們用直接從命令行輸入的方式。具體的算法就是我們上面描述的那樣里面運用的函數(shù)棧的創(chuàng)建(stack_create),出棧(push),壓棧(pop)等就是我們課上所講的基礎(chǔ)程序。之前也很多同學提出,基礎(chǔ)程序熟練了可是就是不知道怎么用。其實在實際中棧和隊列的應(yīng)用還是非常多的,所以希望同學們對所學的多去嘗試使用才能熟練。

下面是一個簡單的運行效果,同學們可以自己嘗試完善一下:

上一篇:棧及其應(yīng)用

下一篇:C語言中常見的筆試題

熱點文章推薦
華清學員就業(yè)榜單
高薪學員經(jīng)驗分享
熱點新聞推薦
前臺專線:010-82525158 企業(yè)培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權(quán)所有 ,京ICP備16055225號-5,京公海網(wǎng)安備11010802025203號

回到頂部