孤独的运货员

先附上题目要求:

下面附上数据结构框图,本人整理(勿喷!)

在解题的时候用到了栈和队列,其中货车FILO用到了栈的结构,各国运货平台FIFO用到了队列结构,动态分配各运货平台,其实题目读懂之后模拟整个运货平台分理过程也没有那么难,关键是做好数据结构!

下面附上代码:


  1 #include <stdio.h>
2 #include <stdlib.h>
3
4 #define MAX_CAR_CAPACITY 100
5 typedef struct Node {
6 int goodsDestination; //货物目的地
7 struct Node *Link; //结点元素指针
8 } QNode;
9 typedef struct {
10 int goodsQuantity; //货物总量
11 QNode *front; //队列头指针
12 QNode *rear; //队列尾指针,指向队尾下一元素即插入元素位置
13 } LinkQueue;
14 typedef struct { //货车栈,FILO
15 int *top;
16 int *base;
17 } Stack;
18
19 void InitQueue(LinkQueue *Q);
20 void DeQueue(LinkQueue *Q,int *goodsDes);
21 void EnQueue(LinkQueue *Q,int goodsDestination);
22 void DestroyQueue(LinkQueue *Q);
23 void PrintQueue(LinkQueue Q);
24
25 int main()
26 {
27 int testCnt,stations,carCapacity,storeCapacity,iCnt,jCnt,leftNum,goodsDes,kCircle,usedTime,flag;
28 LinkQueue *goods,*sptr; //货运站队列,动态分配
29 Stack car; //货车栈
30
31 car.base = (int *)malloc(MAX_CAR_CAPACITY * sizeof(int));
32 if(!car.base) exit(1);
33
34 scanf("%d",&testCnt);
35 while(testCnt--) {
36 scanf("%d%d%d",&stations,&carCapacity,&storeCapacity);
37 goods = (LinkQueue *)malloc(stations * sizeof(LinkQueue));//动态分配环中站
38 //初始化环中站
39 for(iCnt = 0; iCnt < stations; iCnt++) {
40 scanf("%d",&leftNum);
41 //goods++ 地址跳过12个字节,一次跳过一个队列结构体内存地址数
42 //printf("%p\n",goods + iCnt);//&goods[iCnt];goods + iCnt * sizeof(LinkQueue);
43 //printf("%p\n",&goods[iCnt]);
44 sptr = goods + iCnt;
45 InitQueue(sptr);
46 for(jCnt = 0; jCnt < leftNum; jCnt++) {
47 scanf("%d",&goodsDes);
48 EnQueue(sptr,goodsDes);
49 }
50 }
51 #if 0 //输出测试
52 printf("OK\r\n");
53 for(iCnt = 0; iCnt < stations; iCnt++) {
54 sptr = goods + iCnt;
55 PrintQueue(*sptr); // 取地址内容
56 printf("\n");
57 }
58 #endif
59
60 //分理中心货物模拟
61 usedTime = 0;
62 car.top = car.base;
63 for(kCircle = 0;; kCircle = ((++kCircle)%stations)) {//= (++kCircle)%stations)
64 flag = 1; //模拟处理标志位
65 sptr = goods + kCircle;
66 //卸货
67 while(car.top != car.base) {
68 if(*(--car.top) == kCircle + 1) { //卸到A平台
69 usedTime++;
70 } else if(sptr->goodsQuantity < storeCapacity) { //卸到B平台
71 EnQueue(sptr,*car.top);
72 usedTime++;
73 } else {
74 car.top++;
75 break;
76 }
77 }
78 //装货
79 while((car.top - car.base) < carCapacity && (sptr->goodsQuantity != 0)) {
80 DeQueue(sptr,&goodsDes);
81 *car.top = goodsDes;
82 car.top++;
83 usedTime++;
84 }
85 for(iCnt = 0; iCnt < stations; iCnt++) {
86 sptr = goods + iCnt;
87 if(sptr->goodsQuantity != 0) {
88 flag = 0;
89 break;
90 }
91 }
92 if(flag && (car.top == car.base)) //处理完毕,跳出循环
93 break;
94 usedTime += 2;
95 }
96 printf("%d\n",usedTime);
97 }
98 return 0;
99 }
100 void InitQueue(LinkQueue *Q)
101 {
102 Q->rear = Q->front = (QNode *)malloc(sizeof(QNode));//头结点,不存放数据
103 if(!Q->front) exit(1);
104
105 Q->front->Link = NULL;
106 Q->goodsQuantity = 0;
107 }
108 void DeQueue(LinkQueue *Q,int *goodsDes)//队头删除
109 {
110 QNode *QueuePtr = Q->front->Link;
111 if(Q->front == Q->rear) exit(1); //空队列
112
113 *goodsDes =QueuePtr->goodsDestination;
114 Q->goodsQuantity--;
115 Q->front->Link = QueuePtr->Link;
116 if(QueuePtr == Q->rear)
117 Q->rear = Q->front;
118 free(QueuePtr);
119 }
120 void EnQueue(LinkQueue *Q,int goodsDestination)//队尾插入
121 {
122 QNode *QueuePtr = (QNode *)malloc(sizeof(QNode));
123 if(!QueuePtr) exit(1);
124
125 QueuePtr->goodsDestination = goodsDestination;
126 QueuePtr->Link = NULL;
127 Q->rear->Link = QueuePtr;
128 Q->rear = QueuePtr;
129 Q->goodsQuantity++;
130 }
131 void DestroyQueue(LinkQueue *Q)
132 {
133 while(Q->front) {
134 Q->rear = Q->front; //摘下
135 Q->front = Q->front->Link;//移至下一结点
136 free(Q->rear);//释放
137 }
138 }
139 void PrintQueue(LinkQueue Q)
140 {
141 if(!Q.front) exit(1);
142 printf("%d\t",Q.goodsQuantity);
143 while(Q.front->Link) {
144 printf("%d\t",Q.front->Link->goodsDestination);
145 Q.front->Link = Q.front->Link->Link;
146 }
147 }

