資料結構與演算法——陣列
線性結構:陣列:
對陣列的基本操作:
package dataStruct;
public class TestArray {
public static void main(String[] args) {
//建立一個陣列
int [] arr1 = new int [3];
//獲取陣列的長度
int length1= arr1.length;
System.out.println(length1);
//訪問陣列中的元素:陣列名[下標] 注意:下標從零開始,最大可取到長度—1。
int element0 = arr1[0];
System.out.println("element0="+element0);
//為陣列中的元素賦值
arr1[0]=40;
System.out.println(arr1[0]);
arr1[1]=30;
arr1[2]=70;
//遍歷陣列
for(int i=0;i<arr1.length;i++) {
System.out.println(arr1[i]);
}
//建立陣列的同時為他賦值
int[] arr2= new int[] {22,56,88,12};
System.out.println("arr2 length:"+arr2.length);
}
}
將一個數加入的一個陣列中:
package dataStruct;
import java.util.Arrays;
public class TestOpArray {
public static void main(String[] args) {
//陣列的長度不可變
int[] arr1 =new int[] {9,8,7};
//Array.toString()
//方法將陣列直接輸出
System.out.println(Arrays.toString(arr1));
//新陣列長度+1
int[] arr2 =new int[arr1.length+1];
//遍歷陣列1將陣列1中的數傳給陣列2
for(int i=0;i<arr1.length;i++) {
arr2[i]=arr1[i];
}
//設定要新增的數
int newnumber=6;
//將新陣列的最後一個數值設為要新增的
arr2[arr2.length-1]=newnumber;
//改變arr1的指標,使之指向arr2
arr1=arr2;
System.out.println(Arrays.toString(arr1));
}
}
從陣列中刪除一個元素:
package dataStruct;
import java.util.Arrays;
import java.util.Scanner;
public class TestOpArray2 {
public static void main(String[] args) {
int[] arr1=new int[] {6,5,4,3,2};
System.out.println(Arrays.toString(arr1));
Scanner input =new Scanner(System.in);
System.out.println("輸入想要刪除的數的位置");
int n=input.nextInt();
int[] arr2=new int[arr1.length-1];
/*使用一個for
* for(int i=0;i<n;i++) {
* arr2[i]=arr1[i];
* }
* for(int j=n+1;j<arr1.length;j++) {
* arr2[j-1]=arr1[j];
* }
*/
//使用兩個for迴圈
for(int i=0;i<arr1.length;i++) {
if(i<n) {
arr2[i]=arr1[i];
}if(i>n) {
arr2[i-1]=arr1[i];
}
}
arr1=arr2;
System.out.println(Arrays.toString(arr1));
}
}
物件導向的陣列:
陣列例項:
例項類:
package dataStruct.util;
import java.util.Arrays;
public class MyArray {
private int[] arr;
//建構函式
public MyArray() {
arr=new int[0];
}
//獲取數字大小
public int size() {
return arr.length;
}
//在陣列後新增一個元素
public void add(int newn) {
int[] arr2=new int[arr.length+1];
for(int i=0;i<arr.length;i++) {
arr2[i]=arr[i];
}
arr2[arr2.length-1]=newn;
arr=arr2;
}
//列印陣列
public void show() {
System.out.println(Arrays.toString(arr));
}
//刪除陣列中的元素
public void delete(int n) {
if(n<0||n>arr.length-1) {
throw new RuntimeException("下標越界");
}
int[] arr2=new int[arr.length-1];
for(int i=0;i<arr.length;i++) {
if(i<n) {
arr2[i]=arr[i];
}if(i>n) {
arr2[i-1]=arr[i];
}
}
arr=arr2;
}
//獲取陣列中的某一個元素
public int get(int n) {
return arr[n];
}
//像陣列指定位置新增元素
public void addOne(int n,int a) {
int [] arr2 =new int[arr.length+1];
for(int i=0;i<n;i++) {
arr2[i]=arr[i];
}
arr2[n]=a;
for(int j=n;j<arr.length;j++) {
arr2[j+1]=arr[j];
}
arr=arr2;
}
//替換指定位置的元素
public void set(int index, int element) {
// 判斷下標是否越界
if (index < 0 || index > arr.length - 1) {
throw new RuntimeException("下標越界");
}
arr[index] = element;
}
}
}
測試類:
package dataStruct;
import dataStruct.util.MyArray;
public class TestMyArray {
public static void main(String[] args) {
MyArray ma=new MyArray();
ma.show();
ma.add(5);
ma.add(7);
ma.add(6);
ma.show();
int s=ma.size();
System.out.println(s);
ma.delete(0);
ma.show();
System.out.println(ma.get(1));
ma.addOne(1, 9);
ma.show();
ma.set(2, 88);
ma.show();
}
}
查詢演算法:
1.先行查詢法:
遍歷數值挨個找相同
package dataStruct;
public class TestArraySearch {
public static void main(String[] args) {
int[] arr=new int[] {5,6,9,1,3,4,7};
//目標元素下標
int index=-1;
//目標元素值
int n=3;
for(int i=0;i<arr.length;i++) {
if(arr[i]==n) {
index=i;
}
}
System.out.println(index);
}
}
2.二分法查詢:
目標陣列必須有序
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;
}
}
}
相關文章
- 資料結構與演算法 | 陣列(Array)資料結構演算法陣列
- 【資料結構與演算法】——稀疏陣列資料結構演算法陣列
- 資料結構與演算法學習-陣列資料結構演算法陣列
- 資料結構與演算法之稀疏陣列資料結構演算法陣列
- 資料結構與演算法:稀疏陣列(一)資料結構演算法陣列
- TypeScript演算法與資料結構-陣列篇TypeScript演算法資料結構陣列
- 資料結構與演算法—稀疏陣列和佇列資料結構演算法陣列佇列
- js資料結構與演算法 陣列、棧部分JS資料結構演算法陣列
- 資料結構與演算法整理總結---陣列,連結串列資料結構演算法陣列
- 【資料結構與演算法】字串匹配(字尾陣列)資料結構演算法字串匹配陣列
- 資料結構-陣列資料結構陣列
- 資料結構 - 陣列資料結構陣列
- 資料結構與演算法系列(一)陣列實現資料結構演算法陣列
- 資料結構與演算法知識點總結(1)陣列與連結串列資料結構演算法陣列
- 《JavaScript資料結構與演算法》筆記——第2章 陣列JavaScript資料結構演算法筆記陣列
- 資料結構與演算法基礎之指標和陣列資料結構演算法指標陣列
- 資料結構與演算法-佇列資料結構演算法佇列
- 資料結構之「陣列」資料結構陣列
- 資料結構之陣列資料結構陣列
- 資料結構2——陣列資料結構陣列
- 演算法與資料結構1800題 之 陣列與線性表(三)演算法資料結構陣列
- JavaScript 的資料結構和演算法 - 陣列篇JavaScript資料結構演算法陣列
- 資料結構與演算法-棧與佇列資料結構演算法佇列
- 看圖輕鬆理解資料結構與演算法系列(陣列)資料結構演算法陣列
- 陣列(Array)- 極客時間(資料結構與演算法之美)陣列資料結構演算法
- C#資料結構與演算法3-C# 串和陣列C#資料結構演算法陣列
- 前端學習 資料結構與演算法 快速入門 系列 —— 陣列前端資料結構演算法陣列
- javascript資料結構與演算法-佇列JavaScript資料結構演算法佇列
- 資料結構與演算法分析——佇列資料結構演算法佇列
- Java版-資料結構-陣列Java資料結構陣列
- LeetCode之資料結構——陣列LeetCode資料結構陣列
- JS資料結構(一)——陣列JS資料結構陣列
- JavaScript資料結構01 - 陣列JavaScript資料結構陣列
- 資料結構——樹狀陣列資料結構陣列
- [資料結構]KMP演算法(含next陣列詳解)資料結構KMP演算法陣列
- 資料結構與演算法——佇列(環形佇列)資料結構演算法佇列
- python演算法與資料結構-佇列(44)Python演算法資料結構佇列
- Java版-資料結構-佇列(陣列佇列)Java資料結構佇列陣列