棧的操作(實驗報告)_第1頁
棧的操作(實驗報告)_第2頁
棧的操作(實驗報告)_第3頁
棧的操作(實驗報告)_第4頁
棧的操作(實驗報告)_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、實驗三 棧和隊列3.1實驗?zāi)康模海?) 熟悉棧的特點(先進(jìn)后出)及棧的基本操作,如入棧、出棧等,掌握棧的基本操作在棧的順序存儲結(jié)構(gòu)和鏈?zhǔn)酱鎯Y(jié)構(gòu)上的實現(xiàn);(2) 熟悉隊列的特點(先進(jìn)先出)及隊列的基本操作,如入隊、出隊等,掌握隊列的基本操作在隊列的順序存儲結(jié)構(gòu)和鏈?zhǔn)酱鎯Y(jié)構(gòu)上的實現(xiàn)。3.2 實驗要求:(1) 復(fù)習(xí)課本中有關(guān)棧和隊列的知識;(2) 用C語言完成算法和程序設(shè)計并上機調(diào)試通過;(3) 撰寫實驗報告,給出算法思路或流程圖和具體實現(xiàn)(源程序)、算法分析結(jié)果(包括時間復(fù)雜度、空間復(fù)雜度以及算法優(yōu)化設(shè)想)、輸入數(shù)據(jù)及程序運行結(jié)果(必要時給出多種可能的輸入數(shù)據(jù)和運行結(jié)果)。3.3 基礎(chǔ)實驗實驗

2、1 棧的順序表示和實現(xiàn)實驗內(nèi)容與要求:編寫一個程序?qū)崿F(xiàn)順序棧的各種基本運算,并在此基礎(chǔ)上設(shè)計一個主程序,完成如下功能:(1)初始化順序棧(2)插入元素(3)刪除棧頂元素(4)取棧頂元素(5)遍歷順序棧(6)置空順序棧分析:棧的順序存儲結(jié)構(gòu)簡稱為順序棧,它是運算受限的順序表。對于順序棧,入棧時,首先判斷棧是否為滿,棧滿的條件為:p-top= =MAXNUM-1,棧滿時,不能入棧; 否則出現(xiàn)空間溢出,引起錯誤,這種現(xiàn)象稱為上溢。出棧和讀棧頂元素操作,先判棧是否為空,為空時不能操作,否則產(chǎn)生錯誤。通常棧空作為一種控制轉(zhuǎn)移的條件。注意:(1)順序棧中元素用向量存放(2)棧底位置是固定不變的,可設(shè)置在向

3、量兩端的任意一個端點(3)棧頂位置是隨著進(jìn)棧和退棧操作而變化的,用一個整型量top(通常稱top為棧頂指針)來指示當(dāng)前棧頂位置參考程序:#include#include#define MAXNUM 20#define ElemType int/*定義順序棧的存儲結(jié)構(gòu)*/typedef struct ElemType stackMAXNUM;int top;SqStack;/*初始化順序棧*/void InitStack(SqStack *p)if(!p)printf(Eorror);p-top=-1;/*入棧*/void Push(SqStack *p,ElemType x)if(p-topt

4、op=p-top+1;p-stackp-top=x;elseprintf(Overflow!n);/*出棧*/ElemType Pop(SqStack *p)ElemType x;if(p-top!=0)x=p-stackp-top;printf(以前的棧頂數(shù)據(jù)元素%d已經(jīng)被刪除!n,p-stackp-top);p-top=p-top-1;return(x);elseprintf(Underflow!n);return(0);/*獲取棧頂元素*/ElemType GetTop(SqStack *p)ElemType x;if(p-top!=0)x=p-stackp-top;return(x);

