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