时间: 2024-08-29 02:54:06

孤独的运货员的相关文章

程序员更需要深度思考~宅客学院

这是一个人人都在学习编程的时代:Code.org请了比尔·盖茨,马克·扎克伯格和克里斯·波什等这些名人,来告诉你,每个人都可以编程:CoderDojo’s在各个国家悄然兴起:在英国,编程已经是各个年级学生的正式课程. 我认为这里有个误区.别误会我——如果每个人都会一些编程知识,这个世界当然会变得更好——但是学会写代码不应该是我们的目标.计算机和程序只是一个工具,是一种达到某种目的的方法. 真正的目标应该是学会思考的方式.换句话说,我们应该尝试教授计算机科学,而不是教着写代码.在本文中,我将介绍两

漫谈程序员系列:一个老程序员的2014年终总结

人生天地之间,若白驹过隙,忽然而已.蓦然回首,头上似霜雪,脸上似山川.我的 2014 啊,你就这么毫无眷恋地离我而去了.既然往事已不可追,未来尚未到来,在这年末岁首的间隙,就让我来回忆一下余烟尚存的 2014 吧. 2014 年,对我而言,发生了很多事,不管怎样,我还是一个程序员,这是工作.生活,以及我自己,给我的标签.也许很快这个标签会泛黄.蝶化.零落成泥碾作尘,不过不论怎样,它是我青春的纪念,它仍将伴随着我继续前行. 坚持技术博客写作 看到这里,也许你笑了. 是啊,这一年我不务正业,虽然每周

高通可视化电子标签(微屏)在仓储拣货系统中的应用

[关键字]:拣货电子标签  拣货系统 电子拣货系统  自动拣选系统 [摘  要]:高通G-PICK智能仓储拣货方案,是高通基于大规模,多品类仓储智能化拣货.分拣作业效率而开发出的智能化仓储管理系统. 功能 :管理实现无纸化(即无需打印出货单).出货时间大幅减少.有效降低出错概率.实时库存管理.通过电子商务平台实现远程下单.操作人员无需专业培训(即不依赖于熟练工).自动生成盘点损益表和盘点清单等. 我们只需要做到:找到标签灯闪处,根据提示数字拣货即可. 操作特点: 作业现场可采用多通道分区域设计,

上海瀚示制造业仓库亮灯拣货应用方案——降低成本、提高拣货效率

