[Day11] FIFO: 先進先出(LinkedList) in Java

思路 先進先出 紀錄開始與結尾元素 實作 測試方法 public class Queue_List2 { static class Node { Integer val; Node next; public Node(Integer val) { this.val = val; } } Integer[] nums; Node node_front = null; Node node_end = null; public Queue_List2(Integer[] nums) { this.nums = nums; } public void build_queue(){ for (int i = 0 ; i < nums.length; i++) { offer(nums[i]); } } public static void main(String[] args) { Integer[] nums = new Integer[]{1,2,3,4,5}; Queue_List2 queue_list = new Queue_List2(nums); queue_list....

August 13, 2022 · 1 min · Yish

[Day10] FIFO: 先進先出(Array) in Java

思路 先進先出 紀錄開始與結尾元素 實作 測試方法 public class Queue_Array3 { Integer[] ary; Integer[] queue; Integer i_front = null; Integer i_end = null; public Queue_Array3(Integer[] ary){ this.ary = ary; } public void build_queue(){ this.queue = new Integer[this.ary.length]; for (int i = 0 ; i < ary.length; i++) { offer(ary[i]); } } public static void main(String[] args) { Integer[] nums = new Integer[]{1,2,3,4,5}; Queue_Array3 queue_array = new Queue_Array3(nums); queue_array.build_queue(); // full - extend the storage size queue_array....

August 13, 2022 · 2 min · Yish

[Day9] LIFO: 後進先出(LinkedList) in Java

思路 先進後出 紀錄最上面的元素 實作 測試方法 public class Stack_List2 { // 配置節點 static class Node { Integer val; Node next; public Node(Integer val) { this.val = val; } } public static void main(String[] args) { Integer[] nums = new Integer[]{1,2,3,4,5}; Stack_List2 stack_list = new Stack_List2(nums); stack_list.build_stack(); // full - extend the storage size stack_list.push(6); Integer num = stack_list.pop(); num = stack_list.pop(); num = stack_list.pop(); num = stack_list.pop(); num = stack_list....

August 12, 2022 · 1 min · Yish

[Day8] LIFO: 後進先出(Array) in Java

思路 先進後出 紀錄最上面的元素 實作 測試方法 public class Stack_Array2 { Integer[] ary; // 傳入陣列 Integer[] stack; Integer i_top = null; // LIFO 後進先出 set top public Stack_Array2(Integer[] ary) { this.ary = ary; } public void build_stack(){ this.stack = new Integer[this.ary.length]; for (int i = 0; i < this.ary.length; i++) { push(ary[i]); } } public static void main(String[] args) { Integer[] nums = new Integer[]{1,2,3,4,5}; Stack_Array2 stack_array = new Stack_Array2(nums); stack_array....

August 10, 2022 · 2 min · Yish

[Day7] Selection Sort in Java

思路 反序 先以最左邊為基準點跟右邊依序做比較 把最大的放在最左邊 反覆執行迴圈 實作 測試方法 public static void main(String[] args) { int[] nums = new int[]{8, 2, 6, 10, 4}; Sort_Selection3.selection_sort(nums); System.out.println(); } 具體 public static void selection_sort(int[] nums) { //8,2,6,10,4 // 開始執行 for (int i_start = 0; i_start < nums.length; i_start++) { int i_max = i_start; // 設定開始為最大,i_max=0 // j_run = 設右邊為比較 開始迴圈 // j_run + 1 -> 要跟右邊做比較確保右邊有值 //i_max=0, 8,2,6,10,4 //j_run=0+1=1,nums[1]=2>nums[0]=8,false //j_run=2,nums[2]=6>nums[0]=8,false //j_run=3,nums[3]=10>nums[0]=8,true,i_max=3 //j_run=4,nums[4]=4>nums[3]=10,false //i_max=1, 10,2,6,8,4 //j_run=2,nums[2]=6>nums[1]=2,i_max=2 //j_run=3,nums[3]=8>nums[2]=6,i_max=3 //j_run=4,nums[4]=4>nums[3]=8,false //i_max=2, 10,8,6,2,4 //j_run=3,nums[3]=2>nums[2]=6,false //j_run=4,nums[4]=4>nums[2]=6,false //i_max=3, 10,8,6,2,4 //j_run=4,nums[4]=4>nums[3]=2,i_max=4 for (int j_run = i_start + 1; j_run < nums....

August 8, 2022 · 2 min · Yish

[Day6] Insertion Sort in Java

思路 反序 如果相鄰兩個數字大小相反,就交換位置 最小在右邊,最大在左邊 實作 測試方法 public static void main(String[] args) { int[] nums = new int[]{8, 2, 6, 10, 4}; Sort_Insertion3.insertion_sort(nums); System.out.println(); } 具體 public static void insertion_sort(int[] nums) { // 從 0 開始跑 for (int i_start = 0; i_start < nums.length; i_start++) { // 與開始的前一位做比較,一直往前比較 //0=8,1=2,3=6,4=10,5=4 //i_start=0,j_run=-1 x //i_start=1,j_run=0 in, nums[1]=2, nums[0]=8 break; //i_start=2,j_run=1 in, nums[2]=6, nums[1]=2 swap; [8,6,2,10,4] //i_start=2,j_run=0 in, nums[1]=6, nums[0]=8 break; //i_start=3,j_run=2 in, nums[3]=10, nums[2]=2 swap; [8,6,10,2,4] //i_start=3,j_run=1 in, nums[2]=10, nums[1]=6 swap; [8,10,6,2,4] //i_start=3,j_run=0 in, nums[1]=10, nums[0]=8 swap; [10,8,6,2,4] //i_start=4,j_run=3 in, nums[4]=4, nums[3]=2 swap; [10,8,6,4,2] //i_start=4,j_run=2 in, nums[3]=4, nums[2]=6 break; for (int j_run = i_start - 1; j_run >= 0; j_run--) { // 後面的數字大於前面的數字,就交換位置 if (nums[j_run + 1] > nums[j_run]) { swap(nums,j_run + 1, j_run); } else { // 否則跳出迴圈 break; } } } } private static void swap(int[] nums, int i_left, int i_right) { int tmp = nums[i_left]; // set temp variable nums[i_left] = nums[i_right]; // 把 right 放到 left nums[i_right] = tmp; // 把 left 放到 right } 實作 by recursion 測試方法 public static void main(String[] args) { nums = new int[]{8, 2, 6, 10, 4}; Sort_Insertion3....

August 7, 2022 · 2 min · Yish