网易云课堂-数据结构
第二周 ?2.1線性表
對C語言使用不全,對typedef struct有疑問,希望能盡快解決。鏈表可以理解。
對時間復(fù)雜度計算不明確。廣義鏈表不明確。
2.2堆棧?
剛開始對前綴后綴表達(dá)式不懂 這篇blog寫的很清楚讓我弄懂了 ?
點擊打開鏈接
中綴==》前綴表達(dá)式從右向左掃描,遇右括號進(jìn)棧,左括號找右括號并彈出壓入結(jié)果棧。
當(dāng)轉(zhuǎn)換成后綴表達(dá)式時從左到右 左括號(進(jìn)入棧內(nèi)優(yōu)先級變最低;壓入堆棧有*時,再壓入/,因為從左到右順序所以*比/優(yōu)先級高 彈出*壓入/。
若優(yōu)先級大于棧頂符號則PUSH;
若優(yōu)先級小于棧頂符號則POP棧頂符號 再比較該符號與新棧頂符號
/*補(bǔ)充 !!
(1) 初始化兩個棧:運算符棧S1和儲存中間結(jié)果的棧S2;
(2) 從右至左掃描中綴表達(dá)式;
(3) 遇到操作數(shù)時,將其壓入S2;
(4) 遇到運算符時,比較其與S1棧頂運算符的優(yōu)先級:
(4-1) 如果S1為空,或棧頂運算符為右括號“)”,則直接將此運算符入棧;
(4-2) 否則,若優(yōu)先級比棧頂運算符的較高或相等,也將運算符壓入S1;
(4-3) 否則,將S1棧頂?shù)倪\算符彈出并壓入到S2中,再次轉(zhuǎn)到(4-1)與S1中新的棧頂運算符相比較;
(5) 遇到括號時:
(5-1) 如果是右括號“)”,則直接壓入S1;
(5-2) 如果是左括號“(”,則依次彈出S1棧頂?shù)倪\算符,并壓入S2,直到遇到右括號為止,此時將這一對括號丟棄;
(6) 重復(fù)步驟(2)至(5),直到表達(dá)式的最左邊;
(7) 將S1中剩余的運算符依次彈出并壓入S2;
(8) 依次彈出S2中的元素并輸出,結(jié)果即為中綴表達(dá)式對應(yīng)的前綴表達(dá)式。
*/
中綴==》后綴 ?從左向右掃面,類似,遇左括號進(jìn)棧,右括號找左括號彈出進(jìn)入結(jié)果。?
Push (S);
x=Pop(S);
堆棧鏈表 單鏈表 在表頭操作 ?表頭不是第一個有用的元素,指向第一個有用的元素,插入最后S->next=Tempcell指向新節(jié)點;
鏈表頭 刪除插入都方便,隊尾不能刪除因為單鏈表無法找到前一個節(jié)點。
2.3隊列
循環(huán)隊列 front rear 絕對值差n卻要表示n+1個狀態(tài)。 解決方法:tag看最后一次操作是插入還是刪除;size大小;只使用n-1個地方,n個狀態(tài) 浪費一個空間。
求余。
鏈表頭 刪除插入都方便,隊尾不能刪除因為單鏈表無法找到前一個節(jié)點。
所以front要執(zhí)行刪除必須在表頭
總結(jié)
以上是生活随笔為你收集整理的网易云课堂-数据结构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringBoot整合Elastics
- 下一篇: 认知-洞察力:洞察力