仓库现状:货架和拣货区域面积约1600m2, 物料种类约4000种. 希望解决的问题:需求的目的是减少重复工作和寻找的浪费,提高工作效率,减少仓管员人数和降低管理成本.采用中文显示电子拣货标签系统实现快速准确的拣货出库.? 预估1000个库位使用.? 一个库位可能存放1个或多个品种的物料? 能满足多人在同一个货架通道中进行拣料作业,或者多人同时需要拣同一个库位的物料. 项目改造后的效果:以目前1000个货位,改造后大大的提升工作效率,减少拣货的出错率,节约人力资源的成本,提升公司的管理绩效能力.

不一样的第一桶金

投资是非常孤独的,生活中,在投资话题上有共同语言的人真的不多.我跟文章中的死胖子的经历有几分相像,很多话写到自己心坎里去了,很有感触. 这些年来,我的投资受益不多,但也有些成绩,也靠投资解决了自己的住房问题,这还得感谢老婆及岳母娘没有给我太多的压力. ---------------------- --- 作者:飞泥翱空 对于大部分人,哪怕收入不高,每月少花20%也并不是太难的事情,更多时候我们不愿意存钱,其实是看不起每月存的小钱,20%对于一个月入4000的工薪阶层,也就是800元,而800元又

税务案例(作者单位:山东鲁信税务师事务所)

目录公司董事领取报酬可筹划新办商业企业慎选优惠年度减免期多分利可以少补税委托开会可避免会议费被认定为是价外费用巧签投资合同享受节税收益合理设置机构享受最低税率合理利用资源综合利用税收优惠政策个人独资企业财产出租转让的筹划策略醋酸制法不同 节税效果迥异房地产开发经营与资产管理活动税务筹划思维与方法废旧物资收购.加工可筹划合法避税:纳税人“辩护律师”不要忽视所得税优惠政策影响关联企业借款利息扣除的筹划打包出售:变资产转让为资本转让薪酬激励可筹划用转让定价法进行纳税筹划 28企业重组不可忽视契税筹划

简单算法和简单逻辑的小软件,是如何获得技术专利的?附完整源码

源码在最后面有下载,是入行一年时的项目.虽然简陋,却是我人生中的重要里程碑.一直想把背后的故事讲出来,但代码长得丑陋不好意思拿出来. 眼见年终了,丑代码放出来图大家一乐,如果有人学到东西或被后面的故事激起斗志,更是功德一件. 功能介绍:一个大片(图中m1-m4四个红色标记点组成),指定旋转角度,最多能切割成多少黑灰色的小片. 输入:见图,小片宽高,大片宽高,角度. 输出:最大切片数. 技术涉及屏幕坐标系,数学和几何计算,画图,多线程. 完整的项目有串口控制通信和一些实际工程的代码,和硬件绑定在一

学习代码,需要勤学多思

互联网时代已然来临,对于编程的学习则显得尤为重要.可能你不会相信,在发展迅速的英国,编程已经是各个年级学习的正式课程. 虽说对于互联网来说编程是很重要的一部分,如果每个人都会一些编程知识,这个世界当然会变得更好--但是学会写代码不应该是我们的目标.计算机和程序只是一个工具,是一种达到某种目的的方法. 教学真正的目标应该是学会思考的方式.教着写代码是最基础的环节,教授计算机科学才是真正的重中之重.写代码比以前更容易这倒是真的.因为现在有大量的资源可以用,不过我认为,学计算机科学或者变成一名程序员并

[转]献给迷茫的大多数

网易陕西省西安市网友 [3308只信仰公平] 的原贴:1 人生在世,都是为了生存,不但要生存还要更幸福的生存.美女.香车.豪宅,贤妻.爱女.情人,总之,幸福生活是人人都向往的,这是每个人最基本的权利和追求,这就是人权. 但是,要想实现这一切,都需要钱,都需要财富作为基础.没有财富,别说幸福生活就连自由你都没有.你整天为了生存去打工,为了糊口,更为了养活一家子,孩子的奶粉和学费,老家还要盖房子,农村的父母还要赡养,这一切的一切,就像一条无形的锁链,把你牢牢的“栓”在工厂生产流水线上,想去旅游?把你