5、elseprintf(Underflow!n);return(0);/*遍歷順序棧*/void OutStack(SqStack *p)int i;printf(n);if(p-toptop;i=0;i-)printf(第%d個數(shù)據(jù)元素是:%6dn,i,p-stacki);/*置空順序棧*/void setEmpty(SqStack *p)p-top= -1;/*主函數(shù)*/main() SqStack *q;int y,cord;ElemType a;doprintf(n);printf(第一次使用必須初始化!n);printf(n);printf(n 主菜單 n);printf(n 1 初始

6、化順序棧 n);printf(n 2 插入一個元素 n);printf(n 3 刪除棧頂元素 n);printf(n 4 取棧頂元素 n);printf(n 5 置空順序棧 n);printf(n 6 結(jié)束程序運行 n);printf(n-n);printf(請輸入您的選擇( 1, 2, 3, 4, 5,6);scanf(%d,&cord);printf(n);switch(cord)case 1:q=(SqStack*)malloc(sizeof(SqStack);InitStack(q);OutStack(q);break;case 2:printf(請輸入要插入的數(shù)據(jù)元素:a=);sca

7、nf(%d,&a);Push(q,a);OutStack(q);break;case 3:Pop(q);OutStack(q);break;case 4:y=GetTop(q);printf(n棧頂元素為:%dn,y);OutStack(q);break;case 5:setEmpty(q);printf(n順序棧被置空!n);OutStack(q);break;case 6:exit(0);while (cordtop=NULL;printf(n已經(jīng)初始化鏈棧!n);/*鏈棧置空*/void setEmpty(LinkStack * s)s-top=NULL; printf(n鏈棧被置空!n

8、);/*入棧*/void pushLstack(LinkStack * s, Elemtype x)StackNode * p;p=(StackNode *)malloc(sizeof(StackNode); /建立一個節(jié)點。p-data=x;p-next=s-top; /由于是在棧頂pushLstack,所以要指向棧頂。s-top=p; /插入/*出棧*/Elemtype popLstack(LinkStack * s)Elemtype x;StackNode * p;p=s-top; /指向棧頂if (s-top =0)printf(n???,不能出棧!n);exit(-1);x=p-dat

9、a; s-top=p-next; /當(dāng)前的棧頂指向原棧的nextfree(p); /釋放return x;/*取棧頂元素*/Elemtype StackTop(LinkStack *s)if (s-top =0)printf(n鏈棧空n);exit(-1);return s-top-data;/*遍歷鏈棧*/void Disp(LinkStack * s)printf(n鏈棧中的數(shù)據(jù)為:n);printf(=n);StackNode * p;p=s-top;while (p!=NULL) printf(%dn,p-data);p=p-next;printf(=n);void main()pri

10、ntf(= 鏈棧操作=nn);int i,m,n,a;LinkStack * s;s=(LinkStack *)malloc(sizeof(LinkStack);int cord;doprintf(n);printf(第一次使用必須初始化!n);printf(n);printf(n 主菜單 n);printf(n 1 初始化鏈棧 n);printf(n 2 入棧 n);printf(n 3 出棧 n);printf(n 4 取棧頂元素 n);printf(n 5 置空鏈棧 n);printf(n 6 結(jié)束程序運行 n);printf(n-n);printf(請輸入您的選擇( 1, 2, 3,

11、4, 5,6);scanf(%d,&cord);printf(n);switch(cord)case 1: InitStack(s);Disp(s);break;case 2:printf(輸入將要壓入鏈棧的數(shù)據(jù)的個數(shù):n=); scanf(%d,&n); printf(依次將%d個數(shù)據(jù)壓入鏈棧:n,n);for(i=1;i=n;i+)scanf(%d,&a);pushLstack(s,a);Disp(s);break;case 3:printf(n出棧操作開始!n);printf(輸入將要出棧的數(shù)據(jù)個數(shù):m=);scanf(%d,&m);for(i=1;i=m;i+)printf(n第%d次

12、出棧的數(shù)據(jù)是:%d,i,popLstack(s);Disp(s);break;case 4:printf(nn鏈棧的棧頂元素為:%dn,StackTop(s);printf(n);break;case 5:setEmpty(s);Disp(s);break;case 6:exit(0);while (cord=6);實驗3 隊列的順序表示和實現(xiàn)實驗內(nèi)容與要求編寫一個程序?qū)崿F(xiàn)順序隊列的各種基本運算,并在此基礎(chǔ)上設(shè)計一個主程序,完成如下功能:(1)初始化隊列(2)建立順序隊列(3)入隊(4)出隊(5)判斷隊列是否為空(6)取隊頭元素(7)遍歷隊列分析:隊列的順序存儲結(jié)構(gòu)稱為順序隊列,順序隊列實際上

13、是運算受限的順序表。入隊時,將新元素插入rear所指的位置,然后將rear加1。出隊時,刪去front所指的元素,然后將front加1并返回被刪元素。順序隊列中的溢出現(xiàn)象:(1) 下溢現(xiàn)象。當(dāng)隊列為空時,做出隊運算產(chǎn)生的溢出現(xiàn)象?!跋乱纭笔钦,F(xiàn)象,常用作程序控制轉(zhuǎn)移的條件。(2) 真上溢現(xiàn)象。當(dāng)隊列滿時,做進(jìn)棧運算產(chǎn)生空間溢出的現(xiàn)象。“真上溢”是一種出錯狀態(tài),應(yīng)設(shè)法避免。(3) 假上溢現(xiàn)象。由于入隊和出隊操作中,頭尾指針只增加不減小,致使被刪元素的空間永遠(yuǎn)無法重新利用。當(dāng)隊列中實際的元素個數(shù)遠(yuǎn)遠(yuǎn)小于向量空間的規(guī)模時,也可能由于尾指針已超越向量空間的上界而不能做入隊操作。該現(xiàn)象稱為假上溢現(xiàn)象。

14、注意:(1)當(dāng)頭尾指針相等時,隊列為空。(2)在非空隊列里,隊頭指針始終指向隊頭元素,尾指針始終指向隊尾元素的下一位置。參考程序:#include #include #define MAXNUM 100#define Elemtype int#define TRUE 1#define FALSE 0typedef structElemtype queueMAXNUM; int front; int rear;sqqueue; /*隊列初始化*/int initQueue(sqqueue *q) if(!q) return FALSE;q-front=-1;q-rear=-1;return TR

15、UE; /*入隊*/int append(sqqueue *q, Elemtype x) if(q-rear=MAXNUM-1) return FALSE; q-rear+;q-queueq-rear=x; return TRUE;/*出隊*/Elemtype Delete(sqqueue *q)Elemtype x;if (q-front=q-rear) return 0;x=q-queue+q-front;return x;/*判斷隊列是否為空*/int Empty(sqqueue *q)if (q-front=q-rear) return TRUE; return FALSE; /*取隊

16、頭元素*/int gethead(sqqueue *q)if (q-front=q-rear) return 0; return(q-queueq-front+1); /*遍歷隊列*/void display(sqqueue *q)int s; s=q-front; if (q-front=q-rear)printf(隊列空!n); else printf(n順序隊列依次為:);while(srear) s=s+1;printf(%dqueues);printf(n); printf(順序隊列的隊尾元素所在位置:rear=%dn,q-rear); printf(順序隊列的隊頭元素所在位置:fr

17、ont=%dn,q-front);/*建立順序隊列*/void Setsqqueue(sqqueue *q)int n,i,m;printf(n請輸入將要入順序隊列的長度:); scanf(%d,&n); printf(n請依次輸入入順序隊列的元素值:n);for (i=0;in;i+) scanf(%d,&m); append(q,m);main() sqqueue *head; int x,y,z,select; head=(sqqueue*)malloc(sizeof(sqqueue); doprintf(n第一次使用請初始化!n);printf(n請選擇操作(1-7):n);print

18、f(=n);printf(1 初始化n);printf(2 建立順序隊列n);printf(3 入隊n); printf(4 出隊 n); printf(5 判斷隊列是否為空n); printf(6 取隊頭元素 n); printf(7 遍歷隊列n);printf(=n);scanf(%d,&select); switch(select) case 1: initQueue(head); printf(已經(jīng)初始化順序隊列!n);break; case 2: Setsqqueue(head); printf(n已經(jīng)建立隊列!n);display(head);break; case 3: prin

19、tf(請輸入隊的值:n ); scanf(%d,&x); append(head,x); display(head); break; case 4: z=Delete(head); printf(n隊頭元素%d已經(jīng)出隊!n,z);display(head); break; case 5: if(Empty(head) printf(隊列空n); else printf(隊列非空n); break; case 6: y=gethead(head); printf(隊頭元素為:%dn,y); break; case 7: display(head); break; while(select=7);

20、實驗4 隊列的鏈?zhǔn)奖硎竞蛯崿F(xiàn)實驗內(nèi)容與要求:編寫一個程序?qū)崿F(xiàn)鏈隊列的各種基本運算,并在此基礎(chǔ)上設(shè)計一個主程序,完成如下功能:(1)初始化并建立鏈隊列(2)入鏈隊列(3)出鏈隊列(4)遍歷鏈隊列分析:隊列的鏈?zhǔn)酱鎯Y(jié)構(gòu)簡稱為鏈隊列。它是限制僅在表頭刪除和表尾插入的單鏈表。注意:(1)和鏈棧類似,無須考慮判隊滿的運算及上溢。(2)在出隊算法中,一般只需修改隊頭指針。但當(dāng)原隊中只有一個結(jié)點時,該結(jié)點既是隊頭也是隊尾,故刪去此結(jié)點時亦需修改尾指針,且刪去此結(jié)點后隊列變空。(3)和單鏈表類似,為了簡化邊界條件的處理,在隊頭結(jié)點前可附加一個頭結(jié)點。參考程序:#include#include#define

21、ElemType inttypedef struct QnodeElemType data;struct Qnode *next;Qnodetype;typedef structQnodetype *front;Qnodetype *rear;Lqueue;/*入鏈隊列*/void Lappend(Lqueue *q,int x)Qnodetype *s; s=(Qnodetype*)malloc(sizeof(Qnodetype);s-data=x;s-next=NULL;q-rear-next=s;q-rear=s;/*初始化并建立鏈隊列*/void creat(Lqueue *q)Qno

22、detype *h;int i,n,x;printf(輸入將建立鏈隊列元素的個數(shù):n= );scanf(%d,&n);h=(Qnodetype*)malloc(sizeof(Qnodetype);h-next=NULL;q-front=h;q-rear=h;for(i=1;ifront=q-rear)printf(隊列為空!n);x=0;elsep=q-front-next;q-front-next=p-next;if(p-next=NULL)q-rear=q-front;x=p-data;free(p);return(x);/*遍歷鏈隊列*/void display(Lqueue *q)Qn

23、odetype *p; p=q-front-next; /*指向第一個數(shù)據(jù)元素節(jié)點 */printf(n鏈隊列元素依次為:);while(p!=NULL)printf(%d-,p-data);p=p-next;printf(nn遍歷鏈隊列結(jié)束! n);main()Lqueue *p;int x,cord;printf(n*第一次操作請選擇初始化并建立鏈隊列!*n );do printf(n 鏈隊列的基本操作n );printf(=n); printf( 主菜單 n); printf(=n);printf( 1 初始化并建立鏈隊列 n);printf( 2 入鏈隊列 n);printf( 3 出

24、鏈隊列 n);printf( 4 遍歷鏈隊列 n);printf( 5 結(jié)束程序運行 n);printf(=n);scanf(%d,&cord);switch(cord)case 1:p=(Lqueue *)malloc(sizeof(Lqueue);creat(p);display(p);break;case 2:printf(請輸入隊列元素的值:x=);scanf(%d,&x);Lappend(p,x);display(p);break;case 3:printf(出鏈隊列元素:x=%dn,Ldelete(p);display(p);break;case 4:display(p);brea

25、k;case 5:exit (0);while (cord=5);3.4 提高實驗實驗1 迷宮的求解實驗內(nèi)容與要求:迷宮只有兩個門,一個叫做入口,另一個叫做出口。把一只老鼠從一個無頂蓋的大盒子的入口處趕進(jìn)迷宮。迷宮中設(shè)置很多隔壁,對前進(jìn)方向形成了多處障礙,在迷宮的唯一出口處放置了一塊奶酪,吸引老鼠在迷宮中尋找通路以到達(dá)出口。求解迷宮問題,即找出從入口到出口的路徑。分析:迷宮問題是棧應(yīng)用的一個典型例子。求解過程可采用回溯法。回溯法是一種不斷試探且及時糾正錯誤的搜索方法。從入口出發(fā),按某一方向向前探索,若能走通(未走過的),即某處可以到達(dá),則到達(dá)新點,否則試探下一方向 ; 若所有的方向均沒有通路,

26、則沿原路返回前一點,換下一個方向再繼續(xù)試探,直到所有可能的通路都探索到,或找到一條通路,或無路可走又返回到入口點。在求解過程中,為了保證在到達(dá)某一點后不能向前繼續(xù)行走(無路)時,能正確返回前一點以便繼續(xù)從下一個方向向前試探,則需要用一個棧保存所能夠到達(dá)的每一點的下標(biāo)及從該點前進(jìn)的方向,棧中保存的就是一條迷宮的通路。為了確保程序能夠終止,調(diào)整時,必須保證曾被放棄過的填數(shù)序列不被再次試驗,即要求按某種有序模型生成填數(shù)序列。給解的候選者設(shè)定一個被檢驗的順序,按這個順序逐一生成候選者并檢驗。參考程序:#include #include #define n1 10 #define n2 10 typed

27、ef struct node int x; /存x坐標(biāo)int y; /存Y坐標(biāo)int c; /存該點可能的下點所在的方向,1表示向右,2向上,3向左,4向右linkstack; linkstack top100; /迷宮矩陣int mazen1n2=1,1,1,1,1,1,1,1,1,1, 0,0,0,1,0,0,0,1,0,1, 1,1,0,1,0,0,0,1,0,1, 1,0,0,0,0,1,1,0,0,1, 1,0,1,1,1,0,0,0,0,1, 1,0,0,0,1,0,0,0,0,0, 1,0,1,0,0,0,1,0,0,1, 1,0,1,1,1,0,1,1,0,1, 1,1,0,0

28、,0,0,0,0,0,1, 1,1,1,1,1,1,1,1,1,1,; int i,j,k,m=0;main() /初始化top,置所有方向數(shù)為左for(i=0;in1*n2;i+) topi.c=1;printf(the maze is:n);/打印原始迷宮矩陣 for(i=0;in1;i+) for(j=0;jn2;j+) printf(mazeij?* : ); printf(n); i=0;topi.x=1;topi.y=0;maze10=2;/*回溯算法*/doif(topi.c5) /還可以向前試探if(topi.x=5 & topi.y=9) /已找到一個組合/打印路徑print

29、f(The way %d is:n,m+);for(j=0;j,topj.x,topj.y);printf(n);/打印選出路徑的迷宮for(j=0;jn1;j+) for(k=0;kn2;k+) if(mazejk=0)printf( );else if(mazejk=2) printf(O );else printf(* );printf(n); mazetopi.xtopi.y=0;topi.c = 1;i-;topi.c += 1;continue;switch (topi.c) /向前試探case 1:if(mazetopi.xtopi.y+1=0)i+;topi.x=topi-1.

30、x;topi.y=topi-1.y+1;mazetopi.xtopi.y=2;elsetopi.c += 1;break;case 2:if(mazetopi.x-1topi.y=0)i+;topi.x=topi-1.x-1;topi.y=topi-1.y;mazetopi.xtopi.y=2;elsetopi.c += 1;break;case 3:if(mazetopi.xtopi.y-1=0)i+;topi.x=topi-1.x;topi.y=topi-1.y-1;mazetopi.xtopi.y=2;elsetopi.c += 1;break;case 4:if(mazetopi.x+

31、1topi.y=0)i+;topi.x=topi-1.x+1;topi.y=topi-1.y;mazetopi.xtopi.y=2;elsetopi.c += 1;break;else /回溯if(i=0) return; /已找完所有解mazetopi.xtopi.y=0;topi.c = 1;i-;topi.c += 1;while(1); 實驗2 停車場管理實驗內(nèi)容與要求:設(shè)停車場內(nèi)只有一個可停放n輛汽車的狹長通道,且只有一個大門可供汽車進(jìn)出。汽車在停車場內(nèi)按車輛到達(dá)時間的先后順序,依次由北向南排列(大門在最南端,最先到達(dá)的第一輛車停放在車場的最北端),若車場內(nèi)已停滿n輛汽車,則后來的汽

32、車只能在門外的便道上等候,一旦有車開走,則排在便道上的第一輛車即可開入;當(dāng)停車場內(nèi)某輛車要離開時,在它之后開入的車輛必須先退出車場為它讓路,待該輛車開出大門外,其它車輛再按原次序進(jìn)入車場,每輛停放在車場的車在它離開停車場時必須按它停留的時間長短交納費用。試為停車場編制按上述要求進(jìn)行管理的模擬程序。分析:綜合利用棧和隊列模擬停車場管理,學(xué)習(xí)利用棧和隊列解決實際問題。以棧模擬停車場,以隊列模擬車場外的便道,按照從終端讀入的輸入數(shù)據(jù)序列進(jìn)行模擬管理。每一組輸入數(shù)據(jù)包括三個數(shù)據(jù)項:汽車“到達(dá)”或“離去”信息、汽車牌照號碼及到達(dá)或離去的時刻,對每一組輸入數(shù)據(jù)進(jìn)行操作后的輸出數(shù)據(jù)為:若是車輛到達(dá),則輸出汽

33、車在停車場內(nèi)或便道上的停車位置;若是車離去;則輸出汽車在停車場內(nèi)停留的時間和應(yīng)交納的費用(在便道上停留的時間不收費)。棧以順序結(jié)構(gòu)實現(xiàn),隊列以鏈表實現(xiàn)。需另設(shè)一個棧,臨時停放為給要離去的汽車讓路而從停車場退出來的汽車,也用順序存儲結(jié)構(gòu)實現(xiàn)。輸入數(shù)據(jù)按到達(dá)或離去的時刻有序。棧中每個元素表示一輛汽車,包含兩個數(shù)據(jù)項:汽車的牌照號碼和進(jìn)入停車場的時刻。設(shè)n=2,輸入數(shù)據(jù)為:(A,1,5),(A,2,10),(D,1,15),(A,3, 20), (A,4,25),(A,5,30),(D,2,35),(D,4,40),(E,0,0)。每一組輸入數(shù)據(jù)包括三個數(shù)據(jù)項:汽車“到達(dá)”或“離去”信息、汽車牌照號

34、碼及到達(dá)或離去的時刻,其中,A表示到達(dá);D表示離去,E表示輸入結(jié)束。參考程序:#include#include#include#define MAX 2 /*車庫容量*/#define price 0.05 /*每車每分鐘費用*/typedef struct timeint hour;int min;Time; /*時間結(jié)點*/typedef struct nodechar num10;Time reach;Time leave;CarNode; /*車輛信息結(jié)點*/typedef struct NODECarNode *stackMAX+1;int top;SeqStackCar; /*模擬

35、車站*/typedef struct carCarNode *data;struct car *next;QueueNode;typedef struct NodeQueueNode *head;QueueNode *rear;LinkQueueCar; /*模擬通道*/void InitStack(SeqStackCar *); /*初始化棧*/ int InitQueue(LinkQueueCar *); /*初始化便道*/int Arrival(SeqStackCar *,LinkQueueCar *); /*車輛到達(dá)*/ void Leave(SeqStackCar *,SeqStac

36、kCar *,LinkQueueCar *); /*車輛離開*/void List(SeqStackCar,LinkQueueCar); /*顯示存車信息*/ void main()SeqStackCar Enter,Temp;LinkQueueCar Wait;int ch;InitStack(&Enter); /*初始化車站*/ InitStack(&Temp); /*初始化讓路的臨時棧*/InitQueue(&Wait); /*初始化通道*/while(1) printf(n1. 車輛到達(dá));printf( 2. 車輛離開);printf( 3. 列表顯示);printf( 4. 退出系

37、統(tǒng)n);while(1)scanf(%d,&ch);if(ch=1&chtop=0;for(i=0;istacks-top=NULL;int InitQueue(LinkQueueCar *Q) /*初始化便道*/Q-head=(QueueNode *)malloc(sizeof(QueueNode);if(Q-head!=NULL)Q-head-next=NULL;Q-rear=Q-head;return(1);else return(-1);void PRINT(CarNode *p,int room) /*打印出站車的信息*/ int A1,A2,B1,B2;printf(n請輸入離開的

38、時間:/*:*/);scanf(%d:%d,&(p-leave.hour),&(p-leave.min);printf(n離開車輛的車牌號為:);puts(p-num);printf(n其到達(dá)時間為: %d:%d,p-reach.hour,p-reach.min);printf(離開時間為: %d:%d,p-leave.hour,p-leave.min);A1=p-reach.hour;A2=p-reach.min;B1=p-leave.hour;B2=p-leave.min;printf(n應(yīng)交費用為: %2.1f元,(B1-A1)*60+(B2-A2)*price);free(p);int

39、 Arrival(SeqStackCar *Enter,LinkQueueCar *W) /*車輛到達(dá)*/ CarNode *p;QueueNode *t;p=(CarNode *)malloc(sizeof(CarNode);flushall();printf(n請輸入車牌號(例:陜A1234):);gets(p-num);if(Enter-toptop+;printf(n車輛在車場第%d位置.,Enter-top);printf(n請輸入到達(dá)時間:/*:*/);scanf(%d:%d,&(p-reach.hour),&(p-reach.min);Enter-stackEnter-top=p

40、;return(1);else /*車場已滿,車進(jìn)便道*/ printf(n該車須在便道等待!);t=(QueueNode *)malloc(sizeof(QueueNode);t-data=p;t-next=NULL; W-rear-next=t;W-rear=t;return(1); void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W) /*車輛離開*/int i, room;CarNode *p,*t;QueueNode *q;/*判斷車場內(nèi)是否有車*/if(Enter-top0) /*有車*/ while(1)

41、 /*輸入離開車輛的信息*/ printf(n請輸入車在車場的位置/1-%d/:,Enter-top);scanf(%d,&room);if(room=1&roomtop) break;while(Enter-toproom) /*車輛離開*/Temp-top+;Temp-stackTemp-top=Enter-stackEnter-top;Enter-stackEnter-top=NULL;Enter-top-; p=Enter-stackEnter-top;Enter-stackEnter-top=NULL;Enter-top-;while(Temp-top=1)Enter-top+;Enter-stackEnter-top=Temp-stackTemp-top;Temp-stackTe

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論