队列应用:代码密钥
1.具体实现时给出泛型的具象本例为偏移量KEY所以是Integer类型
2.用charAt()取出单个字符,强制转型为int与偏移量相加.再强转回char
售票口模拟
假定每隔15秒来一位顾客,本例模拟100位顾客
Customer类:
1.多层循环嵌套时循环指针千万不要混淆。
2.初始化工作:
所有cashier的cashierTime均为0,
将100名customer给出其arrivalTime并加入队列.
3.分别讨论安排数量不同的cashier的时间 顾客消耗的时间.(对应最外层循环)
4.每个客户的总消耗时间 用客户类本身的totalTime()计算.(面向对象的思想)
5.每个客户离开的时间有两种情况
a.customer.getArrivalTime()>cashierTime[count]
departs = (PROCESS+custome.getArrivalTime());
b.customer.getArrivalTime()<cashierTime[count]
departs = cashier[count]+PROCESS;
6.每个cashierTime[count]设为前一个客户的departsTime
TicketCounter类:
用单链表实现队列
(末端enqueue前端dequeue)
1.进队从队尾进
2.进队时若为空
front = node;
rear = node;
若不为空
rear.setNext(node);
rear = node;
3.出队时定义 T result;将其返回.
4.链式结构里,进队,出队接收,返回的都是泛型T的具象但在加入链式结构之前 用LinearNode<T>对其包装,拆装
数组实现循环队列
enqueue操作:rear = (rear+1)%queue.length
dequeue操作:front = (front+1)%queue.length
1.数组实现的循环队列 包含有T[] queue 的泛型数组.
2.rear指向其下一个可用位置。
3.count计数器记录结构里的element数.
4.当count==queue时需要expandCapacity.
5.expandCapacity();
按从front到rear的顺序将元素复制larger里
新的front = 0,rear = count(及下一个可用位置)
6.进队时将element放到queue[rear];rear = (rear+1)%queue.length
7.出队时T result = queue[front];
别忘了queue[front]=null;
front = (front+1)%queue.length;
8.初始化时T[] queue = (T[])new Object[DEFAULT_CAPACITY]