




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第3章棧和隊列3.1棧
3.2隊列
3.3應用數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列本章學習目標理解棧的定義及其基本運算掌握順序棧和鏈棧的各種操作實現(xiàn)理解隊列的定義及其基本運算掌握循環(huán)隊列和鏈隊列的各種操作實現(xiàn)學會利用棧和隊列解決一些問題數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列棧和隊列是兩種重要的線性結(jié)構(gòu)棧和隊列是操作受限的線性表出進排隊買票漢諾塔進出數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列3.1棧3.1.1棧的基本概念棧:限制僅在表的一端進行插入和刪除操作的線性表棧的操作特性:按先進后出(FILO)或后進先出(LIFO)的原則
棧頂(top):允許插入和刪除的一端。約定top始終指向棧頂位置。棧底(bottom):不允許插入和刪除的一端。
入棧順序:
e0e1e2…en-2en-1
出棧順序:
en-1en-2…e2e1e0
棧可以對序列實現(xiàn)求逆en-1e0e1en-2…進棧(Push)出棧(Pop)棧頂top棧底bottom
數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列棧的基本運算:InitStack(s)初始化操作,初始化為空棧s。IsEmpty(s)判斷??蘸瘮?shù)。如果s是空棧,返回“true”,否則返回“false”。IsFull(s)判斷棧滿函數(shù)。主要應用在順序存儲結(jié)構(gòu)中,如果s棧滿,返回“true”,否則返回“false”。Push(s,x)壓棧操作。將元素x插入到棧s中,并使x成為新的棧頂元素。Pop(s)出棧函數(shù)。如果棧s非空,那么返回棧頂元素,并刪除該棧頂元素,否則返回空值NULL。GetTop(s)獲取棧頂元素。如果棧s非空,那么返回值為棧頂元素,否則返回空值NULL。EmptyStack(s)清空棧操作。將棧s中的所有元素清除掉,使之成為一個空棧。DestroyStack()銷毀棧。釋放棧占用的存儲空間。數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列棧有兩種存儲結(jié)構(gòu):順序存儲結(jié)構(gòu)和鏈式存儲結(jié)構(gòu)。
3.1.2棧的順序存儲結(jié)構(gòu)
順序棧:順序存儲結(jié)構(gòu)的棧。順序棧:用一組連續(xù)的存儲單元存放自棧底到棧頂?shù)臄?shù)據(jù)元素,一般用一維數(shù)組表示棧頂指針:指示棧頂位置
ABACBA(a)空棧(b)元素A進棧(c)元素B、C進棧(d)出棧一次(e)出棧二次top-1toptoptoptop-14321043210432104321043210數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列順序棧類型定義:
#defineStackSize100/*順序棧的初始分配空間*/typedefstruct{DataTypedata[StackSize];/*保存棧中元素*/inttop;/*棧指針*/}SeqStack;top為int型,取值范圍為0--StackSize-1。top=-l表示???;top=StackSize-1表示棧滿。棧的長度:棧頂指針top+1數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列順序棧的基本運算:(1)初始化棧運算功能:創(chuàng)建一個空棧,并將初始化棧頂下標top=-1。intInitStack(SeqStack*&sq){sq=(SeqStack*)malloc(sizeof(SeqStack));if(!sq){printf(“memoryisnotenough!”);return0;}sq->top=-1;return1;
}數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列(2)進棧運算功能:棧頂指針加1,將進棧元素放進棧頂指針所指的位置上。
intPush(SeqStack*sq,DataTypex){if(sq->top==StackSize-1)/*棧滿*/return0;else{sq->top++;sq->data[sq->top]=x;return1;}}數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列(3)出棧運算功能:先將棧頂元素取出,然后將棧頂指針減1。intPop(SeqStack*sq,DataType&x){if(sq->top==-1)/*???/return0;else{x=sq->data[sq->top];sq->top--;return1;}}數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列(4)取棧頂元素運算功能:將棧中top處的元素取出賦給變量x。intGetTop(SeqStack*sq,DataType&x){if(sq->top==-1)/*???/return0;else{x=sq->data[sq->top];return1;}}數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列(5)判斷棧空運算算法功能:若棧為空(top==-1)則返回值l,否則返回值0。intStackEmpty(SeqStack*sq){if(sq->top==-1)return1;elsereturn0;}數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列3.1.3棧的鏈式存儲結(jié)構(gòu)鏈棧:棧的鏈式存儲結(jié)構(gòu)。第一個結(jié)點為棧頂結(jié)點優(yōu)點:鏈式棧無棧滿問題,空間可擴充特點:插入與刪除僅在棧頂處執(zhí)行…∧ls棧頂棧底datanext(棧頂指針)鏈棧的類型定義:typedefstructstnod{DataTypedata;/*存儲結(jié)點數(shù)據(jù)*/structstnode*next;/*指針域*/}LinkStack;數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列棧的基本運算算法:
(1)初始化棧運算功能:創(chuàng)建一個帶頭結(jié)點的鏈棧,頭結(jié)點指針ls;用ls->next=NULL標識棧為空棧。
voidInitStack(LinkStack*&ls){ls=(LinkStack*)malloc(sizeof(LinkStack));ls->next=NULL;}數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列(2)判斷??者\算功能:若棧為空則返回值1,否則返回值0。intStackEmpty(LinkStack*ls){if(ls->next==NULL)return1;elsereturn0;}數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列
(3)進棧運算
voidPush(LinkStack*ls,DataTypex)
{LinkStack*p;p=(LinkStack*)malloc(Sizeof(LinkStack));p->data=x;p->next=ls->next;ls->next=p;}數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列(4)出棧運算功能:將棧頂結(jié)點的data域值賦給x,然后刪除該棧頂結(jié)點。
intPop(LinkStack*ls,DataType&x){LinkStack*p;if(ls->next==NULL)/*???,下溢出*/return0;else{p=ls->next;x=p->data;ls->next=p->next;free(p);return1;}}數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列(5)取棧頂元素運算算法
功能:將棧頂結(jié)點的data域值賦給x。intGetTop(LinkStack*ls,DataType&x){if(ls->next==NULL)/*棧空,下溢出*/return0;else{x=ls->next->data;return1;}}數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列3.2隊列3.2.1隊列的基本概念隊列:限制插入操作只能在一端進行,而刪除操作只能在另一端進行的線性表操作特性:按先進先出(FIFO)或后進后出(LILO)的原則。隊首(front):能進行刪除的一端隊尾(rear):能進行插入操作的一端。出隊入隊隊首(front)隊尾(rear)數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列隊列的基本操作主要:1)InitQueue(Q):構(gòu)造一個空隊列Q。2)QueueEmpty(Q):判斷隊列是否為空。3)QueueLength(Q):求隊列的長度。4)GetHead(Q):返回Q的隊頭元素,不改變隊列狀態(tài)。5)EnQueue(Q,x):插入元素x為Q的新的隊尾元素。6)DeQueue(Q):刪除Q的隊頭元素。7)C1earQueue(Q):清除隊列Q中的所有元素。數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列隊列有兩種存儲表示:順序隊列和鏈隊列。3.2.2隊列的鏈式存儲結(jié)構(gòu)…^front隊首指針
隊首
隊尾rear隊尾指針鏈隊:鏈式存儲結(jié)構(gòu)的隊列;為一個同時帶有首指針和尾指針的單鏈表隊頭在鏈頭,隊尾在鏈尾。鏈式隊列在進隊時無隊滿問題,但有隊空問題。數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列鏈隊的類型定義:
typedefstructQNode{DataTypedata;structQNode*next;}QType;/*鏈隊中結(jié)點的類型*/typedefstructqptr{QType*front,*rear;}LinkQueue;/*鏈隊類型*/隊空的條件:lq->front==lq->next==NULL。數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列鏈隊基本運算算法:(1)初始化隊列運算
功能:置隊列l(wèi)q的rear和front均為NULL。voidInitQueue(LinkQueue*&lq){lq=(LinkQuene*)malloc(sizeof(LinkQuene));lq->rear=lq->front=NULL;/*初始情況*/}數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列(2)入隊運算功能:創(chuàng)建一個新結(jié)點,將其鏈接到鏈隊列的末尾,并由rear指向它。VoidEnQueue(LinkQueue*lq,DataTypex){QType*s;/*創(chuàng)建新結(jié)點,插入到鏈隊的末尾*/s=(QType*)malloc(sizeof(QType));/*創(chuàng)建新結(jié)點,插入到鏈隊的末尾*/s->data=x;s->next=NULL;if(lq->front==NULL&&lq->rear==NULL)/*空隊*/lq->rear=lq->front=s;else{lq->rear->next=s;lq->rear=s;}}數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列(3)出隊運算功能:將front結(jié)點的data域值賦給x,并刪除該結(jié)點。DataTypeDeQueue(LinkQueue*lq){QType*p;DataTypex;if(lq->front==NULL&&lq->rear==NULL)/*空隊*/exit(-1);p=lq->front;x=p->data;if(lq->rear==lq->front)/*若原隊列中只有一個結(jié)點,刪除后隊列變空*/lq->rear=lq->front=NULL;elselq->front=p->next;free(p);returnx;}數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列(4)取隊頭元素運算功能:將front指向結(jié)點的data域值賦給xDataTypeGetHead(LinkQueue*lq){DataTypex;if(lq->front==NULL&&lq->rear==NULL)/*空隊*/exit(-1);x=lq->front->data;returnx;}數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列(5)判斷隊空運算算法功能:若鏈隊為空,則返回1;否則返回0intQueueEmpty(LinkQueue*lq){if(lq->front==NULL&&lq->rear==NULL)return1;elsereturn0;}數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列3.2.3循環(huán)隊列順序隊列:順序存儲結(jié)構(gòu)的隊列,即用一組地址連續(xù)的存儲單元依次存放隊頭到隊尾的元素;順序隊列:實質(zhì)是運算受限的順序表;543210543210543210543210rearfrontbadcfefrontrearrearfrontfrontrear(a)空隊(b)a、b入隊(c)a、b出隊,c、d入隊(d)假溢出數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列3.2.3循環(huán)隊列由于隊列的隊頭和隊尾的位置是變化的,設(shè)立兩個指針front和rear,指針front隊頭,rear指示隊尾下一個元素;每插入一新元素,rear增1,每刪除一元素,front增1。front=rear=0表示空隊列,rear=MAXSIZE表示隊滿。543210543210543210543210rearfrontbadcfefrontrearrearfrontfrontrear(a)空隊(b)a、b入隊(c)a、b出隊,c、d入隊(d)假溢出數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列543210543210543210543210rearfrontbadcfefrontrearrearfrontfrontrear(a)空隊(b)a、b入隊(c)a、b出隊,c、d入隊(d)假溢出避免假溢出有兩種辦法:
1)每次一個元素出隊,將整個隊列向前移動一個位置。
2)采用循環(huán)隊列:將順序隊列的數(shù)據(jù)區(qū)data[0~MAXSIZE-1]看成一個首尾相接的圓環(huán),頭尾指針的關(guān)系不變數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列循環(huán)隊列的類型定義:
#defineMAXSIZE100/*最大隊列長度*/typedefstruct{datatypedata[MAXSIZE];/*存儲隊列的數(shù)據(jù)空間*/intfront;/*隊頭指針,若隊列不空,則指向隊頭元素*/intrear;/*隊尾指針,若隊列不空,則指向隊尾元素的下一個位置*/}SeqQueue;
rearfront0123e4e3數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列循環(huán)隊列特點
rearfront
0123(3)隊空將頭尾連接成一個環(huán),形成循環(huán)隊列。
rear(1)一般情況front0123e4e3
(2)隊滿
e3
e40123reare5rear=fronte6rear=frontfront數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列在入隊時,rear=(rear+1)%MAXSIZE。存儲隊列的數(shù)組就變?yōu)槭孜蚕嘟拥囊粋€環(huán),即為循環(huán)隊列。在出隊時,front=(front+1)%MAXSIZE,實現(xiàn)存儲空間的首尾相接。判斷隊列“空”還是“滿”的處理方法:一是另設(shè)一個標志位以區(qū)別隊列的“空”和“滿”;二是少用一個元素的空間,約定以“隊頭指針在隊尾指針的下一位置(指環(huán)狀的下一位置)上”作為隊列“滿”的標志。數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列543210543210543210dcfedcgfrontrearrearfrontrearfront(a)正常情況(b)隊滿(c)隊空
在循環(huán)隊列中:若front=rear,則稱為隊空;若(rear+1)%maxsize=front,則稱為隊滿。循環(huán)隊列中能裝入的元素個數(shù)為maxsize-1,即浪費一個存儲單元,但是這樣可以給操作帶來較大方便。數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列3.循環(huán)隊列的基本操作(1)構(gòu)造空隊列intInitQueue(SeqQueue*&q){q=(SeqQueue*)malloc(sizeof(SeqQueue));
/*開辟一個足夠大的存儲隊列空間*/if(!q)return0;q->front=q->rear=0;
/*將隊列頭尾指針置為零*/return1;}數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列(2)判斷隊空intQueueEmpty(SeqQueue*q){return(q->front==q->rear);
/*如果隊列為空,則返回1,否則返回0*/}數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列(3)入隊
intEnQueue(SeqQueue*q,DataTypex){if((q->rear+1)%MAXSIZE==q->front)
/*判斷隊列是否滿*/{printf("\n循環(huán)隊列滿!”);returnFALSE;/*若隊列滿,則終止*/}q->data[q->rear]=x;/*將元素x入隊*/q->rear=(q->rear+1)%MAXSIZE;/*修改隊尾指針*/returnTRUE;}數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列(4)出隊
DataTypeDeQueue(SeqQueue*q){DataTypex;if(q->front==q->rear)/*判斷隊列是否空*/{printf("\n循環(huán)隊列空!不能做刪除操作!");returnFALSE;/*若隊列空,則終止*/}x=q->data[q->front];/*將隊頭元素出隊并賦給變量x*/q->front=(q->front+1)%MAXSIZE;/*修改隊列頭指針*/returnx;/*將被刪除元素返回*/}數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列3.3應用3.3.1棧的應用【例3.1】
設(shè)計一個算法,判斷一個表達式中符號“(”與“)”、“[”與“]”、“{”與“}”是否匹配。若匹配,則返回1;否則返回0。設(shè)置一個棧st;用i掃描表達式exps,當遇到“(”、“[”、“{”時,將其進棧,遇到“}”、“]”、“)”時,判斷棧頂是否是相匹配的括號。若不是,則退出掃描過程,返回0;否則直至exps掃描完畢為止;若top==-1,則返回1,否則返回0。數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列#defineMax100intmatch(char*exps){charst[Max];inttop=-1,i=0;intnomatch=0;while(exps[i]!=’\0'&&nomatch==0){switch(exps[i]){case'(':top++;st[top]=exps[i];break;case'[':top++;t[top]=exps[i];break;case'{':top++;t[top]=exps[i];break;
case')':if(exps[top]=='(')top--;elsenomatch=l;break;case']':if(exps[top]==’]’)top--;elsenomatch=1;break;case'}':if(exps[top]==’{‘)top--;elsenomatch=l;break;}i++;}if(nomatch==0&&top==-1)
/*??涨曳柶ヅ鋭t返回l*/return1;elsereturn0;/*否則返回0*/}數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列【例3.2】數(shù)制轉(zhuǎn)換問題。把一個非負十進制整數(shù)轉(zhuǎn)換成n(2≤n≤35)進制數(shù),其中各位的系數(shù)如果大于9的依次用大寫英文字母A~Z表示。十進制整數(shù)x轉(zhuǎn)換成n進制數(shù)的法則是:對x除n取余,直到整商為0為止,先得到的余數(shù)需要后輸出。例如,十進制整數(shù)83轉(zhuǎn)換成8進制數(shù)的過程如下圖所示,結(jié)果為(123)8。數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列Typedef****SeqStack;main(){ intx,n; SeqStack*stack; InitStack(stack);
/*初始化棧stack*/ do { printf("x="); scanf("%d",&x); printf("n="); scanf("%d",&n); }while(n<2||n>35||x<0);/*輸入有效數(shù)據(jù),x是十進制數(shù),n是進制*/while(x)/*除n取余,余數(shù)保存在堆棧中*/
{ Push(stack,x%n); x/=n;} while(!ISEmpty(stack))/*依次出棧,直到???/ { Pop(stack,&x); if(x<10) printf("%c",x+'0'); /*輸出位的系數(shù),范圍’0’~’9’*/ else printf("%c",x+'A'-10); /*輸出位的系數(shù),范圍’A’~’Z’*/ } printf("\n"); DestroyStack(stack);}數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列【例3.3】利用一個棧逆置一個帶頭結(jié)點的單鏈表,已知head是帶頭結(jié)點的單鏈表(a1,a2,…,an)(其中n≥0)。說明如下:
typedefintDataType;
typedefstructnode{DataTypedata;
structnode*next;
}LinkList;
LinkList*head;請設(shè)計一個算法,利用一個順序棧將上述單鏈表實現(xiàn)逆置利用一個順序棧將單鏈表(a1,a2,…,an)(其中
n≥0)逆置為(an,an-l,…,a1)數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列
解題思路:
1)建立一個帶頭結(jié)點的單鏈表head。
2)輸出該單鏈表。
3)建立一個空棧s(順序棧)。
4)依次將單鏈表的數(shù)據(jù)入棧。
5)依次將單鏈表的數(shù)據(jù)出棧,并逐個將出棧的數(shù)據(jù)存入單鏈表的數(shù)據(jù)域(自前向后)。
6)再輸出單鏈表。數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列/*利用順序棧逆置單鏈表程序*/#include<stdio.h>#include<malloc.h>#definemaxsize100/*棧的最大元素數(shù)為100*/typedefintDataType;typedefstructnode/*定義單鏈表結(jié)點類型*/{DataTypedata;structnode*next;}LinkList;LinkList*head;/*定義單鏈表的頭指針*/typedefstruct/*定義順序棧*/{DataTyped[maxsize];inttop;}SeqStack;SeqStacks;/*定義順序棧s,s是結(jié)構(gòu)體變量,s是全局變量*/數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列LinkList*CreatList()/*建立單鏈表*/{LinkList
*p,*q;intn=0;p=q=(LinkList
*)malloc(sizeof(LinkList
t));head=p;p->next=NULL;
/*頭結(jié)點的數(shù)據(jù)域不存放任何東西*/p=(LinkList
*)malloc(sizeof(LinkList
));scanf("%d",&p->data);while(p->data!=-1)
/*輸入-l表示鏈表結(jié)束*/
{n=n+1;q->next=p;q=p;p=(LinkList
*)malloc(sizeof(LinkList
));scanf("%d",&p->data);}
q->next=NULL;free(p)return(head);}數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列voidprint(LinkList*head)
/*輸出單鏈表*/{LinkList
*p;p=head->next;if(p==NULL)printf("Thisisanempty1ist.\n");else{do{printf("%6d",p->data);p=p->next;}while(p!=NULL);printf("\n");}}數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列SeqStackInitStack()
/*構(gòu)造一個空棧s*/{s.top=-1;returns;}數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列intpush(SeqStack*s,DataTypex)/*入棧,此處s是指向順序棧的指針*/{if((*s).top==maxsize-1)/*(*s).top即為s->top,下同*/{printf("棧已滿,不能入棧!\n");return0;}
else{(*s).top++;/*棧頂指針上移*/(*s).d[(*s).top]=x;/*將x存入棧中*/returnx;}}數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列DataTypepop(SeqStack*s)/*出棧,s是指向順序棧的指針*/{DataTypey;if((*s).top==-1){printf("棧為空,無法出棧!\n");return0;}else{y=(*s).d[(*s).top];/*棧頂元素出棧,存入y中*/(*s).top--;/*棧頂指針下移*/returny;}}數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列intStackEmpty(SeqStacks)/*判棧空,此處s是結(jié)構(gòu)體變量*/{returns.top==-1;}intStackFull(SeqStacks)/*判棧滿,此處s是結(jié)構(gòu)體變量*/{returns.top==maxsize-1;}數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列LinkList*backlinklist(LinkList*head)/*利用順序棧s逆置單鏈表head*/{LinkList*p;p=head->next;initstack();while(p){push(&s,p->data);/*單鏈表的數(shù)據(jù)依次入棧s*/p=p->next;}p=head->next;while(!stackempty(s)){p->data=pop(&s);/*數(shù)據(jù)出棧依次存入單鏈表的數(shù)據(jù)域*/p=p->next;}return(head);}數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列voidmain(){linklist*head;head=creatlist();print(head);head=backlinklist(head);print(head);}數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列3.3.2隊列的應用【例3.4】打印楊輝三角形是一個初等數(shù)學問題。系數(shù)表中的第i行有i+1個數(shù),除了第1個和最后一個數(shù)為1外,其余的數(shù)則為上一行中位于其左、右的兩數(shù)之和(如圖3.10所示)。數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列分析第
i行元素與第i+1行元素的關(guān)系目的是從前一行的數(shù)據(jù)可以計算下一行的數(shù)據(jù)數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列從第i
行數(shù)據(jù)計算并存放第i+1行數(shù)據(jù)數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列#defineMAXSIZE10/*定義隊列的最大長度*/#include<stdio.h>typedefintdatatype;typedefstruct{intdata[MAXSIZE];intfront;intrear;}SeqQueue;數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列SeqQueue*InitQueue(){SeqQueue*q;
q=(SeqQueue*)malloc(sizeof(SeqQueue));q->front=q->rear=0;returnq;}
數(shù)據(jù)結(jié)構(gòu)第3章棧和隊列voidEnQueue(SeqQueue*q,datatypex){if((q->rear+1)%MA
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 臨時鍋爐工用工合同標準文本
- 技術(shù)培訓課程安排計劃
- 2025購銷合同簡易范本
- 轉(zhuǎn)變思維方式的年度計劃
- 臨時變更合同標準文本
- 從化學校食堂承包合同標準文本
- 2025護理員用工合同
- 公寓合伙合同范例
- 上海學校食堂外包合同標準文本
- 2025高性能單縱模固體激光器采購合同
- 物流運輸過程中的法律法規(guī)試題及答案
- 專升本思政全新模式試題及答案
- 2024年內(nèi)蒙古地質(zhì)礦產(chǎn)集團有限公司運營管理分公司招聘考試真題
- Unit 7 A Day to Remember Section A (課件)-2024-2025學年英語人教版7年級下冊
- 中央2025年中央社會工作部所屬事業(yè)單位招聘11人筆試歷年參考題庫附帶答案詳解
- 暨南大道西延惠山段(江陰界-S261)新建工程報告書
- 健康咨詢與服務推廣協(xié)議
- 《新能源汽車技術(shù)》課件-充電系統(tǒng)結(jié)構(gòu)和工作原理
- 人防工程基本知識(PPT184頁)
- 山東中醫(yī)藥大學中醫(yī)學(專升本)學士學位考試復習題
- 高一班守紀律講規(guī)矩主題班會
評論
0/150
提交評論