資源描述:
《安全生產(chǎn)責(zé)任制考核評(píng)分表[1]》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、第3章棧和隊(duì)列3.1棧3.1.1抽象數(shù)據(jù)類型棧的定義3.1.2棧的表示和實(shí)現(xiàn)3.2棧的應(yīng)用舉例3.4隊(duì)列3.4.1抽象數(shù)據(jù)類型隊(duì)列的定義3.4.2鏈隊(duì)列-隊(duì)列的鏈?zhǔn)奖硎竞蛯?shí)現(xiàn)3.4.3循環(huán)隊(duì)列-隊(duì)列的順序表示和實(shí)現(xiàn)8/27/20211第3章棧和隊(duì)列棧和隊(duì)列是兩種重要的數(shù)據(jù)結(jié)構(gòu)。從數(shù)據(jù)元素的邏輯關(guān)系看,棧與隊(duì)列是線性表,但從操作方式與種類看,它們與線性表有許多不同。棧與隊(duì)列是操作受限的線性表。盡管它們與線性表有許多共同點(diǎn),但也有不少特殊性。本章重點(diǎn)介紹這些特殊性,并給出一些典型的應(yīng)用實(shí)例。8/27/20212第3章棧和隊(duì)列3.1棧3.2棧的應(yīng)用舉例3.4隊(duì)列3.4.1抽象數(shù)
2、據(jù)類型隊(duì)列的定義3.4.2鏈隊(duì)列-隊(duì)列的鏈?zhǔn)奖硎竞蛯?shí)現(xiàn)3.4.3循環(huán)隊(duì)列-隊(duì)列的順序表示和實(shí)現(xiàn)8/27/202133.1棧(Stack)3.1.1抽象數(shù)據(jù)類型棧的定義一、定義1、棧(Stack)是限定在表尾進(jìn)行插入或刪除操作的線性表。表尾端稱棧頂(top),表頭端稱棧底(bottom)2、特點(diǎn):棧的修改是按后進(jìn)先出(LIFO)的原則進(jìn)行的。8/27/202143.1棧(Stack)8/27/202153.1棧(Stack)例:設(shè)棧的初始狀態(tài)為空,容量為5。若入棧元素的順序是1、2、3、4、5,則出棧元素的順序不可能是【】。A.12345B.34125C.24351D.54
3、3218/27/202163.1棧(Stack)二、棧的抽象數(shù)據(jù)類型定義ADTStack{數(shù)據(jù)對(duì)象:D={ai
4、ai∈ElemSet,i=1,2,...,n,n≥0}數(shù)據(jù)關(guān)系:R1={
5、ai-1,ai∈D,i=2,...,n}約定an端為棧頂,a1端為棧底?;静僮鳎篒nitStack(&S)操作結(jié)果:構(gòu)造一個(gè)空棧S。DestroyStack(&S)初始條件:棧S已存在。操作結(jié)果:棧S被銷毀。8/27/202173.1棧(Stack)ClearStack(&S)初始條件:棧S已存在。操作結(jié)果:將S清為空棧。StackEmpty(S)初始條件:棧S已存在。
6、操作結(jié)果:若棧S為空棧,則返回TRUE,否則FALSE。StackLength(S)初始條件:棧S已存在。操作結(jié)果:返回S的元素個(gè)數(shù),即棧的長(zhǎng)度。8/27/202183.1棧(Stack)GetTop(S,&e)初始條件:棧S已存在且非空。操作結(jié)果:用e返回S的棧頂元素。Push(&S,e)初始條件:棧S已存在。操作結(jié)果:插入元素e為新的棧頂元素。Pop(&S,&e)初始條件:棧S已存在且非空。操作結(jié)果:刪除S的棧頂元素,并用e返回其值。}ADTStack8/27/202193.1棧(Stack)3.1.2棧的表示和實(shí)現(xiàn)一、順序棧1、定義:棧的順序存儲(chǔ)結(jié)構(gòu)是利用一組地址連
7、續(xù)的存儲(chǔ)單元依次存放自棧底到棧頂?shù)臄?shù)據(jù)元素,同時(shí)附設(shè)指針top指示棧頂元素在順序棧中的位置。2、初始化空棧時(shí)不限定棧的最大容量:先分配一個(gè)基本容量,需要時(shí)再逐漸擴(kuò)大STACK_INIT_SIZE;STACKINCREMENT3、設(shè)置棧底指針base,始終指向棧底。當(dāng)base=NULL,棧不存在當(dāng)top=base時(shí),???/27/202110topbasebasetopbasetopbasetopAABCDEAB空棧A進(jìn)棧EDC出棧BCDE進(jìn)棧3.1棧(Stack)8/27/2021113.1棧(Stack)二、順序棧的C語(yǔ)言定義順序棧的類型定義如下:#defineSTAC
8、K_INIT_SIZE100//存儲(chǔ)空間初始分配量#defineSTACKINCREMENT10;//存儲(chǔ)空間分配增量typedefstruct{SElemType*base;//在構(gòu)造之前和銷毀之后base的值是NULLSElemType*top;//棧頂指針intStacksize;//棧的當(dāng)前可使用的最大容量.}SqStack;8/27/2021123.1棧(Stack)三、順序棧的應(yīng)用1、初始化StatusInitStack(SqStack&S){//構(gòu)造一個(gè)空棧SS.base=(SelemType*)malloc(STACK_INIT_SIZE*sizeof(E
9、lemType));if(!S.base)exit(OVERFLOW);//存儲(chǔ)分配失敗S.top=S.base;S.stacksize=STACK_INIT_SIZE;returnOK;}//InitStack8/27/2021133.1棧(Stack)2、讀棧頂元素StatusGetTop(SqStackS,SElemType&e){//若棧不空,則用e返回S的棧頂元素,并返回ok;//否則返回ERRORif(S.top==S.base)returnERROR;e=*(S.top-1);returnOK;}//GetTop