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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

栈(2)

發布時間:2024/3/12 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 栈(2) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

棧的鏈接存儲結構及實現

鏈棧:棧的鏈接存儲結構

鏈棧的類聲明:

template

class LinkStack

{

public:

LinkStack( ) {top=NULL;};

~LinkStack( );

void Push(T x);

T Pop( );

T GetTop( );

bool Empty( );

private:

Node *top;

}

鏈棧的實現——插入(入棧)

操作接口:(void Push(T x));

算法描述:

template

void LinkStack::Push(T x)

{

s=new Node;

s->data=x;

s->next=top;

top=s;

}

鏈棧的實現——刪除(出棧)

操作接口: T Pop( );

算法描述:

template

T LinkStack::Pop( )

{

if (top==NULL)

throw “下溢”;

x=top->data;

p=top;

top=top->next;

delete p;

return x;

}

鏈棧的實現——鏈棧的析構(鏈棧的銷毀)

template

LinkStack::~LinkStack( )

{

while (top)

{

Node *p;

p=top->next;

delete top;

top=p;

}

}

順序棧和鏈棧的比較

時間性能:相同,都是常數時間O(1)。

空間性能:

順序棧:有元素個數的限制和空間浪費的問題。

鏈棧:沒有棧滿的問題,只有當內存沒有可用空間時才會出現棧滿,但是每個元素都需要一個指針域,從而產生了結構性開銷。

結論:當棧的使用過程中元素個數變化較大時,用鏈棧是適宜的,反之,應該采用順序棧。

后綴表達式求值算法

從左到右對后綴表達式字符串進行處理,每次處理一個符號

若遇到數字,入棧
若遇到運算符,棧頂兩個數字出棧,執行運算符所定義的運算,并將運算結果入棧
重復以上的工作,直到表達式結束,此時,棧中的數字代表最終的值。
中綴表達式求值

表達式的組成:

操作數(operand):
操作數既可以是常數, 也可以是被說明為變量或常量;

運算符(operator):
運算符可以分為算術運算符、 關系運算符和邏輯運算符三類,不同的運算符有不同的優先級以及結合性

界限符(delimiter) :
基本界限符有左右括號和表達式結束符等。 例如:

#(3+4)*5-2#,界限符的優先級相同(左括號和右括號的優先級相同,#的優先級也相同)

中綴表達式求值過程

設置兩個棧:
??????? OVS(運算數棧)和OPTR(運算符棧)。

(2) 自左向右掃描中綴表達式,

遇操作數進OVS,

遇操作符則與OPTR棧頂優先數比較:

OPTR棧頂<當前操作符, 當前操作符進OPTR棧

OPTR棧頂>=當前操作符,OVS棧頂、次頂和OPTR棧頂,退棧形成運算T(i),T(i)進OVS棧。

中綴表達式轉化為后綴表達式

設置一個運算符棧。從左到右依次對中綴表達式中的每個符號進行處理

如果遇到數字,直接輸出

如果遇到“(”,則將其入棧

如果遇到運算符a,如果棧頂符號的優先級低于a的優先級,則入棧;否則,棧頂符號出棧,直到棧頂符號的優先級低于a的優先級,此時讓a入棧

若遇到“)”,則棧頂符號出棧,直到“(”

重復以上工作,直到表達式結束,此時,將棧里符號全部出棧。

總結

以上是生活随笔為你收集整理的栈(2)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。