停車場管理(棧和佇列的應用)

2021-09-04 04:37:02 字數 2857 閱讀 5947

設停車場是乙個可以停放n輛汽車的狹長通道,且只有乙個大門可供汽車進出。汽車在停車場內按車輛到達時間的先後順序,依次有北向南排列(大門在最南端,最先到達的第一車停放在車場的最北端),若車場內已停滿n輛車,那麼後來的車只能在門外的便道上等候,一旦有車開走,則排在便道上的第一輛車即可開入;當停車場內某輛車要離開時,在它之後進入的車輛必須先退出車場為它讓路,待該輛車開出大門外,其他車輛再按原次序進入車場,每輛停放在車場的車在它離開停車場時必須按它停留的時間長短交納費用。試為停車場編制按上述要求進行管理的模擬程式。

[實現提示]

以棧模擬停車場,以佇列模擬車場外的便道。每一組輸入資料報括三個資料項:汽車「到達」或「離去」資訊、汽車牌照號碼以及到達或離去的時刻。對每一組輸入資料進行操作後的輸出資訊為:若是車輛到達,則輸出汽車在停車場內或便道上的停車位置;若是車輛離去,則輸出汽車在停車場內停留的時間和應交納的費用(在便道上停車不收費)。棧以順序儲存結構實現,佇列以鍊錶結構實現。

#include#include#define ok 1

#define error 0

#define overflow -2

#include#define price 0.1

using namespace std;

typedef int status;

typedef int elemtype;

const elemtype max_n=2;

/*車的資訊的結構體的定義*/

typedef struct cardatatype;

/*順序棧的儲存結構*/

typedef struct sqstack;

/*佇列的儲存結構*/

typedef struct node qnode,*queueptr;

typedef struct linkqueue;

sqstack s; //臨時停車場

linkqueue qa; //便道

sqstack st; //出停車場時,車輛臨時停放點

/*順序棧的初始化(模擬停車場大小)*/

void initstack(sqstack &s)

/*佇列的初始化(模擬便道和臨時停放點)*/

void initqueue(linkqueue &q)

/*車輛入棧*/

status push(sqstack &s,cardatatype e)

/*入隊*/

void enqueue(linkqueue &q,cardatatype &e)

/*停車場已滿,進入便道*/

void enterqa(linkqueue &qa,cardatatype &car)

/*列印便道停車資訊*/

void printqa(linkqueue qa)else }}

/*列印停車場中的元素*/

void prints(sqstack s)else

} }/*到達的車進入停車場*/

void entercarpark(sqstack &s,linkqueue &qa)else

}else

}/*出棧*/

status pop(sqstack &s)

/*取*****可以最先出來的車輛*/

cardatatype getstacktop(sqstack s)

/*進入臨時停放點*/

void enterst(sqstack &st)

/*出隊*/

void dequeue(linkqueue &q,cardatatype &car)

/*臨時停放點一次出隊棧*/

void outst(sqstack &s,sqstack &st)

pop(st);

outst(s,st);

} }/*便道一次出隊*/

void outqa(sqstack &s,linkqueue &qa,cardatatype &car)

dequeue(qa,qa.front->next->data);

if(s.length!=max_n)//棧未滿,便道繼續進

outqa(s,qa,car); }}

/*拿到隊頭元素*/

cardatatype gettop(sqstack &s)

/*找到對應的車*/

status getobcar(sqstack &s,cardatatype &car)

return ok;

} /*離開停車場,目前只支援當天離開停車場,找到需要出去的車,並且此車一定存在,

他後面的車進入臨時停放點, 待車出去後,臨時停放點車進入停車場,便道有車時也進入停車場(此時

便道的車的進入時間就是開始計費的時間),直到停車場滿.

*/void outcarpark(sqstack &s,sqstack &st)

//找到該車開出停車場

if(pop(s))

printf("\n***********所有操作後停車情況***************\n");

prints(s);

printqa(qa);

printf("********************************************\n\n");

} }else

system("pause");

system("cls");

}void systemmenu(sqstack &s,linkqueue &qa,sqstack &st)

case 2:

case 3:

case 4:

case 5:

default :

} }int main()

停車場管理(棧與佇列的應用)

自動停車場由乙個可停放n 輛車的狹長通道構成,且只有乙個入口可供汽車進出。在停車場內,汽車按到達的先後次序,由北向南依次排列 假設入口在最南端 若停車場內已停滿n 輛車,則後來的汽車需在入口外的臨時等候便道上等候,當有車要離開時,臨時等候便道上的第一輛車即可進入。當自動停車場內某輛車要離開時,必須先...

SDUT refresh的停車場(棧和佇列)

refresh近期發了一筆橫財,開了一家停車場。因為土地有限,停車場內停車數量有限,可是要求進停車場的車輛過多。當停車場滿時,要進入的車輛會進入便道等待。最先進入便道的車輛會優先 進入停車場,並且停車場的結構要求僅僅出去的車輛必須是停車場中最後進去的車輛。現告訴你停車場容量n以及命令數m,以及一些命...

停車場管理

include include include define n 5 typedef struct s 隊節點 ss typedef struct 指標節點 queue typedef struct 棧節點 stack stack init1 stack s void push stack s,ch...