日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

数据结构Java01【数据结构概述、数组基本使用】

發布時間:2024/9/30 java 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构Java01【数据结构概述、数组基本使用】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

學習地址:【數據結構與算法基礎-java版】? ? ? ? ? ? ? ? ??🚀數據結構--Java專欄🚀

  • 筆記01【01-09】【概述、數組基本使用】【源碼、課件】
  • 筆記02【10-18】【棧、隊列、單鏈表(增刪節點)、循環鏈表、雙向循環鏈表、遞歸(斐波那契、漢諾塔)】
  • 筆記03【19-27】【(時間、空間復雜度);八大排序(冒泡、快速、插入、希爾、選擇、歸并、基數、隊列基數)】
  • 筆記04【28-33】【樹結構(二叉樹)概述、創建、遍歷、查找節點、刪除節點】
  • 筆記05【34-39】【順序存儲二叉樹概述、二叉樹遍歷、堆排序、線索二叉樹實現及遍歷】
  • 筆記06【40-48】【赫夫曼樹、概述、原理分析、代碼實現(數據壓縮、創建編碼表、解碼、壓縮文件、解壓文件)】
  • 筆記07【49-54】【二叉排序樹(添加、查找、刪除節點)】
  • 筆記08【55-57】【二叉平衡樹(AVL)-概述、單旋轉、雙旋轉】
  • 筆記09【58-60】【計算機中數據的存儲原理、2-3樹的插入原理、B樹和B+樹】
  • 筆記10【61-63】【哈希表概述、散列函數的設計、散列沖突解決方案】
  • 筆記11【64-67】【圖結構概述、圖遍歷原理(BFS\DFS)、圖遍歷代碼實現】

課件(源碼、XMind文件):【鏈接:https://pan.baidu.com/s/1JYLnvxdvTCbRybxi2RE6Ew? ?提取碼:mi7f】

目? ?錄

P1-1.1數據結構概述

1、數據結構概述

P2-1.2算法概述

1、思維導圖

2、導入老師的eclipse工程,中文亂碼---解決方案

3、格式化代碼

P3-2.1數組的基本使用

P4-2.2數組元素的添加

1、替換數組

P5-2.3數組元素的刪除

P6-2.4面向對象的數組

1、數組的底層實現原理

1.1、MyArray.java

1.2、TestMyArray.java

P7-2.5查找算法之線性查找

P8-2.6查找算法之二分法查找

P9-2.7查找算法整合

1、MyArray.java

2、TestMyArraySearch.java


P1-1.1數據結構概述

整個思維導圖【實在是太大了!!!請自己下載xmind文件,自行查看吧!

1、數據結構概述

第一集的思維導圖

什么是數據結構:數據與數據之間的關系!

數據的存儲結構:數據在計算機中如何存儲!

數據的邏輯結構:數據與數據之間的關系!

圖結構:多對多!!!

P2-1.2算法概述

算法是規則的有限集合,會為解決特定問題而規定的一系列操作。

數據結構:是相互之間存在一種或多種特定關系的數據元素的集合。

1、思維導圖

2、導入老師的eclipse工程,中文亂碼---解決方案

1、右鍵出現中文亂碼的java項目名,在右鍵菜單中選擇最后一項Properties!?

2、點擊【Properties】,在彈出窗口選擇Resource選項,然后在右側操作窗口中的第一項選擇other選項,在選項右邊下拉選擇中點選合適的編碼格式!如果你不知道導入項目的使用了什么編碼,你可以嘗試選擇utf-8,這是編程中最常用的編碼格式。然后確定Apple and close就可以了!

3、格式化代碼

