演算法4 迪傑斯特拉雙棧演算法處理算術表示式

2022-09-09 00:45:23 字數 1155 閱讀 9612

演算法4的語言載體是j**a,所以書上演算法的實現是以j**a語言形式來的。乙個非常經典的演算法,在這裡把他以c++重寫一遍,加深印象的同時給廣大網友乙個參考。

問題描述:

求形如 (1*((2+3)*(4*5)))的算術表示式。

這裡運算的優先順序都用挎號提現出來了,所以也降低了演算法的實現難度。

演算法思想:

這裡定義兩個棧,乙個棧用來存運算元(aux),另乙個棧用來存運算子(ope)

具體步驟:

1.將運算元壓入運算元棧;

2.將運算子壓入運算子棧;

3.忽略左括號;

4.在遇到右括號得時候彈出乙個運算子,彈出所需數量得運算元,並將運算子和運算元的運算結果壓入運算元棧。

在處理完最後乙個右括號之後,運算元棧上只會有乙個值,就是計算結果。

下面給出棧的設計以及測試用例:

棧的設計

#includeusing

namespace

std;

template

//棧的模板類定義

class

mystack ; //

獲取棧的大小

};template

mystack

::mystack()

template

void mystack::push(type x)

template

bool mystack::isempty()

template

type mystack

::pop()

ret =data.back();

data.pop_back();

return

ret;

}

演算法實現

#include#include

#include

#include

"stack.h

"#include

using

namespace

std;

intmain()

else

}int result =vals.pop();

cout

<< result

}

迪傑斯特拉演算法

if object id t test is not null drop table t test gocreate table dbo t test id int identity 1,1 not null primary key,自增字段,無意義 header varchar 500 第一點的名...

迪傑斯特拉演算法

dijkstra 迪傑斯特拉 演算法是典型的最短路徑路由演算法,用於計算乙個節點到其他所有節點的最短路徑。主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到終點為止。dijkstra演算法 能得出最短路徑的最優解,但由於它遍歷計算的節點很多,所以效率低。dijkstra演算法是很有代表性的最短...

迪傑斯特拉演算法

迪傑斯特拉演算法用來計算圖中某一點到其他點的最短距離,這個圖可以是加權,也可以是無權的,距離指的是從一點到其它點所經過的邊的權重和 假設現在有乙個加權無向圖,我們要求節點1到其他點的最短距離 初始化圖arr 用乙個鄰接矩陣來表示一張圖,矩陣元素 初始化一維向量d,這個向量儲存的是其他點的最短距離,初...