利用队列实现车厢编组
生活随笔
收集整理的這篇文章主要介紹了
利用队列实现车厢编组
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
利用隊(duì)列實(shí)現(xiàn)車(chē)廂編組問(wèn)題。假設(shè)隊(duì)列元素是char類(lèi)型,‘H’表示硬座,‘S’表示軟臥,隊(duì)列A表示一組硬座和臥鋪混編的車(chē)廂。要求把隊(duì)列A中的硬座車(chē)廂移動(dòng)到隊(duì)列B,隊(duì)列A中的臥鋪車(chē)廂移動(dòng)到隊(duì)列C,同時(shí)保留原有硬座車(chē)廂之間和軟臥車(chē)廂之間的先后順序不變。如HSHHSHSSHH,分別輸出軟臥車(chē)組:SSSS和硬座車(chē)組:HHHHHH。
#include <stdio.h> #include <stdlib.h> #define OK 1 #define ERROR 0 #define OVERFLOW -2 #define TRUE 1 #define FALSE 0 //typedef 為重定義,將一個(gè)char類(lèi)型數(shù)據(jù)重新定義為ElemType,在以后的程序中出現(xiàn)的ElemType 就可以理解為char類(lèi)型。 typedef char ElemType; typedef int Status; //----- 隊(duì)列的順序存儲(chǔ)表示 ----- #define MAXQSIZE 30 // 存儲(chǔ)空間的初始分配量typedef struct {ElemType *base; //存儲(chǔ)空間的基址int front; //隊(duì)頭位標(biāo)int rear; //隊(duì)尾位標(biāo), 指示隊(duì)尾元素的下一位置int maxSize; //存儲(chǔ)容量 } SqQueue; //別名// 構(gòu)造一個(gè)空隊(duì)列 Q Status InitQueue(SqQueue &Q) {//Q->rear指向頭結(jié)點(diǎn)Q.base = (ElemType*)malloc(MAXQSIZE * sizeof(ElemType));if(!Q.base) exit(OVERFLOW);Q.front = Q.rear = 0;Q.maxSize = MAXQSIZE;return OK; }//判隊(duì)列是否為空 Status QueueEmpty (SqQueue Q) {if(Q.rear == Q.front) return TRUE;else return FALSE ; }//入隊(duì)函數(shù) Status EnQueue(SqQueue &Q, ElemType e) { //請(qǐng)?jiān)诖颂顚?xiě)代碼,將該算法補(bǔ)充完整,參見(jiàn)書(shū)本和課件相關(guān)章節(jié)if((Q.rear+1) % MAXQSIZE == Q.front)//隊(duì)列已滿return ERROR;Q.base[Q.rear] = e;//插入隊(duì)尾Q.rear = (Q.rear +1) % MAXQSIZE;//尾部指針后移,如果到最后則轉(zhuǎn)到頭部return OK; }//出隊(duì)函數(shù) Status DeQueue(SqQueue &Q, ElemType &e) { //請(qǐng)?jiān)诖颂顚?xiě)代碼,將該算法補(bǔ)充完整,參見(jiàn)書(shū)本和課件相關(guān)章節(jié)if(Q.front == Q.rear) //隊(duì)列空return ERROR;//返回隊(duì)頭元素e = Q.base[Q.front]; //隊(duì)頭指針后移,如到最后轉(zhuǎn)到頭部Q.front = (Q.front + 1) % MAXQSIZE; return OK; }//輸出循環(huán)隊(duì)列函數(shù) void OutQueue(SqQueue Q) { ElemType e;if(QueueEmpty(Q)){printf("這是一個(gè)空隊(duì)列!");} else {while(QueueEmpty(Q) == FALSE){DeQueue(Q,e);printf("%6c", e);}printf("\n");} }void Arrange(SqQueue A, SqQueue &B, SqQueue &C) {ElemType e;//請(qǐng)?jiān)诖颂顚?xiě)代碼,將該算法補(bǔ)充完整,參見(jiàn)書(shū)本或課件相關(guān)章節(jié)InitQueue(B);InitQueue(C);while (FALSE == QueueEmpty(A)) {DeQueue(A, e);if(e == 'H') EnQueue(B, e);else EnQueue(C, e);}}//主函數(shù) int main() {SqQueue A, B, C;ElemType e;InitQueue(A);printf("請(qǐng)輸入軟臥S和硬座H的一個(gè)組合車(chē)組:");for(scanf("%c", &e); e != '\n';) {EnQueue(A, e);scanf("%c", &e);}OutQueue(A);Arrange(A, B, C);printf("硬座車(chē)組:");OutQueue(B);printf("軟臥車(chē)組:");OutQueue(C); return 0; }總結(jié)
以上是生活随笔為你收集整理的利用队列实现车厢编组的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 队列的应用、栈的应用
- 下一篇: 队列(常用数据结构之一)