棧的實現與應用

2021-07-04 13:03:39 字數 2148 閱讀 5700

棧(stack)是限定盡在表尾進行插入或刪除操作的線性表。與線性表類似,棧也有兩種儲存表示方式。

下面是順序棧的實現

#include #include #define maxsize 100

typedef char elemtype;

//定義順序棧

typedef struct

sqstack;

//初始化棧

void initstack(sqstack *&s)

//銷毀棧

void destroystack(sqstack *s)

//判斷棧空

bool stackempty(sqstack *s)

//進棧

bool push(sqstack *&s,elemtype e)

//出棧

bool pop(sqstack *&s,elemtype &e)

//取棧頂元素

bool gettop(sqstack *&s,elemtype &e)

使用棧我們可以有很多應用。

下面將演示使用棧進行數制轉換

十進位制數n和其他d進製數的轉換時計算機實現計算的基本問題,下面的簡單演算法基於下列原理:

n=(n div d)×d+n mod d(其中:div為整除運算,mod為求餘運算)

下面是該演算法的實現

void conversion()

while(!stackempty(s))

}

下面將演示使用棧求解迷宮問題

顯然,我們需要用到乙個後進先出的資料結構來儲存從入口到當前為止的路徑,所有應用「棧」來解決是自然而然的事情。

演算法的基本思想:

若當前位置」可通「,則納入」當前路徑「,並繼續朝」下乙個位置「搜尋,如此重複直到到達出口。

若當前為止」不可通「,則應退回「前一通道塊」,然後朝著其他方向繼續探索,若該通道塊的四周均「不可通」,則應從「當前路徑」上刪除該通道塊。

下面是演算法的實現。(利用乙個二維陣列代表迷宮,1代表牆,0代表通道)

#include #define m 4               //行數 

#define n 4 //列數

#define maxsize 100

//maze表示乙個迷宮,在其四周加上均為1的牆

int maze[m+2][n+2]=

,,, ,,

};//定義棧和存放最短路徑的陣列

struct

stack[maxsize],path[maxsize];

int top=-1; //棧頂指標

int count=1; //路徑長度計數

int minlen=maxsize; //最短路徑長度

//迷宮求解 引數為迷宮入口跟出口的位置

void getpath(int xi,int yi,int xe,int ye)

//讓該位置標為其他路徑可走節點

maze[stack[top].x][stack[top].y]=0;

top--;

i=stack[top].x;

i=stack[top].y;

di=stack[top].di;

}find=0;

//找下乙個可走方塊

while(di<4&&find==0)

if(maze[i][j]==0) find=1;

}//找到了下乙個可走方塊

if(find==1)

//沒有路可走,則退回

else

} //輸出最短路徑

printf("其中一條最短路徑如下:\n");

for(k=0;k

printf("\n");

}

棧的實現及應用

1.棧定義 棧又稱堆疊,是一種運算受限的線性表,限制是僅僅允許在表的另外一端進行插入和刪除運算。2.特點 後進先出 cpu快取利用率相對較高 不允許隨意訪問 3.實現方式 棧有兩種實現方式,一種是順序儲存,和陣列類似。一種是鏈式儲存,和單鏈表類似。這是在2013編譯器下 棧裡面有以下幾種函式 voi...

棧的應用dfs C 實現

深搜dfs 1.不列印路徑的版本 include include include mystack define maxrow 10 define maxline 10 using namespace std typedef struct point point int maze maxrow max...

Python實現棧,及棧的應用例項

棧 stack 是限定在表尾進行插入或刪除操作的線性表。因此,對於棧來說,表尾端有其特殊含義,稱為棧頂 top 表頭被稱為棧底 bottom 構造空棧 def init self,size self.size size self.stack 輸出棧 def str self return str s...