package demo1;public class AddOneToHundred {public static void main(String[] args) {int total = 0;int end = 100;// 使用for循環計算for (int i = 1; i <= end; i++) {total += i;}System.out.println(total);// 直接計算total = (1 + end) * end / 2;// 算法沒有最好的,只有最適合的!// 打印結果System.out.println(total);}}

P3-2.1數組的基本使用

package demo1;public class TestArray {public static void main(String[] args) {// 創建一個數組int[] arr1 = new int[3];// 獲取數組長度int length1 = arr1.length;System.out.println("arr1's length: " + length1);// 訪問數組中的元素:數組名[下標] 注意:下標從0開始,最大可以取到長度-1int element0 = arr1[0];System.out.println("element0: " + element0);for(int x: arr1) {System.out.println(x);}// 為數組中的元素賦值arr1[0] = 99;System.out.println("element0: " + arr1[0]);arr1[1] = 98;arr1[2] = 97;// 遍歷數組for (int i = 0; i < length1; i++) {System.out.println("arr1 element" + i + ": " + arr1[i]);}// 創建數組的同時為數組中的元素賦值int[] arr2 = new int[] { 90, 80, 70, 60, 50 };// 獲取數組的長度System.out.println("arr2 length: " + arr2.length);}}

P4-2.2數組元素的添加

1、替換數組

package demo1;import java.util.Arrays;public class TestOpArray {public static void main(String[] args) {// 解決數組的長度不可變的問題int[] arr = new int[] { 9, 8, 7 };// 快速查看數組中的元素System.out.println(Arrays.toString(arr));// 要加入數組的目標元素int dst = 6; // destination 目的地 縮寫// 創建一個新的數組,長度是原數組長度+1int[] newArr = new int[arr.length + 1];// 把原數組中的數據全部復制到新數組中for (int i = 0; i < arr.length; i++) {newArr[i] = arr[i];}// 把目標元素放入新數組的最后newArr[arr.length] = dst;// 新數組替換原數組arr = newArr;System.out.println(Arrays.toString(arr));}}

P5-2.3數組元素的刪除

?

或者 數組元素前移操作!!!

package demo1;import java.util.Arrays;public class TestOpArray2 {// 如何刪除數組中的元素public static void main(String[] args) {// 目標數組int[] arr = new int[] { 9, 8, 7, 6, 5, 4 }; // 數組長度為6System.out.println(arr.length);// 要刪除的元素的下標int dst = 3; // 0、1、2、3、4、5System.out.println(Arrays.toString(arr));// 創建一個新的數組,長度是原數組的長度-1int[] newArr = new int[arr.length - 1]; // 數組長度為5// 復制原數組中除了要刪除的那個元素以外其它的元素for (int i = 0; i < newArr.length; i++) { // i: 0\1\2\3\4// 要刪除的元素之前的元素/**-----------------------------------*/ // if (i < dst) { // System.out.println("---: " + i); // newArr[i] = arr[i]; // // 要刪除的元素之后的元素 // } else { // System.out.println("***: " + i); // newArr[i] = arr[i + 1]; // }/**-----------------------------------*/if (i == dst) {continue; }System.out.println("***: " + i);newArr[i] = arr[i];}// 新數組替換舊數組arr = newArr;System.out.println(Arrays.toString(arr));}}

P6-2.4面向對象的數組

1、數組的底層實現原理

1.1、MyArray.java

// 判斷下標是否越界

if (index < 0 || index > elements.length - 1) {

? ? ? throw new RuntimeException("下標越界");

}

package demo1.util;import java.util.Arrays;public class MyArray {// 用于存儲數據的數組private int[] elements; // 只能存 int, 存其他類型的數據:objectpublic MyArray() {elements = new int[0];}// 獲取數組長度的方法public int size() {return elements.length;}// 往數組的末尾添加一個元素public void add(int element) {// 創建一個新的數組int[] newArr = new int[elements.length + 1];// 把原數組中的元素復制到新數組中for (int i = 0; i < elements.length; i++) {newArr[i] = elements[i];}// 把添加的元素放入新數組中newArr[elements.length] = element;// 使用新數組替換舊數組elements = newArr;}// 打印所有元素到控制臺public void show() {System.out.println(Arrays.toString(elements));}// 刪除數組中的元素public void delete(int index) {// 判斷下標是否越界if (index < 0 || index > elements.length - 1) {throw new RuntimeException("下標越界");}// 創建一個新的數組,長度為原數組的長度-1int[] newArr = new int[elements.length - 1];// 復制原有數據到新數組for (int i = 0; i < newArr.length; i++) {// 想要刪除的元素前面的元素if (i < index) {newArr[i] = elements[i];// 想要刪除的元素后面的元素} else {newArr[i] = elements[i + 1];}}// 新數組替換舊數組elements = newArr;}// 取出指定位置的元素public int get(int index) {// 判斷下標是否越界if (index < 0 || index > elements.length - 1) {throw new RuntimeException("下標越界");}return elements[index];}// 插入一個元素到指定位置public void insert(int index, int element) {// 創建一個新的數組int[] newArr = new int[elements.length + 1];// 將原數組中的元素放入新數組中。for (int i = 0; i < elements.length; i++) {// 目標位置之前的元素if (i < index) {newArr[i] = elements[i];// 目標位置之后的元素} else {newArr[i + 1] = elements[i];}}// 插入新的元素newArr[index] = element;// 新數組替換舊數組elements = newArr;}// 替換指定位置的元素public void set(int index, int element) {// 判斷下標是否越界if (index < 0 || index > elements.length - 1) {throw new RuntimeException("下標越界");}elements[index] = element;}// 線性查找public int search(int target) {// 遍歷數組for (int i = 0; i < elements.length; i++) {if (elements[i] == target) {return i;}}// 沒有找到對應的元素return -1;}// 二分法查找public int binarySearch(int target) {// 記錄開始位置int begin = 0;// 記錄結束位置int end = elements.length - 1;// 記錄中間的位置int mid = (begin + end) / 2;// 循環查找while (true) {// 什么情況下沒有這個元素?// 開始在結束位置之后或重合,沒有這個元素if (begin >= end) {return -1;}// 判斷中間的這個元素是不是要查找的元素if (elements[mid] == target) {return mid;// 中間這個元素不是要查的元素} else {// 判斷中間這個元素是不是比目標元素大if (elements[mid] > target) {// 把結束位置調整到中間位置前一個位置end = mid - 1;// 中間這個元素比目標元素小} else {// 把開始位置調整到中間位置的后一個位置begin = mid + 1;}// 取出新的中間位置mid = (begin + end) / 2;}}}}

1.2、TestMyArray.java

package demo1;import demo1.util.MyArray;public class TestMyArray {public static void main(String[] args) {// 創建一個可變的數組MyArray ma = new MyArray();// 獲取長度int size = ma.size();ma.show();// 往可變數組中添加一個元素ma.add(99);ma.add(98);ma.add(97);// 顯示可變數組中的所有元素到控制臺ma.show();// 刪除某個元素ma.delete(1);ma.show();// 取出指定位置的元素int element = ma.get(1);System.out.println(element);System.out.println("=====================");ma.add(96);ma.add(95);ma.add(94);ma.show();// 插入元素到指定位置ma.insert(3, 33);ma.show();System.out.println("=====================");// 替換指定位置的元素ma.set(0, 100);ma.show();System.out.println(ma.size());}}

P7-2.5查找算法之線性查找

package demo1;public class TestSearch {public static void main(String[] args) {// 目標數組int[] arr = new int[] { 2, 3, 5, 6, 8, 4, 9, 0 };// 目標元素int target = 8;// 目標元素所在的下標int index = -1;// 遍歷數組for (int i = 0; i < arr.length; i++) {if (arr[i] == target) {index = i;break;}}// 打印目標元素的下標System.out.println("index:" + index);}}

P8-2.6查找算法之二分法查找

二分法:要求 數組 必須 有序!!!

結束條件:while (begin < end) {}

package demo1;public class TestBinarySearch {public static void main(String[] args) {// 目標數組int[] arr = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };// 目標元素int target = 30;// 記錄開始位置int begin = 0;// 記錄結束位置int end = arr.length - 1;// 記錄中間的位置int mid = (begin + end) / 2;// 記錄目標位置int index = -1;// 循環查找while (begin < end) {// 判斷中間的這個元素是不是要查找的元素if (arr[mid] == target) {index = mid;break;// 中間這個元素不是要查的元素} else {// 判斷中間這個元素是不是比目標元素大if (arr[mid] > target) {// 把結束位置調整到中間位置的前一個位置end = mid - 1;// 中間這個元素比目標元素小} else {// 把開始位置調整到中間位置的后一個位置begin = mid + 1;}// 取出新的中間位置mid = (begin + end) / 2;}}System.out.println("index: " + index);}}

P9-2.7查找算法整合

1、MyArray.java

package demo1.util;import java.util.Arrays;public class MyArray {// 用于存儲數據的數組private int[] elements; // 只能存 int, 存其他類型的數據:objectpublic MyArray() {elements = new int[0];}// 獲取數組長度的方法public int size() {return elements.length;}// 往數組的末尾添加一個元素public void add(int element) {// 創建一個新的數組int[] newArr = new int[elements.length + 1];// 把原數組中的元素復制到新數組中for (int i = 0; i < elements.length; i++) {newArr[i] = elements[i];}// 把添加的元素放入新數組中newArr[elements.length] = element;// 使用新數組替換舊數組elements = newArr;}// 打印所有元素到控制臺public void show() {System.out.println(Arrays.toString(elements));}// 刪除數組中的元素public void delete(int index) {// 判斷下標是否越界if (index < 0 || index > elements.length - 1) {throw new RuntimeException("下標越界");}// 創建一個新的數組,長度為原數組的長度-1int[] newArr = new int[elements.length - 1];// 復制原有數據到新數組for (int i = 0; i < newArr.length; i++) {// 想要刪除的元素前面的元素if (i < index) {newArr[i] = elements[i];// 想要刪除的元素后面的元素} else {newArr[i] = elements[i + 1];}}// 新數組替換舊數組elements = newArr;}// 取出指定位置的元素public int get(int index) {// 判斷下標是否越界if (index < 0 || index > elements.length - 1) {throw new RuntimeException("下標越界");}return elements[index];}// 插入一個元素到指定位置public void insert(int index, int element) {// 創建一個新的數組int[] newArr = new int[elements.length + 1];// 將原數組中的元素放入新數組中。for (int i = 0; i < elements.length; i++) {// 目標位置之前的元素if (i < index) {newArr[i] = elements[i];// 目標位置之后的元素} else {newArr[i + 1] = elements[i];}}// 插入新的元素newArr[index] = element;// 新數組替換舊數組elements = newArr;}// 替換指定位置的元素public void set(int index, int element) {// 判斷下標是否越界if (index < 0 || index > elements.length - 1) {throw new RuntimeException("下標越界");}elements[index] = element;}// 線性查找public int search(int target) {// 遍歷數組for (int i = 0; i < elements.length; i++) {if (elements[i] == target) {return i;}}// 沒有找到對應的元素return -1;}// 二分法查找public int binarySearch(int target) {// 記錄開始位置int begin = 0;// 記錄結束位置int end = elements.length - 1;// 記錄中間的位置int mid = (begin + end) / 2;// 循環查找while (true) {// 什么情況下沒有這個元素?// 開始在結束位置之后或重合,沒有這個元素if (begin >= end) {return -1;}// 判斷中間的這個元素是不是要查找的元素if (elements[mid] == target) {return mid;// 中間這個元素不是要查的元素} else {// 判斷中間這個元素是不是比目標元素大if (elements[mid] > target) {// 把結束位置調整到中間位置前一個位置end = mid - 1;// 中間這個元素比目標元素小} else {// 把開始位置調整到中間位置的后一個位置begin = mid + 1;}// 取出新的中間位置mid = (begin + end) / 2;}}}}

2、TestMyArraySearch.java

package demo1;import demo1.util.MyArray;public class TestMyArraySearch {public static void main(String[] args) {MyArray ma = new MyArray();ma.add(1);ma.add(2);ma.add(3);ma.add(4);ma.add(5);// 調用線性查找方法int index = ma.search(0);System.out.println("index: " + index);// 調用二分法查找int index2 = ma.binarySearch(6);System.out.println("index2: " + index2);}}

總結

以上是生活随笔為你收集整理的数据结构Java01【数据结构概述、数组基本使用】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。