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