数据结构(3) -- 栈和队列
3.1 棧
棧是一種線性表,只允許在一段進行插入和刪除操作
棧的順序存儲結(jié)構(gòu):
注意棧頂初始化時,top指針是-1還是0,
入棧時先判滿,出棧時先判空
共享棧:兩個棧棧底設(shè)置在共享空間的兩端,兩個棧頂向共享空間的中間延伸
棧的鏈?zhǔn)酱鎯?/strong>:采用單鏈表實現(xiàn),操作在單鏈表表頭進行
?
3.2 隊列
操作受限的線性表,只允許在表的一端進行插入,在表的另一端刪除。操作特性是先進先出。
隊列的順序存儲:
兩個指針front和rear指向隊頭和隊尾,隊尾指針指向隊尾元素的下一個位置
入隊先判滿,出隊先判空
循環(huán)隊列:入隊出隊指針都向前走
將順序隊列臆造為一個環(huán)狀,當(dāng)隊尾指針Q.front == Q.Maxsize - 1,再前進一個位置就自動到0,利用除余運算實現(xiàn)。
隊列長度:(rear + maxsize - front) % maxsize
區(qū)分隊列隊空和隊滿的三種方式:
犧牲一個單元區(qū)分,入隊時少用一個隊列單元,當(dāng)隊頭指針在隊尾指針下一位置作為隊滿標(biāo)志。即隊滿條件:(rear+1)%maxsize == front,隊空:rear==front
類型中增設(shè)表示元素個數(shù)的數(shù)據(jù)成員
類型中增設(shè)tag數(shù)據(jù)成員來區(qū)分
隊列的鏈?zhǔn)酱鎯?#xff1a;
一個同時帶有隊頭指針和隊尾指針的單鏈表,頭指針指向頭結(jié)點,隊尾指針指向尾結(jié)點。
當(dāng)Q.front == Q.rear == NULL時,鏈?zhǔn)疥犃袨榭?/p>
單鏈表表示的鏈?zhǔn)疥犃羞m合數(shù)據(jù)變動較大的情形,不存在隊滿和產(chǎn)生溢出的問題。
雙端隊列:
允許兩端都可以進行入隊和出隊操作
輸出受限的雙端隊列
輸入受限的雙端隊列
?
3.3 棧和隊列的應(yīng)用
棧在括號匹配中的應(yīng)用
初始設(shè)置一個空棧,順序讀入括號
若是右括號,與棧頂進行匹配,若是不合法的情況(括號序列不匹配,退出程序)
若是左括號,壓棧,算法結(jié)束時,棧空,否則括號序列不匹配
棧在表達式求值中的應(yīng)用
中綴轉(zhuǎn)后綴:
遇到數(shù)字,入隊
遇到運算符:
-
如果是'(',入棧
-
如果是')',依次把棧中運算符加入隊列,知道'('出現(xiàn),從棧中刪除'('
-
若是其他運算符,當(dāng)優(yōu)先級高于棧頂運算符時,入棧;否則,從棧頂開始,依次彈出比當(dāng)前處理的運算符優(yōu)先級高和優(yōu)先級相等的運算符,直到遇到優(yōu)先級高或者遇到')'
后綴表達式計算:
順序掃描表達式每一項,若是操作數(shù),則壓棧;若是操作符op,則連續(xù)從棧中彈出兩個操作數(shù)Y和X,形成X< op >Y,將計算結(jié)果壓棧。
表達式掃描完成后,棧頂存放最后計算結(jié)果
棧在遞歸中的應(yīng)用:
遞歸的精髓在域能否把原始問題轉(zhuǎn)換為屬性相同但規(guī)模較小的問題
隊列在層次遍歷中的應(yīng)用:
在處理當(dāng)前層或當(dāng)前行時就對下一層或下一行做預(yù)處理,把處理順序安排好。使用隊列是為了保存下一步的處理順序。
隊列在計算機系統(tǒng)中的應(yīng)用
解決主機與外部設(shè)備之間速度不匹配的問題
解決由多用戶引起的資源競爭問題
?
3.4 特殊矩陣的壓縮存儲
數(shù)組的存儲結(jié)構(gòu):行優(yōu)先和列優(yōu)先
行優(yōu)先:行下標(biāo)范圍:[l1,r1],列下標(biāo)范圍:[l2,r2],公式:LOC(ai,j) = LOC(al1,l2) + [(i-l1) * (r2-l2+1) + (j-l2)] * L
列優(yōu)先:公式:LOC(ai,j) = LOC(al1,l2) + [(j-l2) * (r1-l1+1) + (i-l1)] * L
矩陣的壓縮存儲
壓縮存儲:為多個值相同元素只分配一個存儲空間,0元素不分配存儲空間
特殊矩陣:具有很多相同矩陣元素或0元素,并且分布有一定規(guī)律,如:對稱矩陣,上(下)三角矩陣,對角矩陣
特殊矩陣壓縮方法:
對稱矩陣:將n維對稱矩陣A[ 1-n ] [ 1-n ]存在一維數(shù)組B[ n(n+1)/2 ],只存放主對角線和下三角區(qū)元素。元素ai,j在數(shù)組B(從0開始)中對應(yīng)下標(biāo)為1+2+....(i-1)+(j-1)
下三角矩陣:與對稱矩陣相似,但存儲完下三角區(qū)后,緊接著存儲對角線上方的常量一次,故壓縮存在B[ n(n+1)/2+1 ]
上三角矩陣
三對角矩陣
稀疏矩陣:構(gòu)成三元組(行標(biāo)、列標(biāo)、值)
總結(jié)
以上是生活随笔為你收集整理的数据结构(3) -- 栈和队列的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构(2) -- 线性表的顺序表示
- 下一篇: 数据结构(5) -- 图