一、棧和佇列的基本概念
棧的基本概念:只能在一端進行插入或刪除的線性表。進行插入或刪除操作的一端稱為棧頂,另一端為棧底,棧底是固定不變的。
棧的特點:filo(先進後出)。
棧的儲存結構:順序棧和鏈式棧(和線性表類似)。
棧的數學性質:當n個元素以某種順序如棧,並在入棧的過程中可以隨時出棧時,最終在所有元素經過了入棧出棧後的數字排列順序有:1/[(n+1)c(n)(2n)]種。
佇列的基本概念:是一種允許在表的一端進行插入,另一端進行刪除的線性表。插入端為隊尾(rear),刪除端為隊頭(front)。
佇列的特點:fifo(先進先出)。
佇列的儲存結構:順序隊和鏈隊。
二、棧和佇列的儲存結構、演算法和應用
順序棧定義:
typedef
struct
sqstack;
鏈棧結點定義:
typedef
struct lnode lnode;
順序佇列定義:
typedef
struct
sqqueue;
鏈隊定義:
(1)鏈隊結點型別定義:
typedef
struct qnode qnode;
//隊結點型別定義
(2)鏈隊型別定義:
typedef
struct
liqueue;
//鏈隊型別定義
int
push
(sqstack &st,
int x)
else
return1;
}
(7)出棧**:
int
pop(
&sqstack,
&int x)
void
push
(lnode *lst,
int x)
(6)出棧**:(略)
int
enqueue
(sqqueue &qu,
int x)
return1;
}
(8)出隊演算法:略(注意出隊元素x要用引用型)
(9)迴圈佇列的非正常配置:一種是rear指的是剛進隊元素,front指的是最早進隊的元素。根據此規則考慮下列問題:
a)隊內元素個數;
b)隊空,隊滿的條件;
void
initqueue
(liqueue *
&lqu)
(4)判斷隊空:略
(5)入隊演算法:
void
enqueue
(liqueue *lqu,
int x)
}}
(6)出隊演算法:
void
dequeue
(liqueue *lqu,
int&x)
return1;
}
void
initstack1
(lnode *
&lst)
intisempty
(lnode *lst)
void
push1
(lnode *
&lst,
int x)
intpop1
(lnode *
&lst,
int&x)
Chapter 3 棧與佇列
2.佇列 3.棧與佇列的應用 通常,棧可定義為只允許在表的末端進行插入和刪除的線性表。後進先出 lifo 棧的基本操作 解答演算法題時,若題幹未做出限制,則可直接使用這些基本的操作函式。p60 p62 利用棧底位置相對不變的特性,可讓兩個順序棧共享乙個一維資料空間,將兩個棧的棧底分別設定在共享空間的...
chapter 3 損失函式和優化
上一章我們了解了線性分類器的函式形式 f x,w x w b。這裡li的計算方式為 列舉每乙個錯誤分類的值與正確分類的差,再用這個值加上設定好的安全邊界值。若和小於等於0,則該錯誤分類的損失為0 否則損失即為和。計算每個錯誤分類的損失並求和,記為該分類的損失。如下圖為例,貓的損失函式值為 設安全邊距...
Chapter 3 軟體過程結構
由圖可以看出,每個框架活動由一系列軟體工程動作構成 每個軟體工程動作由任務集來定義,這個任務集明確了將要完成的工作任務 將要產生的工作產品 所需要的質量保證點,以及用於表明過程狀態的里程碑。過程模式 process pattern 描述了軟體工程工作中遇到的過程相關的問題,明確了問題環境並給出了針對...