日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

栈的一些小小应用

發(fā)布時(shí)間:2025/5/22 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 栈的一些小小应用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

昨天剛實(shí)現(xiàn)了棧的一些基本操作,今天就來(lái)實(shí)現(xiàn)一點(diǎn)棧的應(yīng)用把!


首先,寫(xiě)一點(diǎn)比較簡(jiǎn)單的:

1.逆波蘭表達(dá)式的計(jì)算。

? ??在通常的表達(dá)式中,二元運(yùn)算符總是置于與之相關(guān)的兩個(gè)運(yùn)算對(duì)象之間,這種表示法也稱(chēng)為中綴表示。逆波蘭表達(dá)式也稱(chēng)為后綴表達(dá)式。比如:

??? 兩種表達(dá)式如果在程序中運(yùn)行時(shí),后綴表達(dá)式不需要考慮符號(hào)優(yōu)先級(jí)的問(wèn)題。

現(xiàn)在通過(guò)一個(gè)程序去計(jì)算一個(gè)簡(jiǎn)單的后綴表達(dá)式:

#pragma?once#include?<iostream> #include?<assert.h> #include?<stack> using?namespace?std;enum?Type {OP_NUM,//數(shù)字OP_SYMBOL,//運(yùn)算符 };enum?SYMBOL {ADD,SUB,MUL,DIV, };struct?Cell {Type?_type;//類(lèi)型(1.數(shù)字?2.運(yùn)算符)int?_value; };int?CountSymbol(Cell?a[],?size_t?size) {assert(a);stack<int>?s;for?(size_t?i?=?0;?i?<?size;?i++)//依次讀取每個(gè)數(shù)據(jù){if?(a[i]._type?==?OP_NUM){s.push(a[i]._value);}else{//取出運(yùn)算符前面的兩個(gè)數(shù)字進(jìn)行計(jì)算int?right?=?s.top();s.pop();//棧的特性,只能pop一個(gè)后去下一個(gè)數(shù)int?left?=?s.top();s.pop();switch?(a[i]._value){//把計(jì)算結(jié)果壓入棧中case?ADD:s.push(left?+?right);break;case?SUB:s.push(left?-?right);break;case?MUL:s.push(left?*?right);break;case?DIV:s.push(left?/?right);break;}}}return?s.top(); }void?TestSymbol() {//12*(3+4)-6+8/2?=?82//12?3?4?+?*?6?-?8?2?/?+???逆波蘭表達(dá)式Cell?a[]?={{OP_NUM,12},{OP_NUM,?3},{OP_NUM,4},{OP_SYMBOL,ADD},{OP_SYMBOL,MUL},{OP_NUM,6},{OP_SYMBOL,SUB},{OP_NUM,8},{OP_NUM,2},{OP_SYMBOL,DIV},{OP_SYMBOL,ADD},};int?ret?=?CountSymbol(a,?sizeof(a)?/?sizeof(a[0]));cout?<<?"ret="?<<?ret?<<?endl; }

在這個(gè)程序中可以看到應(yīng)用了棧的一個(gè)重要特性,“后進(jìn)先出”

2.迷宮是一個(gè)很長(zhǎng)久的話(huà)題,今天我就用代碼來(lái)實(shí)現(xiàn)它。

迷宮問(wèn)題有一個(gè)很重要的點(diǎn),就是“回溯”,顧名思義,就是沿著走過(guò)的路依次往回走。

為了簡(jiǎn)單起見(jiàn),直接寫(xiě)一個(gè)迷宮,定義為“Maze.txt”文件

? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (0表示通路,1表示墻)

把走過(guò)的路的坐標(biāo)保存在一個(gè)棧中,當(dāng)無(wú)路可走的時(shí)候,從棧中依次pop出的坐標(biāo)回溯,直到找到正確的路或者沒(méi)有通路為止!

代碼實(shí)現(xiàn)如下:

