本週學習第五章隊列,主要了解了隊列的模型(處理過程),並學習了經過幾種方式來實現隊列,運用隊列解決問題以及幾種實現隊列方式的比較。php
隊列是一種線性結構,隊列元素按FIFO方式處理,從隊列刪除元素的次序,與往隊列放置元素的次序是同樣的。
html
關於隊列的操做前端
操做 | 說明 |
---|---|
enqueue | 向隊列末端添加一個元素 |
dequeue | 從隊列前端刪除一個元素 |
first | 考察隊列前端的那個元素 |
isEmpty | 斷定隊列是否爲空 |
size | 斷定隊列中元素的個數 |
toString | 返回隊列的字符串表示 |
import java.util.*; /** * Codes demonstrates the use of queues to encrypt and decrypt messages. * * @ author 20172323 * @version 4.0 */ public class Codes { /** * Encode and decode a message using a key of values stored in * a queue. */ public static void main (String[] args){ int[] key = {5, 12, -3, 8, -9, 4, 10}; Integer keyValue; String encoded = "", decoded = ""; String message = "All programmers are playwrights and all " + "computers are lousy actors."; Queue<Integer> encodingQueue = new LinkedList<>(Integer); Queue<Integer> decodingQueue = new LinkedList<>(Integer); /** load key queue */ for (int scan = 0; scan < key.length; scan++){ keyValue = encodingQueue.remove(); encoded += (char) message.charAt(scan) + keyValue; ((LinkedList<Integer>) encodingQueue).add(keyValue); } System.out.println("Encoded Message:\n" + encoded + "\n"); /** decode message */ for (int scan = 0; scan < encoded.length(); scan++){ keyValue = decodingQueue.remove(); encoded += (char) message.charAt(scan) - keyValue; ((LinkedList<Integer>) decodingQueue).add(keyValue); } System.out.println("Decoded Message:\n" + decoded); } }
隊列的性質使得密鑰值能保持正確的順序,不用擔憂什麼時候抵達密鑰末尾。java
Customergit
public class Customer { private int arrivalTime, departureTime; public Customer(int arrives) { this.arrivalTime = arrives; this.departureTime = 0; } public int getArrivalTime() { return arrivalTime; } public void setArrivalTime(int arrivalTime) { this.arrivalTime = arrivalTime; } public int getDepartureTime() { return departureTime; } public void setDepartureTime(int departureTime) { this.departureTime = departureTime; } public int totalTime(){ return departureTime-arrivalTime; } }
TicketCounterweb
import java.util.LinkedList; import java.util.Queue; public class TicketCounter { final static int PROCESS = 120; final static int MAX_CASHIERS = 10; final static int NUM_CUSTOMERS = 100; public static void main(String[] args) { Customer customer; Queue<Customer> customerQueue = new LinkedList<Customer>(); int[] cashierTime = new int[MAX_CASHIERS]; int totalTime, averageTime, departs; /** process the simulation for various number of cashiers */ for (int cashiers = 0; cashiers < MAX_CASHIERS; cashiers++) { /** set each cashiers time to zero initially */ for (int count = 0; count < cashiers; count++) cashierTime[count] = 0; /** load customer queue */ for (int count = 1; count <= NUM_CUSTOMERS; count++) customerQueue.offer(new Customer(count * 15)); totalTime = 0; /** process all customers in the queue */ while (!(customerQueue.isEmpty())) { for (int count = 0; count <= cashiers; count++) { if (!(customerQueue.isEmpty())) { customer = customerQueue.poll(); if (customer.getArrivalTime() > cashierTime[count]) departs = customer.getArrivalTime() + PROCESS; else departs = cashierTime[count] + PROCESS; customer.setDepartureTime(departs); cashierTime[count] = departs; totalTime += customer.totalTime(); } } } /** output results for this simulation */ averageTime = totalTime / NUM_CUSTOMERS; System.out.println("Number of cashiers: " + (cashiers + 1)); System.out.println("Average time: " + averageTime + "\n"); } } }
public interface QueueADT<T> { public void enqueue (T element); public T dequeue(); public T first(); public boolean isEmpty(); public int size(); public String toString(); }
Queue<Integer> encodingQueue = new LinkedList<>(Integer);
-->Queue<Integer> encodingQueue = new LinkedList<Integer>();
encoded += (char) message.charAt(scan) - keyValue;)
-->encoded += (char) message.charAt(scan) - keyValue;
上週沒有進行測試,錯題 = null。編程
基於評分標準,我給譚鑫的博客打分:5分。得分狀況以下:
正確使用Markdown語法(加1分):
模板中的要素齊全(加1分)
教材學習中的問題和解決過程, 一個問題加1分
代碼調試中的問題和解決過程, 一個問題加1分api
基於評分標準,我給方藝雯的博客打分:5分。得分狀況以下:、
正確使用Markdown語法(加1分):
模板中的要素齊全(加1分)
教材學習中的問題和解決過程, 一個問題加1分
代碼調試中的問題和解決過程, 一個問題加1分數組
最近其餘事務不少,因此比較忙,時間也很緊張,但絲絕不能澆滅我敲代碼的熱情數據結構
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 | |
第一週 | 0/0 | 1/1 | 8/8 | |
第二週 | 470/470 | 1/2 | 12/20 | |
第三週 | 685/1155 | 2/4 | 10/30 |
在你一輩子中身體最健康、最旺盛的時候,能在大學學習和研究,是一輩子中少有的機會。請說明一下,你以及具有的專業知識、技能、能力上還差距哪些?請看這個技能調查表,從表中抽取5-7項你認爲對你特別重要的技能,記下你目前的水平,和你想在課程結束後達到的水平(必須列出5項)。
Skills/技能 | 當前水平 | 目標水平 |
---|---|---|
Programming Overall/對編程總體的理解 | 3 | 7 |
Programming Comprehension/程序理解 | 3 | 7 |
Programming Design/架構設計,模塊化設計,接口設計 | 3 | 6 |
Programming Test/單元測試、代碼覆蓋率 | 2 | 6 |
Programming :Code Review/Code Quality(代碼複審/代碼規範/代碼質量) | 3 | 6 |