棧的一些小小應用

2021-07-12 06:45:37 字數 2342 閱讀 6660

昨天剛實現了棧的一些基本操作,今天就來實現一點棧的應用把!

首先,寫一點比較簡單的:

1.逆波蘭表示式的計算。

在通常的表示式中,二元運算子總是置於與之相關的兩個運算物件之間,這種表示法也稱為中綴表示。逆波蘭表示式也稱為字尾表示式。比如:

現在通過乙個程式去計算乙個簡單的字尾表示式:

#pragma once

#include #include #include using namespace std;

enum type

;enum symbol

;struct cell

;int countsymbol(cell a, size_t size)

else

}} return s.top();

}void testsymbol()

, ,

, ,

, ,

, ,

, ,

, };

int ret = countsymbol(a, sizeof(a) / sizeof(a[0]));

cout <

}

在這個程式中可以看到應用了棧的乙個重要特性,「後進先出」。

2.迷宮是乙個很長久的話題,今天我就用**來實現它。

迷宮問題有乙個很重要的點,就是「回溯」,顧名思義,就是沿著走過的路依次往回走。

為了簡單起見,直接寫乙個迷宮,定義為「maze.txt」檔案

(0表示通路,1表示牆)

把走過的路的座標儲存在乙個棧中,當無路可走的時候,從棧中依次pop出的座標回溯,直到找到正確的路或者沒有通路為止!

**實現如下:

#pragma once

#pragma once

#define _crt_secure_no_warnings 1

#define n 10

#include #include #include using namespace std;

struct pos//記錄座標

;void getmaze(int * a, int n)//讀取迷宮

else

}} fclose(fout);

}void printmaze(int * a, int n)//輸出迷宮

cout <

bool checkisaccess(int * a, int n, pos next)//檢查是否通行

else }

bool mazepath(int *a, int n, const pos & entry, stack& path)

//向上

pos next = cur;

next._row--;

if (checkisaccess(a, n, next))//判斷

//向下

next = cur;//每次判斷的時候重新賦值給next

next._row++;

if (checkisaccess(a, n, next))

//向左

next = cur;

next._col--;

if (checkisaccess(a, n, next))

//向右

next = cur;

next._col++;

if (checkisaccess(a, n, next))

//無路可走

a[cur._row*n + cur._col] = 3;

path.pop();

if (!path.empty())

}return false;

}void testmaze()

; getmaze((int *)a, n);

printmaze((int *)a, n);

stackpath;

pos entry = ;

mazepath((int *)a, n, entry, path);

cout <

printmaze((int *)a, n);

}

輸出的結果是:

數字「2」表示通路。

歡迎各位大神吐槽。

本文出自 「不斷進步的空間」 部落格,請務必保留此出處

一些小小體會。。。

接觸sap 與 abap 已經有8個多月了 從當初什麼都不懂的小菜鳥,到如今,可以算是努力擺脫初級,在公升級前的掙扎,最後一段的衝刺。可笑的是,即使擺脫了初級,不再被稱為是菜鳥,離老鳥的尊稱還有很長一段距離。目前為止,浪費了不少時間,在abap 的學習上雖然刻苦認真許多,但是在sap 的相關模組業務...

陣列引用與陣列的一些小小小小研究

首先看這麼一段程式 include using namespace std void test char a 20 char b cout 1204 4可以看到乙個字元型別佔1個位元組,字元陣列佔陣列長度 單個型別所佔位元組,而作為引數時,位元組數為4,與int相同。這裡傳遞的是a 20 陣列的首位...

關於for迴圈的一些小小理解

for 迴圈的語法是 for expr1 expr2 expr3 statement expr1 第乙個表示式 expr1 在迴圈開始前無條件求值 並執行 一次。expr2 第二個表示式在每次迴圈開始前求值。如果值為true,則繼續迴圈,執行巢狀的迴圈語句。如果值為false,則終止迴圈。expr3...