




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
數(shù)據(jù)結(jié)構(gòu)棧和隊列第1頁,共54頁,2023年,2月20日,星期六3.1
棧3.1.1
棧的基本概念1
棧的概念
棧(Stack):是限制在表的一端進(jìn)行插入和刪除操作的線性表。又稱為后進(jìn)先出LIFO
(LastInFirstOut)或先進(jìn)后出FILO
(FirstInLastOut)線性表。
棧頂(Top):允許進(jìn)行插入、刪除操作的一端,又稱為表尾。用棧頂指針(top)來指示棧頂元素。
棧底(Bottom):是固定端,又稱為表頭。
空棧:當(dāng)表中沒有元素時稱為空棧。第2頁,共54頁,2023年,2月20日,星期六
設(shè)棧S=(a1,a2,…an),則a1稱為棧底元素,an為棧頂元素,如圖3-1所示。棧中元素按a1,a2,…an的次序進(jìn)棧,退棧的第一個元素應(yīng)為棧頂元素。即棧的修改是按后進(jìn)先出的原則進(jìn)行的。圖3-1順序棧示意圖a1a2aian????bottomtop進(jìn)棧(push)出棧(pop)2棧的抽象數(shù)據(jù)類型定義ADTStack{數(shù)據(jù)對象:D={ai|ai∈ElemSet,i=1,2,…,n,n≥0}數(shù)據(jù)關(guān)系:R={<ai-1,ai>|ai-1,ai∈D,i=2,3,…,n}基本操作:初始化、進(jìn)棧、出棧、取棧頂元素等}ADTStack第3頁,共54頁,2023年,2月20日,星期六棧的順序存儲結(jié)構(gòu)簡稱為順序棧,和線性表相類似,用一維數(shù)組來存儲棧。根據(jù)數(shù)組是否可以根據(jù)需要增大,又可分為靜態(tài)順序棧和動態(tài)順序棧。◆靜態(tài)順序棧實現(xiàn)簡單,但不能根據(jù)需要增大棧的存儲空間;◆動態(tài)順序??梢愿鶕?jù)需要增大棧的存儲空間,但實現(xiàn)稍為復(fù)雜。3.1.2
棧的順序存儲表示第4頁,共54頁,2023年,2月20日,星期六采用動態(tài)一維數(shù)組來存儲棧。所謂動態(tài),指的是棧的大小可以根據(jù)需要增加?!粲胋ottom表示棧底指針,棧底固定不變的;棧頂則隨著進(jìn)棧和退棧操作而變化。用top(稱為棧頂指針)指示當(dāng)前棧頂位置。◆用top=bottom作為??盏臉?biāo)記,每次top指向棧頂數(shù)組中的下一個存儲位置?!?/p>
結(jié)點進(jìn)棧:首先將數(shù)據(jù)元素保存到棧頂(top所指的當(dāng)前位置),然后執(zhí)行top加1,使top指向棧頂?shù)南乱粋€存儲位置;3.1.2.1
棧的動態(tài)順序存儲表示第5頁,共54頁,2023年,2月20日,星期六◆結(jié)點出棧:首先執(zhí)行top減1,使top指向棧頂元素的存儲位置,然后將棧頂元素取出。圖3-2是一個動態(tài)棧的變化示意圖。圖3-2(動態(tài))堆棧變化示意圖空棧bottomtop元素a進(jìn)棧bottomtopa元素b,c進(jìn)棧bottomtopabc元素c退棧bottomtopabbottomtopabdef元素d,e,f進(jìn)棧第6頁,共54頁,2023年,2月20日,星期六基本操作的實現(xiàn)1
棧的類型定義#defineSTACK_SIZE100/*棧初始向量大小*/#defineSTACKINCREMENT10/*存儲空間分配增量*/#typedefintElemType;typedefstructsqstack{ElemType*bottom;/*棧不存在時值為NULL*/ElemType*top;/*棧頂指針*/intstacksize;/*當(dāng)前已分配空間,以元素為單位*/}SqStack;第7頁,共54頁,2023年,2月20日,星期六2棧的初始化StatusInit_Stack(void){SqStackS;S.bottom=(ElemType*)malloc(STACK_SIZE*sizeof(ElemType));if(!S.bottom)returnERROR;S.top=S.bottom;/*??諘r棧頂和棧底指針相同*/S.stacksize=STACK_SIZE;returnOK;}第8頁,共54頁,2023年,2月20日,星期六3壓棧(元素進(jìn)棧)Statuspush(SqStackS,ElemTypee)
{if(S.top-S.bottom>=S.stacksize-1){S.bottom=(ElemType*)realloc((S.STACKINCREMENT+STACK_SIZE)*sizeof(ElemType));/*棧滿,追加存儲空間*/if(!S.bottom)returnERROR;
S.top=S.bottom+S.stacksize;S.stacksize+=STACKINCREMENT;}*S.top=e;S.top++;/*棧頂指針加1,e成為新的棧頂*/returnOK;}第9頁,共54頁,2023年,2月20日,星期六4
彈棧(元素出棧)Statuspop(SqStackS,ElemType*e)/*彈出棧頂元素*/{if(S.top==S.bottom)returnERROR;
/*棧空,返回失敗標(biāo)志*/S.top--;e=*S.top;returnOK;}
第10頁,共54頁,2023年,2月20日,星期六采用靜態(tài)一維數(shù)組來存儲棧。棧底固定不變的,而棧頂則隨著進(jìn)棧和退棧操作變化的,◆棧底固定不變的;棧頂則隨著進(jìn)棧和退棧操作而變化,用一個整型變量top(稱為棧頂指針)來指示當(dāng)前棧頂位置。◆用top=0表示??盏某跏紶顟B(tài),每次top指向棧頂在數(shù)組中的存儲位置。
◆
結(jié)點進(jìn)棧:首先執(zhí)行top加1,使top指向新的棧頂位置,然后將數(shù)據(jù)元素保存到棧頂(top所指的當(dāng)前位置)。3.1.2.2
棧的靜態(tài)順序存儲表示(簡略)第11頁,共54頁,2023年,2月20日,星期六◆結(jié)點出棧:首先把top指向的棧頂元素取出,然后執(zhí)行top減1,使top指向新的棧頂位置。若棧的數(shù)組有Maxsize個元素,則top=Maxsize-1時棧滿。圖3-3是一個大小為5的棧的變化示意圖。圖3-3靜態(tài)堆棧變化示意圖空棧bottomtopTop=11個元素進(jìn)棧bottomtopaTop=33個元素進(jìn)棧bottomtopabcTop=4棧滿bottomtopabedTop=2元素c進(jìn)棧bottomtopab第12頁,共54頁,2023年,2月20日,星期六基本操作的實現(xiàn)1棧的類型定義#defineMAX_STACK_SIZE100/*棧向量大小*/#typedefintElemType;typedefstructsqstack{ElemTypestack_array[MAX_STACK_SIZE];inttop;}SqStack;第13頁,共54頁,2023年,2月20日,星期六2棧的初始化SqStackInit_Stack(void){SqStackS;S.bottom=S.top=0;return(S);}第14頁,共54頁,2023年,2月20日,星期六3壓棧(元素進(jìn)棧)Statuspush(SqStackS,ElemTypee)/*使數(shù)據(jù)元素e進(jìn)棧成為新的棧頂*/{if(S.top==MAX_STACK_SIZE-1)returnERROR;/*棧滿,返回錯誤標(biāo)志*/S.top++;/*棧頂指針加1*/S.stack_array[S.top]=e;/*e成為新的棧頂*/returnOK;/*壓棧成功*/}第15頁,共54頁,2023年,2月20日,星期六4
彈棧(元素出棧)Statuspop(SqStackS,ElemType*e)/*彈出棧頂元素*/{if(S.top==0)returnERROR;/*??眨祷劐e誤標(biāo)志*/*e=S.stack_array[S.top];S.top--;returnOK;}第16頁,共54頁,2023年,2月20日,星期六當(dāng)棧滿時做進(jìn)棧運算必定產(chǎn)生空間溢出,簡稱“上溢”。上溢是一種出錯狀態(tài),應(yīng)設(shè)法避免。當(dāng)??諘r做退棧運算也將產(chǎn)生溢出,簡稱“下溢”。下溢則可能是正?,F(xiàn)象,因為棧在使用時,其初態(tài)或終態(tài)都是空棧,所以下溢常用來作為控制轉(zhuǎn)移的條件。第17頁,共54頁,2023年,2月20日,星期六1棧的鏈?zhǔn)奖硎?/p>
棧的鏈?zhǔn)酱鎯Y(jié)構(gòu)稱為鏈棧,是運算受限的單鏈表。其插入和刪除操作只能在表頭位置上進(jìn)行。因此,鏈棧沒有必要像單鏈表那樣附加頭結(jié)點,棧頂指針top就是鏈表的頭指針。圖3-4是棧的鏈?zhǔn)酱鎯Ρ硎拘问健?.1.3
棧的鏈?zhǔn)酱鎯Ρ硎?簡略)空棧top?非空棧topa4a3a1?a2圖3-4鏈棧存儲形式鏈棧的結(jié)點類型說明如下:typedefstructStack_Node{ElemTypedata;structStack_Node*next;}Stack_Node;第18頁,共54頁,2023年,2月20日,星期六2
鏈棧基本操作的實現(xiàn)(1)
棧的初始化Stack_Node*Init_Link_Stack(void){Stack_Node*top;top=(Stack_Node*)malloc(sizeof(Stack_Node));top->next=NULL;return(top);}第19頁,共54頁,2023年,2月20日,星期六(2)壓棧(元素進(jìn)棧)Statuspush(Stack_Node*top,ElemTypee){Stack_Node*p;p=(Stack_Node*)malloc(sizeof(Stack_Node));if(!p)returnERROR;/*申請新結(jié)點失敗,返回錯誤標(biāo)志*/p->data=e;p->next=top->next;top->next=p;/*鉤鏈*/returnOK;}第20頁,共54頁,2023年,2月20日,星期六(3)
彈棧(元素出棧)Statuspop(Stack_Node*top,ElemType*e)/*將棧頂元素出棧*/{Stack_Node*p;ElemTypee;if(top->next==NULL)returnERROR;/*???,返回錯誤標(biāo)志*/p=top->next;e=p->data;/*取棧頂元素*/top->next=p->next;/*修改棧頂指針*/free(p);returnOK;}第21頁,共54頁,2023年,2月20日,星期六3.2
棧的應(yīng)用
由于棧具有的“后進(jìn)先出”的固有特性,因此,棧成為程序設(shè)計中常用的工具和數(shù)據(jù)結(jié)構(gòu)。以下是幾個棧應(yīng)用的例子。第22頁,共54頁,2023年,2月20日,星期六3.2.1數(shù)制轉(zhuǎn)換十進(jìn)制整數(shù)N向其它進(jìn)制數(shù)d(二、八、十六)的轉(zhuǎn)換是計算機(jī)實現(xiàn)計算的基本問題。轉(zhuǎn)換法則:該轉(zhuǎn)換法則對應(yīng)于一個簡單算法原理:n=(ndivd)*d+nmodd其中:div為整除運算,mod為求余運算例如(1348)10=(2504)8,其運算過程如下:nndiv8nmod8134816841682102125202第23頁,共54頁,2023年,2月20日,星期六
采用靜態(tài)順序棧方式實現(xiàn)voidconversion(intn,intd)/*將十進(jìn)制整數(shù)N轉(zhuǎn)換為d(2或8)進(jìn)制數(shù)*/{SqStackS;intk,*e;S=Init_Stack();while(n>0){k=n%d;push(S,k);n=n/d;}
/*求出所有的余數(shù),進(jìn)棧*/while(S.top!=0)/*棧不空時出棧,輸出*/{pop(S,e);printf(“%1d”,*e);}}
第24頁,共54頁,2023年,2月20日,星期六3.2.2括號匹配問題在文字處理軟件或編譯程序設(shè)計時,常常需要檢查一個字符串或一個表達(dá)式中的括號是否相匹配?匹配思想:從左至右掃描一個字符串(或表達(dá)式),則每個右括號將與最近遇到的那個左括號相匹配。則可以在從左至右掃描過程中把所遇到的左括號存放到堆棧中。每當(dāng)遇到一個右括號時,就將它與棧頂?shù)淖罄ㄌ?如果存在)相匹配,同時從棧頂刪除該左括號。算法思想:設(shè)置一個棧,當(dāng)讀到左括號時,左括號進(jìn)棧。當(dāng)讀到右括號時,則從棧中彈出一個元素,與讀到的左括號進(jìn)行匹配,若匹配成功,繼續(xù)讀入;否則匹配失敗,返回FLASE。第25頁,共54頁,2023年,2月20日,星期六算法描述#defineTRUE0#defineFLASE-1SqStackS;S=Init_Stack();/*堆棧初始化*/intMatch_Brackets(){charch,x;scanf(“%c”,&ch);while(asc(ch)!=13)/*不等于回車*/第26頁,共54頁,2023年,2月20日,星期六{if((ch==‘(’)||(ch==‘[’))push(S,ch);elseif(ch==‘]’){x=pop(S);if(x!=‘[’){printf(“’[’括號不匹配”);returnFLASE;}}elseif(ch==‘)’){x=pop(S);if(x!=‘(’){printf(“’(’括號不匹配”);returnFLASE;}}}第27頁,共54頁,2023年,2月20日,星期六if(S.top!=0){printf(“括號數(shù)量不匹配!”);returnFLASE;}elsereturnTRUE;}第28頁,共54頁,2023年,2月20日,星期六3.3棧與遞歸調(diào)用的實現(xiàn)(簡)棧的另一個重要應(yīng)用是在程序設(shè)計語言中實現(xiàn)遞歸調(diào)用。
遞歸調(diào)用:一個函數(shù)(或過程)直接或間接地調(diào)用自己本身,簡稱遞歸(Recursive)。遞歸是程序設(shè)計中的一個強(qiáng)有力的工具。因為遞歸函數(shù)結(jié)構(gòu)清晰,程序易讀,正確性很容易得到證明。為了使遞歸調(diào)用不至于無終止地進(jìn)行下去,實際上有效的遞歸調(diào)用函數(shù)(或過程)應(yīng)包括兩部分:遞推規(guī)則(方法),終止條件。例如:求n!第29頁,共54頁,2023年,2月20日,星期六Fact(n)=1當(dāng)n=0時終止條件n*fact(n-1)當(dāng)n>0時遞推規(guī)則
為保證遞歸調(diào)用正確執(zhí)行,系統(tǒng)設(shè)立一個“遞歸工作棧”,作為整個遞歸調(diào)用過程期間使用的數(shù)據(jù)存儲區(qū)。每一層遞歸包含的信息如:參數(shù)、局部變量、上一層的返回地址構(gòu)成一個“工作記錄”。每進(jìn)入一層遞歸,就產(chǎn)生一個新的工作記錄壓入棧頂;每退出一層遞歸,就從棧頂彈出一個工作記錄。第30頁,共54頁,2023年,2月20日,星期六
從被調(diào)函數(shù)返回調(diào)用函數(shù)的一般步驟:(1)若棧為空,則執(zhí)行正常返回。⑵從棧頂彈出一個工作記錄。⑶將“工作記錄”中的參數(shù)值、局部變量值賦給相應(yīng)的變量;讀取返回地址。⑷將函數(shù)值賦給相應(yīng)的變量。(5)轉(zhuǎn)移到返回地址。第31頁,共54頁,2023年,2月20日,星期六1
隊列的基本概念
隊列(Queue):也是運算受限的線性表。是一種先進(jìn)先出(FirstInFirstOut,簡稱FIFO)的線性表。只允許在表的一端進(jìn)行插入,而在另一端進(jìn)行刪除。
隊首(front)
:允許進(jìn)行刪除的一端稱為隊首。
隊尾(rear)
:允許進(jìn)行插入的一端稱為隊尾。例如:排隊購物。操作系統(tǒng)中的作業(yè)排隊。先進(jìn)入隊列的成員總是先離開隊列。
3.4
隊列3.4.1
隊列及其基本概念第32頁,共54頁,2023年,2月20日,星期六
隊列中沒有元素時稱為空隊列。在空隊列中依次加入元素a1,a2,…,an之后,a1是隊首元素,an是隊尾元素。顯然退出隊列的次序也只能是a1,a2,…,an,即隊列的修改是依先進(jìn)先出的原則進(jìn)行的,如圖3-5所示。a1,a2,…,an出隊入隊隊尾隊首圖3-5隊列示意圖2
隊列的抽象數(shù)據(jù)類型定義ADTQueue{數(shù)據(jù)對象:D={ai|ai∈ElemSet,i=1,2,…,n,n>=0}第33頁,共54頁,2023年,2月20日,星期六數(shù)據(jù)關(guān)系:R={<ai-1,ai>|ai-1,ai∈D,i=2,3,…,n}約定a1端為隊首,an端為隊尾?;静僮鳎篊reate():創(chuàng)建一個空隊列;EmptyQue():若隊列為空,則返回true,否則返回flase;??InsertQue(x):向隊尾插入元素x;DeleteQue(x):刪除隊首元素x;}ADTQueue第34頁,共54頁,2023年,2月20日,星期六3隊列的順序表示和實現(xiàn)(簡)
利用一組連續(xù)的存儲單元(一維數(shù)組)
依次存放從隊首到隊尾的各個元素,稱為順序隊列。對于隊列,和順序棧相類似,也有動態(tài)和靜態(tài)之分。本部分介紹的是靜態(tài)順序隊列,其類型定義如下:#defineMAX_QUEUE_SIZE100typedefstructqueue{ElemTypeQueue_array[MAX_QUEUE_SIZE];intfront;intrear;}SqQueue;第35頁,共54頁,2023年,2月20日,星期六隊列的順序存儲結(jié)構(gòu)
設(shè)立一個隊首指針front,一個隊尾指針rear
,分別指向隊首和隊尾元素。
◆初始化:front=rear=0。
◆入隊:將新元素插入rear所指的位置,然后rear加1。
◆出隊:刪去front所指的元素,然后加1并返回被刪元素。
◆隊列為空:front=rear。◆隊滿:rear=MAX_QUEUE_SIZE-1或front=rear。第36頁,共54頁,2023年,2月20日,星期六
在非空隊列里,隊首指針始終指向隊頭元素,而隊尾指針始終指向隊尾元素的下一位置。
順序隊列中存在“假溢出”現(xiàn)象。因為在入隊和出隊操作中,頭、尾指針只增加不減小,致使被刪除元素的空間永遠(yuǎn)無法重新利用。因此,盡管隊列中實際元素個數(shù)可能遠(yuǎn)遠(yuǎn)小于數(shù)組大小,但可能由于尾指針?biāo)瘸鱿蛄靠臻g的上界而不能做入隊操作。該現(xiàn)象稱為假溢出。如圖3-6所示是數(shù)組大小為5的順序隊列中隊首、隊尾指針和隊列中元素的變化情況。因此,目前很少使用。第37頁,共54頁,2023年,2月20日,星期六
(a)空隊列Q.frontQ.rear入隊3個元素a3a2a1Q.frontQ.rear(c)出隊3個元素Q.frontQ.rear(d)入隊2個元素a5a4Q.frontQ.rear圖3-6隊列示意圖第38頁,共54頁,2023年,2月20日,星期六3.4.3
循環(huán)隊列為充分利用向量空間,克服上述“假溢出”現(xiàn)象的方法是:將為隊列分配的向量空間看成為一個首尾相接的圓環(huán),并稱這種隊列為循環(huán)隊列(CircularQueue)。在循環(huán)隊列中進(jìn)行出隊、入隊操作時,隊首、隊尾指針仍要加1,朝前移動。只不過當(dāng)隊首、隊尾指針指向向量上界(MAX_QUEUE_SIZE-1)時,其加1操作的結(jié)果是指向向量的下界0。這種循環(huán)意義下的加1操作可以描述為:if(i+1==MAX_QUEUE_SIZE)i=0;elsei++;其中:i代表隊首指針(front)或隊尾指針(rear)第39頁,共54頁,2023年,2月20日,星期六用模運算可簡化為:i=(i+1)%MAX_QUEUE_SIZE;顯然,為循環(huán)隊列所分配的空間可以被充分利用,除非向量空間真的被隊列元素全部占用,否則不會上溢。因此,真正實用的順序隊列是循環(huán)隊列。例:設(shè)有循環(huán)隊列QU[0,5],其初始狀態(tài)是front=rear=0,各種操作后隊列的頭、尾指針的狀態(tài)變化情況如下圖3-7所示。123450(a)空隊列frontrear123450(b)d,e,b,g入隊frontdebgrear123450(c)d,e出隊bgfrontrear第40頁,共54頁,2023年,2月20日,星期六入隊時尾指針向前追趕頭指針,出隊時頭指針向前追趕尾指針,故隊空和隊滿時頭尾指針均相等。因此,無法通過front=rear來判斷隊列“空”還是“滿”。解決此問題的方法是:約定入隊前,測試尾指針在循環(huán)意義下加1后是否等于頭指針,若相等則認(rèn)為隊滿。即:◆rear所指的單元始終為空。123450(d)i,j,k入隊bgfrontijkrear123450(e)b,g出隊ijkrearfront123450(f)r,p,s,t入隊ijkfrontrprear圖3-7循環(huán)隊列操作及指針變化情況第41頁,共54頁,2023年,2月20日,星期六◆循環(huán)隊列為空:front=rear?!粞h(huán)隊列滿:(rear+1)%MAX_QUEUE_SIZE
=front。循環(huán)隊列的基本操作1循環(huán)隊列的初始化SqQueueInit_CirQueue(void){SqQueueQ;Q.front=Q.rear=0;return(Q);}第42頁,共54頁,2023年,2月20日,星期六
2入隊操作StatusInsert_CirQueue(SqQueueQ,ElemTypee)/*將數(shù)據(jù)元素e插入到循環(huán)隊列Q的隊尾*/{if((Q.rear+1)%MAX_QUEUE_SIZE==Q.front)returnERROR;/*隊滿,返回錯誤標(biāo)志*/Q.Queue_array[Q.rear]=e;/*元素e入隊*/Q.rear=(Q.rear+1)%MAX_QUEUE_SIZE;/*隊尾指針向前移動*/returnOK;/*入隊成功*/}第43頁,共54頁,2023年,2月20日,星期六
3出隊操作StatusDelete_CirQueue(SqQueueQ,ElemType*x
)/*將循環(huán)隊列Q的隊首元素出隊*/{if(Q.front==Q.rear)returnERROR;/*隊空,返回錯誤標(biāo)志*/*x=Q.Queue_array[Q.front];/*取隊首元素*/Q.front=(Q.front+1)%MAX_QUEUE_SIZE;
/*隊首指針向后移動*/returnOK;}第44頁,共54頁,2023年,2月20日,星期六1隊列的鏈?zhǔn)酱鎯Ρ硎?/p>
隊列的鏈?zhǔn)酱鎯Y(jié)構(gòu)簡稱為鏈隊列,它是限制僅在表頭進(jìn)行刪除操作和表尾進(jìn)行插入操作的單鏈表。需要兩類不同的結(jié)點:數(shù)據(jù)元素結(jié)點,隊列的隊首指針和隊尾指針的結(jié)點,如圖3-8所示。3.4.2
隊列的鏈?zhǔn)奖硎竞蛯崿F(xiàn)數(shù)據(jù)元素結(jié)點類型定義:typedefstructQnode{ElemTypedata;structQnode*next;}QNode;數(shù)據(jù)元素結(jié)點data指針結(jié)點frontrear圖3-8鏈隊列結(jié)點示意圖第45頁,共54頁,2023年,2月20日,星期六指針結(jié)點類型定義:typedefstructlink_queue{QNode*front;//隊頭指針Qnode*rear;//隊尾指針}Link_Queue;2鏈隊運算及指針變化
鏈隊的操作實際上是單鏈表的操作,只不過是刪除在表頭進(jìn)行,插入在表尾進(jìn)行。插入、刪除時分別修改不同的指針。鏈隊運算及指針變化如圖3-9所示。第46頁,共54頁,2023年,2月20日,星期六圖3-9隊列操作及指針變化(a)空隊列frontrear∧(b)x入隊x∧frontrear(c)y再入隊y∧frontrearx(d)x出隊y∧xfrontrear第47頁,共54頁,2023年,2月20日,星期六
3鏈隊列的基本操作⑴
鏈隊列的初始化LinkQueue*Init_LinkQueue(void){LinkQueue*Q;QNode*p;p=(QNode*)malloc(sizeof(QNode));/*開辟頭結(jié)點*/p->next=NULL;Q=(LinkQueue*)malloc(sizeof(LinkQueue));
/*開辟鏈隊的指針結(jié)點*/Q.front=Q.rear=p;return(Q);}第48頁,共54頁,2023年,2月20日,星期六
⑵
鏈隊列的入隊操作
在已知隊列的隊尾插入一個元素e,即修改隊尾指針(Q.rear)。StatusInsert_CirQueue(LinkQueue*Q,ElemTypee)/*將數(shù)據(jù)元素e插入到鏈隊列Q的隊尾*/{p=(QNode*)malloc(sizeof(QNode));if(!p)returnERROR;/*申請新結(jié)點失敗,返回錯誤標(biāo)志*/p->data=e;p->next=NULL;/*形成新結(jié)點*/Q.rear->next=p;Q.rear=p;/*新結(jié)點插入到隊尾*/re
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 信訪合同范本
- 單位采購柜子合同范本
- 出售餐飲椅子合同范本
- 單位同意入職合同范本
- 出租轉(zhuǎn)讓吊車合同范本
- 個人購買黃金合同范本
- 信息咨詢合作合同范本
- 農(nóng)資商店用工合同范本
- 單位用人聘用合同范本
- 單位買社保合同范本
- 學(xué)校垃圾處理運輸服務(wù)合同
- 廣西2025年01月南寧市良慶區(qū)公開考試招考專職化城市社區(qū)工作者筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- 統(tǒng)編版(2025)七年級下冊道德與法治教學(xué)計劃
- 七年級數(shù)學(xué)下冊 第11章 單元測試卷(蘇科版 2025年春)
- 2024年天津市建筑安全員A證考試題庫及答案
- 中國肥胖及代謝疾病外科治療指南(2024版)
- 《人力資源管理》全套教學(xué)課件
- 部編人教版語文小學(xué)六年級下冊第四單元主講教材解讀(集體備課)
- (2024年)師德師風(fēng)學(xué)習(xí)內(nèi)容教師師德師風(fēng)培訓(xùn)內(nèi)容通用多篇
- GB/T 3452.3-2005液壓氣動用O形橡膠密封圈溝槽尺寸
- 圖集吊車軌道聯(lián)結(jié)及車擋05G525.doc
評論
0/150
提交評論