2023年数据结构实验报告停车场问题.pdf
《2023年数据结构实验报告停车场问题.pdf》由会员分享,可在线阅读,更多相关《2023年数据结构实验报告停车场问题.pdf(39页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 计 算 机 软 件 技 术 基 础 实 验 报 告 I 数 据 结 构 实 验 二:停 车 场 管 理 问 题 一、问 题 描 述 1.实 验 题 目:设 停 车 场 是 一 个 可 停 放 n 辆 汽 车 的 狭 长 通 道,且 只 有 一 个 大 门 可 供 汽 车 进 出。汽 车 在 停 车 场 内 按 车 辆 到 达 时 间 的 先 后 顺 序,依 次 由 北 向 南 排 列(大 门 在 最 南 端,最 先 到 达 的 第 一 辆 车 停 放 在 车 场 的 最 北 端)。若 停 车 场 内 已 经 停 满 n 辆 车,那 么 后 来 的 车 只 能 在 门 外 的 便 道 上 等
2、候。一 旦 有 车 开 走,则 排 在 便 道 上 的 第 一 辆 车 即 可 开 入。当 停 车 场 内 某 辆 车 要 离 开 时,在 它 之 后 进 入 的 车 辆 必 须 先 退 出 车 场 为 它 让 路,待 该 辆 车 开 出 大 门 外,其 他 车 辆 再 按 原 顺 序 进 入 车 场。每 辆 停 放 在 车 场 的 车 在 它 离 开 停 车 场 时 必 须 按 它 停 留 的 时 间 长 短 缴 纳 费 用。试 为 停 车 场 编 制 按 上 述 规 定 进 行 管 理 的 模 拟 程 序。2.基 本 规 定:团 以 栈 模 拟 停 车 场,以 队 列 模 拟 车 场 外
3、的 便 道,按 照 从 终 端 读 入 数 据 的 序 列 进 行 模 拟 管 理。每 一 组 输 入 数 据 涉 及 三 个 数 据 项:汽 车 的“到 达(A表 达)或“拜 别(D 表 达)信 息、汽 车 标 记(牌 照 号)以 及 到 达 或 拜 别 的 时 刻。对 每 一 组 输 入 数 据 进 行 操 作 后 的 输 出 信 息 为:若 是 车 辆 到 达,则 输 出 汽 车 在 停 车 场 内 或 者 便 道 上 的 停 车 位 置;若 是 车 辆 拜 别,则 输 出 汽 车 在 停 车 场 停 留 的 时 间 和 应 缴 纳 的 费 用(便 道 上 停 留 的 时 间 不 收 费
4、)。栈 以 顺 序 结 构 实 现,队 列 以 链 表 结 构 实 现。3.测 试 数 据:设 n=2,输 入 数 据 为:(A,1,5),(A,2,10),(D,1,15),(A,3,20),(A,4,25),(A,5,30),(D,2,35),(D,。40),(E,0,0)-每 一 组 输 入 数 据 涉 及 三 个 数 据 项:汽 车“到 达 或 拜 别”信 息、汽 车 牌 照 号 码 及 到 达 或 拜 别 的 时 刻,其 中,A 表 达 成 达;D表 达 拜 别,E表 达 输 入 结 束。其 中:(A,1,5)表 达 1 号 牌 照 车 在 5 这 个 时 刻 到 达,而(D,1,1
5、5)表 达 1 号 牌 照 车 在 1 5 这 个 时 刻 拜 别。二、需 求 分 析 1.程 序 所 能 达 成 的 基 本 也 许:本 程 序 用 来 模 拟 一 个 可 停 放 n 辆 车 的 停 车 场 的 停 车 管 理 问 题。用 栈 和 队 列 模 拟 停 车 场 及 场 外 通 道,输 入 车 辆 状 态(到 达 或 者 离 开),车 牌 号 和 时 间,就 可 显 示 停 车 位 置 或 者 该 车 在 停 车 场 停 留 时 间 及 应 缴 费 用。2.输 入 的 形 式 及 输 入 值 范 围:程 序 接 受 5 个 命 令,分 别 是:到 达(A,车 牌 号,时 间);
6、拜 别(D,车 牌 号,时 间);停 车 场(卬,0,0)显 示 停 车 场 的 车 数;候 车 场 L W,0,0)显 示 候 车 场 的 车 数;退 出(E,0,0)退 出 程 序。3.输 出 的 形 式:对 于 车 辆 到 达,要 输 出 汽 车 在 停 车 场 内 或 者 便 道 上 的 停 车 位 置;对 于 车 辆 拜 别,则 输 出 汽 车 在 停 车 场 停 留 的 时 间 和 应 缴 纳 的 费 用(便 道 上 不 收 费)。用 户 输 入 完 毕 后,程 序 自 动 运 营 输 出 运 营 结 果。4.测 试 数 据 规 定:设 n=2,输 入 数 据 为:5),(A,2,
7、1 0),(D,1,15),(A,3,2 0),(A,4,25),(A,5,30),(D,2,3 5),(D,4,40),(E,0,0),每 一 组 输 入 数 据 涉 及 三 个 数 据 项:汽 车“到 达”或“拜 别”信 息、汽 车 牌 照 号 码 及 到 达 或 拜 别 的 时 刻,其 中,A表 达 成 达;D表 达 拜 别,E表 达 输 入 结 束。其 中:(A,1,5)表 达 1 号 牌 照 车 在 5 这个 时 刻 到 达,而(D,1,1 5)表 达 1 号 牌 照 车 在 1 5 这 个 时 刻 拜 别。三、概 要 设 计 为 了 实 现 上 述 功 能,该 程 序 以 栈 模
8、拟 停 车 场 以 及 临 时 停 放 为 给 要 拜 别 的 汽 车 让 路 而 从 停 车 场 退 出 来 的 汽 车 的 场 地,以 队 列 模 拟 车 场 外 的 便 道,因 此 需 要 栈 和 队 列 这 两 个 抽 象 数 据 类 型。1.栈 抽 象 数 据 类 型 定 义:A DT S q S t a ck 数 据 对 象:D=a i,bi,c i,d i|a i i n t,b i i n t,c i i n t,di Gc h ar),i=1,2.,n,n 2 0:数 据 关 系:R=(a i,bi,d i j a i,bi,diD,ai,bi,d ie s truct c
9、a r;基 本 操 作:Car_ e n ter(ca r n u m,c a rtim e)将 到 达 车 辆 a 的 信 息 入 栈 s或 者 入 队 qC a r _ L e a ve(carnum,cartime);将 待 离 开 车 辆 d 出 栈 s,并 将 q 中 相 应 车 辆 入 栈 并 进 行 相 关 的 操 作 Resu 1 t(c h a r carm o v e,i nt ca r num,in t c artime)根 据 输 入 信 息 完 毕 车 辆 的 离 开 或 者 到 达 A D T Sq S ta c kADT的 C语 言 形 式 说 明:typedef
10、 s tru c t/构 造 一 个 顺 序 栈 s truct Node 1 home M a xS i z e;i n t stac k top;栈 顶 的 指 针 S t a ck;2.队 列 抽 象 数 据 类 型 定 义 ADT LinkQueue数 据 对 象:D=a i,b i,c i I ai eQn o de*,bi Qnode*,c i C in t),i=1,2.,n,n O);数 据 关 系:R=0基 本 操 作:C a r_en I er(c a r num,cartime)将 到 达 车 辆 a 的 信 息 入 栈 s或 者 入 队 qC ar_Lea v e(c
11、a r n um,cart i m e);将 待 离 开 车 辆 d 出 栈 s,并 将 q 中 相 应 车 辆 入 栈 并 进 行 相 关 的 操 作 R e sult(ch a re a r move,i n t car n um,i n t c a time)根 据 输 入 信 息 完 毕 车 辆 的 离 开 或 者 到 达 ADT L inkQueueA D T的 C语 言 形 式 说 明:t y p e d e f s t r u c t/构 建 一 个 链 式 队 列 0Q Node*fro n t,*r e ar;Queu e;void Car_en t e r(int c a
12、m um,intca rtim e)/到 达 车 辆 的 信 息 入 栈 或 者 入 队 v o i d C a r_Leave(i n t carnum,int car t ime)车 离 开 i n t Result(char c a rm o ve,i n t ca r numjnt c a r tim e)根 据 输 入 信 息 完 毕 车 辆 的 离 开 或 者 达 成 3.主 程 序 流 程 及 其 模 块 调 用 关 系:1)主 程 序 流 程:主 函 数 提 醒 用 户 输 入 指 令:到 达(A L 车 牌 号,时 间);拜 别(D,车 牌 号,时 间);停 车 场 P 显
13、示 停 车 场 的 车 数;候 车 场 W 显 示 候 车 场 的 车 数;退 出 E 退 出 程 序。调 用 i n t Result(c h ar c a rmove,i n t c arnum,int cartime)根 据 输 入 信 息 完 毕 车 辆 的 离 开 或 者 达 成。若 输 入 A 则 调 用 C a r _ e n t er(int c a rnum,i nt cartim e),创 建 顺 序 栈 CarS和 链 式 队 列 C a r Q,根 据 栈 是 否 满 决 定 输 入 的 信 息 入 栈 还 是 入 队 列。若 栈 未 满,输 入 的 车 辆 信 息 入
14、 栈,若 已 满,入 队 列。若 输 入 D则 调 用 C a r_Le a v e(in t earn u m,in tcar t ime):创 建 一 个 临 时 栈 存 放 退 出 让 路 的 车,若 在 车 库 中 找 到 相 应 的 车,车 库 中 该 车 后 面 的 车 辆 信 息 进 入 临 时 栈 Ca rS2,该 车 出 栈,显 示 车 牌 号,此 时 时 间,停 留 时 间,应 缴 费 用。临 时 栈 中 的 车 的 信 息 再 回 到 C a r S中。此 时 若 队 列 C a rQ不 为 空 则 将 队 列 中 车 辆 信 息 放 入 栈 Ca r S中。若 在 车
15、库 中 找 不 到 相 应 的四、具 体 设 计 1.元 素 类 型、结 点 类 型 和 结 点 指 针 类 型:t y p e d ef s t ru c t No d e 1/构 建 个 结 构 体 Ii n t c arnum;i n t t i me;Nod e 1;typed e f st r u ct Nod e 2!o i nt car num;int time;struc t No d e 2*next;Node2;2、创 建 顺 序 栈 ty p e d ef struc t/构 造 一 个 顺 序 栈(st r uc t Nodel h o m e MaxSize;i nt
16、 s tacktop;/栈 顶 的 指 针 St a ck;3、创 建 链 式 队 列 t y ped e f s t ru c t 构 建 一 个 链 式 队 列(团 Node 2*fr o nt,*rea r;Queue;4.车 辆 到 达:vo i d C ar_en t er(int c a mum,in t cartim e)/到 达 车 辆 的 信 息 入 栈 或 者 入 队(0if(C a r S.stac k topM a xS i ze)假 如 栈 没 有 满 的 时 候(3C a r S.h o meC a r S.st a cktop.ca r n um=ca r num
17、;/到 达 车 辆 信 息 放 入 顺 序 栈 CarS.h o meC a r S.s tac k top.tim e=c a r time;PC a r+;车 库 里 的 车 数 量+1print f(“d 号 车 进 入 停 车 场!进 入 时 刻:d 位 置:%d n”,CarS.homeCarS.stacktop.carnum,CarS.h omeCarS.s t a c ktop.time,PCa r);0Ca r S.s t a ckto P+;栈 顶 指 针 加 一 即 e 1 se/若 栈 满 朗C arQ.f r o nt-c a rnum=carnum;C a rQ.fr
18、ont-tim e=cartime;/到 达 车 辆 信 息 加 入 到 队 列 中 WCa r+;/候 车 场 车 辆 数+1printf(”d 号 车 进 入 候 车 场!到 达 时 刻:d 位 置:%dn,CarQ.front-c arnum=c a rnum,C arQ.front-t im e=cartim e,WCar);CarQ.fr o nt-next=(No d e 2*)m a II o c(s i zeof(N o d e 2);分 派 空 间 C a r Q,fr o nt=CarQ.front-n e xt;/更 改 队 列 指 针)5,车 辆 离 开 v oid C
19、a r _ L e a ve(int carnum,int c a r time)/车 离 开(团 St ack C a rS2;构 造 一 个 栈 临 时 存 放 为 了 让 位 退 出 来 的 车 int i;in t fin d c a r=1;Node2*p,*f;Car S 2.sta c kt o p=0;设 临 时 栈 C a r S2 为 空f o r(i=0;i f i n dca r;CarS2.stacktop+)将 车 库 里 面 在 i 车 外 面 的 车 移 动 到 临 时 栈 C a r S 2 中 回(C a r S2.homeCarS2.sta c k t o
20、p.car n u m=Ca r S.h omeCa r S.s ta c ktop.c a rnu m;CarS 2.h om e C arS2.st a ckto p.tim e=C arS.h omeC a r S.s t a c k t op.time;pr i n t f(”d 号 车 离 开 停 车 场!离 开 时 刻:d,停 留 时 长(P,C a rS.homeCar S.s t acktop.ca r num,cartime,c a r time-CarS.h omeC a rS.stacktop.t i m e);PC a r一 一;车 库 内 车 辆 一 1p r in
21、tf(应 付 停 车 费%dn,(ca r time-CarS.hom e Car S.stackto p.t ime)*5);for(i=CarS2.s tacktop 1;i=0;i-)把 临 时 栈 里 面 的 车 移 回 去 回(C a r S.homeCarS.s tackt o p.ca r num=CarS2.home i.ca r num;CarS.hom e Ca r S.s t a c k top.tim e=C a rS2.h o m e i.t i me;Ca r S.s t ackt o p+;C a rS2.stack t o p-;团 0if(CarQ.f r o
22、 n t!=CarQ.rear)/假 如 候 车 场 有 车,将 它 移 进 车 库 回(0 C a r S.h o meC a rS.stackto p.c a rn u m=CarQ.re a r-carnum;/将 队 列 中 的 车 牌 号 信 息 放 入 栈 00 Ca r S.homeCarS.stacktop.tim e=c artim e;/将 此 时 的 时 刻 记 录 入 栈 C a r S,保 证 计 算 费 用 是 从 车 辆 从 候 车 场 进 入 车 库 后 才 开 始 算Ca r S.s tacktop+;00 PCar+;/车 库 车 辆 数+100 W C a
23、-一;/候 车 场 车 辆 数 一 1p=CarQ.r e a r;C a rQ.rear=C a r Q.r e a r-nex t;free(p);0)else/假 如 车 库 中 找 不 到 此 车,再 在 候 车 场 找 0 p=Ca r Q.r ear;i f(p!=CarQ.f ront&p-c arnum!=ca r n um)候 车 场 队 列 不 为 空(0 f=p n ext;while(f!=C a rQ.front&f-c a r num!=carnum)(00 p=f;f=f-n e x t;)0团 i f(f-ca r n um=carn u m)/假 如 寻 找
24、的 车 在 便 道 上,出 队 列 fi n d c a r=l;p-nex t=f-nex t;printf(H%d号 车 离 开 候 车 场!离 开 时 间:d,停 留 时 长(可 n,f 一“a r n u m,ca r t i me,cartim e-f tim e);WCar-;printf(应 付 停 车 费:dn,(cartim ef-t ime)*0);free(f);)团 i f(p ca r num=c a rnum)要 离 开 的 车 在 队 尾,直 接 出 队(团 团 f indca r=1;Ca r Q.rear=CarQ.re a r-next;pr i nt f(
25、%d号 车 离 开 候 车 场!离 开 时 间:%d,停 留 时 长(d)!n,P-c amum,c ar t ime,ca r time-p-t im e);WCa r-;p rin t f(应 付 停 车 费:%d n”,(ca r t ime-p-t ime)*0);fre e(p);0)i f(fi n de a r=-l)pri n t f(%d号 车 不 在 停 车 场 中!n,c a r n um);)6.主 函 数 m a i n()0p r in tf(实 验 名 称:停 车 场 管 理 问 题 n);p r in tf(学 号:n);p rin t f(姓 名:x x n)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2023 数据结构 实验 报告 停车场 问题
限制150内