Chapter 3 棧和佇列

2021-10-24 18:00:56 字數 1918 閱讀 1688

一、棧和佇列的基本概念

棧的基本概念:只能在一端進行插入或刪除的線性表。進行插入或刪除操作的一端稱為棧頂,另一端為棧底,棧底是固定不變的。

棧的特點: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 描述了軟體工程工作中遇到的過程相關的問題,明確了問題環境並給出了針對...