#pragma?once#pragma?once #define?_CRT_SECURE_NO_WARNINGS?1#define?N?10#include?<iostream> #include?<stack> #include?<assert.h>using?namespace?std;struct?Pos//記錄坐標(biāo) {int?_row;//行int?_col;//列 };void?GetMaze(int?*?a,?int?n)//讀取迷宮 {FILE?*?fout?=?fopen("Maze.txt",?"r");assert(fout);for?(int?i?=?0;?i?<?n;?i++){for?(int?j?=?0;?j?<?n;?){char?ch?=?fgetc(fout);if?(ch?==?'0'?||?ch?==?'1'){a[i*n?+?j]?=?ch?-?'0';j++;//有數(shù)據(jù)時(shí),才往二維數(shù)組中存,所以j++放在這里}else{continue;}}}fclose(fout); }void?printMaze(int?*?a,?int?n)//輸出迷宮 {for?(int?i?=?0;?i?<?n;?i++){for?(int?j?=?0;?j?<?n;?j++){cout?<<?a[i*n?+?j]?<<?"?";}cout?<<?endl;} }bool?CheckIsAccess(int?*?a,?int?n,?Pos?next)//檢查是否通行 {assert(a);if?(next._row?>=?0?&&?next._row?<?n&&next._col?>=?0?&&?next._col?<?n&&a[next._row*n?+?next._col]?==?0)//?0?表示可以通行{return?true;}else{return?false;} }bool?MazePath(int?*a,?int?n,?const?Pos?&?entry,?stack<Pos>&?path) {Pos?cur?=?entry;path.push(cur);while?(!path.empty())//棧空的時(shí)候返回起點(diǎn){a[cur._row*n?+?cur._col]?=?2;//走過(guò)的路標(biāo)記為2if?(cur._row?==?n?-?1)//判斷是否到出口{return?true;}//向上Pos?next?=?cur;next._row--;if?(CheckIsAccess(a,?n,?next))//判斷{cur?=?next;path.push(cur);//走過(guò)的坐標(biāo)push進(jìn)棧continue;}//向下next?=?cur;//每次判斷的時(shí)候重新賦值給nextnext._row++;if?(CheckIsAccess(a,?n,?next)){cur?=?next;path.push(cur);continue;}//向左next?=?cur;next._col--;if?(CheckIsAccess(a,?n,?next)){cur?=?next;path.push(cur);continue;}//向右next?=?cur;next._col++;if?(CheckIsAccess(a,?n,?next)){cur?=?next;path.push(cur);continue;}//無(wú)路可走a[cur._row*n?+?cur._col]?=?3;path.pop();if?(!path.empty()){cur?=?path.top();}}return?false; }void?TestMaze() {int?a[N][N]?=?{};GetMaze((int?*)a,?N);printMaze((int?*)a,?N);stack<Pos>?path;Pos?entry?=?{?2,0?};MazePath((int?*)a,?N,?entry,?path);cout?<<?"結(jié)果"?<<?endl;printMaze((int?*)a,?N);}

輸出的結(jié)果是:

數(shù)字“2”表示通路。


歡迎各位大神吐槽。

轉(zhuǎn)載于:https://blog.51cto.com/10824050/1762816

總結(jié)

以上是生活随笔為你收集整理的栈的一些小小应用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 女人的天堂av在线 | 午夜在线观看一区 | 自拍偷拍21p | www色网站 | 欧美8888 | 久久久久成人精品无码中文字幕 | 欧美一区二区三区视频 | av香蕉 | 97国产在线观看 | 一区在线看| 最新日韩在线 | 亚洲www视频 | 最近中文字幕在线免费观看 | 久久婷婷综合国产 | 青青射 | 影音先锋每日资源 | 999国内精品永久免费视频 | 台湾佬美性中文网 | 欧美成人猛片aaaaaaa | 少妇人妻邻居 | 午夜视频在线 | 国产精品老牛影视 | 色噜噜视频 | 精品欧美一区二区精品少妇 | 国产乱真实合集 | 久久综合亚洲 | 色噜噜网站 | 天天操免费视频 | 18成人免费观看网站下载 | 国产精品人妻一区二区三区 | 国产精品久久久久久人妻精品动漫 | 97黄色片| 啪啪网站免费观看 | 久久久久久久久久影院 | 少妇又色又紧又爽又刺激视频 | 国产成人短视频在线观看 | 色屁屁 | 日本一级免费视频 | 国产精品ⅴa有声小说 | 亚洲欧美一区二区三 | 东方av在线免费观看 | 亚洲国产日韩精品 | 成人精品免费看 | 久久久久夜夜夜精品国产 | 国产专区一区二区 | 日本在线免费视频 | 日韩欧美中文字幕精品 | 香蕉在线网站 | 日韩电影在线观看一区二区 | 爱情岛av| 草逼网站 | 一级性视频 | 欧美性做爰毛片 | 老女人人体欣赏a√s | 在线观看亚洲网站 | 免费特级毛片 | 国产精品精品国产 | 国产午夜福利片 | 日韩在线二区 | 爱射综合| 精品99999| 青青草午夜 | 亚洲性生活网站 | 18女人毛片| 亚洲专区欧美 | 嫩模被强到高潮呻吟不断 | 久久三级 | 四虎永久在线精品免费一区二区 | 中文在线字幕免费观 | 日本久久久久久久久 | 99久国产 | 波多野结衣在线影院 | 成人免费网址 | 国产777| 乳孔很大能进去的av番号 | 国产黄色av | 午夜精品久久久久久久无码 | 国产精品免费看片 | 久久婷婷五月综合色国产香蕉 | 欧美一区二区三区不卡视频 | 在线成人中文字幕 | 天天插天天射天天干 | 日韩中文字幕一区二区 | 成人激情视频网 | 欧美第二页 | 一级特黄aaaaaa大片 | 亚洲综合视频在线观看 | 成人国产精品久久久 | 亚洲free性xxxx护士hd | 黄色xxxx| 国产夫妻在线 | 全程粗话对白视频videos | 欧美xxxx黑人又粗又长密月 | 亚洲欧美激情精品一区二区 | 欧洲美女粗暴牲交免费观看 | 久久精品www人人爽人人 | 亚洲精品高清在线观看 | 大奶子网站 | av撸撸在线 |