棧是後進先出的,棧分為順序棧和鏈棧:
順序棧是由一組位址連續的儲存單元構成,依次存放從棧底到棧頂的資料元素;
鏈棧是一組位址可不連續的儲存單元構成,鏈棧的建立過程類似於採用前插法建立鍊錶;
注意程式中棧的操作,
push(),pop(),gettop()等等。
網上有一段利用棧完成的程式,可以拿來欣賞一下,首先感謝一下**的原作者。
#include using namespace std;
class stack;
void printpath(stack p);
bool mazepath(int **maze,int m,int n);
class t
;class linknode
;class stack
;stack::stack()
stack::~stack()
void stack::push(t e)//把元素e壓入棧中,類似鍊錶的前插法
t stack::pop()
t stack::getpop()//取出棧頂元素
void stack::clear()
bool stack::empty()
int move[4][2] = ,,,};
bool mazepath(int **maze,int m,int n);
//尋找迷宮maze中從(0,0)到(m,n)的路徑
//成功則返回true,否則返回false
void printpath(stack p);//輸出迷宮的路徑
void restore(int **maze, int m, int n);//恢復迷宮
int** getmaze(int &m,int &n);//獲取迷宮,返回訪問迷宮的二維指標
int main()
bool mazepath(int **maze,int m,int n)//尋找迷宮maze從(0,0)到(m,n)的路徑
for(loop = 0; loop < 4; loop++)
if((x == m)&&(y == n))//成功到達出口
}//如果沒有新位置入棧
if(p.getpop().x == q.getpop().x && p.getpop().y == q.getpop().y)
}return 0;//查詢失敗
}void printpath(stack p)//輸出路徑
while(!t.empty())
{
data = t.pop();
cout<<"("<
示例輸出:
測試1:
請輸入迷宮的長和寬:5 5
請輸入迷宮內容:
0 1 1 0 0
0 0 1 1 0
1 0 0 1 1
1 0 0 1 0
1 1 0 0 0
迷宮的路徑為
括號內的內容分別表示為(行座標,列座標,數位化方向,方向)
(1,1,1,↓)
(2,1,2,→)
(2,2,1,↓)
(3,2,1,↓)
(4,2,2,→)
(4,3,1,↓)
(5,3,2,→)
(5,4,2,→)
(5,5,0,)
迷宮路徑探索成功!
測試2:
請輸入迷宮的長和寬:9 8
請輸入迷宮內容:
0 0 1 0 0 0 1 0
0 0 1 0 0 0 1 0
0 0 0 0 1 1 0 1
0 1 1 1 0 0 1 0
0 0 0 1 0 0 0 0
0 1 0 0 0 1 0 1
0 1 1 1 1 0 0 1
1 1 0 0 0 1 0 1
1 1 0 0 0 0 0 0
迷宮的路徑為
括號內的內容分別表示為(行座標,列座標,數位化方向,方向)
(1,1,1,↓)
(2,1,1,↓)
(3,1,1,↓)
(4,1,1,↓)
(5,1,2,→)
(5,2,2,→)
(5,3,1,↓)
(6,3,2,→)
(6,4,2,→)
(6,5,3,↑)
(5,5,2,→)
(5,6,2,→)
(5,7,1,↓)
(6,7,1,↓)
(7,7,1,↓)
(8,7,1,↓)
(9,7,2,→)
(9,8,0,)
迷宮路徑探索成功!
棧的應用之迷宮
利用棧對迷宮求解,採用的基本方法是回溯法,其實也算是一種暴力破解吧.畢竟是將乙個乙個方塊檢驗直至終點或者棧空。入棧 當棧頂元素方塊周圍有可行方塊時,將該可行方塊入棧 出棧 當棧定元素的方塊周圍都沒有可行方塊時,出棧 有幾點需要注意 1.當棧頂元素彈出時,我們又要重新對棧頂元素周圍的方塊進行檢驗,為避...
棧的應用之求解迷宮問題(棧操作)
給定乙個m n的迷宮圖,求一條從指定入口和出口的迷宮路徑。假設迷宮圖如圖所示 m n 6的迷宮圖 為了表示迷宮,設定乙個陣列mg,其中每個元素表示乙個方塊的狀態,為0表示方塊是通道,為1表示方塊是障礙物 不可走 為了演算法方便,一般在迷宮的外圍加一條圍牆,例如上圖的迷宮表示為 由於迷宮四周加了一道圍...
棧的應用 迷宮
使用c 構建帶環迴路迷宮,並使用迭代法,遞迴法求出口 使用遞迴方法求迷宮的最短路徑 其實在列印最短路徑是使用佇列的話路徑就不是反著的了 pragma once includeusing namespace std include includetypedef struct pos pos class...