国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

數(shù)據(jù)結(jié)構(gòu)(數(shù)組)

這篇具有很好參考價(jià)值的文章主要介紹了數(shù)據(jù)結(jié)構(gòu)(數(shù)組)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一.數(shù)組的概念


? ? 1. 數(shù)組定義

????????數(shù)組(Array)是一種線性結(jié)構(gòu)。它用一組連續(xù)的內(nèi)存空間,來存儲(chǔ)一組具有相同數(shù)據(jù)類型的數(shù)據(jù)。


? ?2. 數(shù)組的特點(diǎn)

????????①用來存儲(chǔ)一組類型相同的數(shù)據(jù)。

? ? ? ? ②在內(nèi)存中,分配連續(xù)的空間,數(shù)組創(chuàng)建時(shí)需要指定容量。因?yàn)閿?shù)組為了保持內(nèi)存的數(shù)據(jù)的連續(xù)性,所以會(huì)導(dǎo)致插入、刪除這兩個(gè)操作比較低效。

?? ? ? ?③數(shù)據(jù)類型[] 數(shù)組名 int[] arr = new int[10]; int[] arr2 = {1,2,3,4};

?? ? ? ?④訪問數(shù)組中的數(shù)據(jù)時(shí),通過索引訪問,這也是數(shù)組的一大優(yōu)點(diǎn),可以實(shí)現(xiàn)隨機(jī)訪問(通過索引,時(shí)間復(fù)雜度為O(1)),所以隨機(jī)訪問時(shí),效率比較高。 所以,數(shù)組是適合查找操作的,但查找的時(shí)間復(fù)雜度并不是O(1),即使是排好序的數(shù)組,使用二分查找法,時(shí)間復(fù)雜度也是(logn)。

?? ? ? ?⑤索引從0開始,最大到數(shù)組長(zhǎng)度-1。索引從0開始,是因?yàn)樗饕?數(shù)組元素下標(biāo)),確切的來說應(yīng)該叫做偏移量,例如,arr[0]就表示偏移量為0的元素,也就是首地址。arr[k]就表示偏移量為k個(gè)type_size的位置。

?? ? ? ?⑥常見異常:NullPointException(空指針異常)、ArrayIndexOutOfBoundsException(數(shù)組索引越界異常)。

數(shù)據(jù)結(jié)構(gòu)(數(shù)組),數(shù)據(jù)結(jié)構(gòu),算法

package com.gty.algo.lesson;

import java.util.Arrays;

public class ArrayDemo1 {
    public static void main(String[] args) {

        // 1.創(chuàng)建數(shù)組
        int[] arr = {11, 9, 1, 2, 26, 12};
        // 2.訪問指定位置的值
        int num = arr[0]; //獲取第一個(gè)位置的值
        System.out.println("num = " + num);
        // 3.修改指定位置的值
        arr[3] = 15;
        System.out.println("修改后的值為:" + arr[3]);
        // 4.遍歷數(shù)組
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
        System.out.println();

        // 5.數(shù)組中的異常(數(shù)組索引越界異常)
        System.out.println(arr[arr.length]); //ArrayIndexOutOfBoundsException

        // 空指針異常
        String[] s = new String[6];
        System.out.println(Arrays.toString(s)); //[null, null, null, null, null, null]
        System.out.println(s[0].length()); //NullPointerException

    }
}

數(shù)據(jù)結(jié)構(gòu)(數(shù)組),數(shù)據(jù)結(jié)構(gòu),算法

數(shù)據(jù)結(jié)構(gòu)(數(shù)組),數(shù)據(jù)結(jié)構(gòu),算法

注:

  • 數(shù)組是一段連續(xù)的內(nèi)存空間,用戶來存放具有相同數(shù)據(jù)類型的元素。
  • 在定義數(shù)組時(shí),需要注意數(shù)組的類型和長(zhǎng)度。類型決定了數(shù)組可以存儲(chǔ)的元素的種類,長(zhǎng)度定義了數(shù)組可以存儲(chǔ)的元素的數(shù)量。
  • 在修改與訪問數(shù)組時(shí),要注意數(shù)組的索引,避免出現(xiàn)數(shù)組索引越界異常。在修改數(shù)組中的元素的值時(shí),要注意數(shù)組中元素的數(shù)據(jù)類型,避免出現(xiàn)類型不一致的錯(cuò)誤。
3.數(shù)組的遍歷

? ? ? ? 方法:for循環(huán)、for-each(增強(qiáng)for循環(huán))、調(diào)用toString方法 。

package com.gty.algo.lesson;

import java.util.Arrays;

public class ArrayDemo1 {
    public static void main(String[] args) {
        int[] arr = {11, 9, 1, 2, 26, 12};
        /*
            數(shù)組的遍歷
         */
        //1.for循環(huán)
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
        System.out.println();
        //2.for-each(增強(qiáng)for循環(huán))
        for (int x:arr) {
            System.out.print(x + " ");
        }
        System.out.println();
        //調(diào)用toString方法
        System.out.println(Arrays.toString(arr));

    }
}

?二.封裝數(shù)組

? ? ? ? 基于java提供給我們的數(shù)組,進(jìn)行二次封裝,我們可以自己去寫一個(gè)我們自己的數(shù)組(動(dòng)態(tài)數(shù)組)去實(shí)現(xiàn)數(shù)組的各種基本功能。

1.封裝數(shù)組

主要功能:

? ? ? ? 添加元素,獲取元素,查看當(dāng)前數(shù)組中元素的個(gè)數(shù),獲取容積,修改元素,數(shù)組擴(kuò)容,判空,查詢指定元素,刪除指定位置的元素。

package com.gty.algo.lesson.array;


// 支持泛型
public class MyArray<T> {

    private T[] arr;
    private int size;
    private int capacity; //容積


    // 構(gòu)造方法
    public MyArray(int capacity) {
        // 入?yún)⑴袛?        if (capacity <= 0) {
            throw new IllegalArgumentException("輸入容積異常!");
        }
        this.capacity = capacity;
        this.size = 0;
        this.arr = (T[]) new Object[this.capacity];
    }

    // 獲取元素個(gè)數(shù)
    public int getSize() {
        return this.size;
    }

    // 獲取容積
    public int getCapacity() {
        return this.capacity;
    }

    // 添加元素
    public void add(T item) {
        this.arr[this.size] = item;
        this.size++;
    }

    // 向指定位置添加元素
    public void addValueByIndex(int index, T value) {
        if (index < 0 || index > this.size) {
            throw new IllegalArgumentException("索引異常!");
        }
        if (this.size == this.capacity) {
            resize(this.capacity * 2);
        }
        for (int i = this.size - 1; i >= index; i--) {
            this.arr[i + 1] = this.arr[i];
        }
        this.arr[index] = value;
        this.size++;
    }

    // 擴(kuò)容
    private void resize(int newCapacity) {
        T[] newArr = (T[]) new Object[newCapacity];

        for (int i = 0; i < this.size; i++) {
            newArr[i] = this.arr[i];
        }
        // 改變?nèi)萜髋c容積
        this.arr = newArr;
        this.capacity = newCapacity;
    }

    // 判空
    public boolean isEmpty() {
        return this.size == 0;
    }

    // 修改元素
    public void modifyValueByIndex(int index, T value) {
        // 入?yún)⑴袛?        if (index < 0 || index > capacity) {
            throw new IllegalArgumentException("索引異常!");
        }
        this.arr[index] = value;
    }

    // 獲取指定位置的值
    public T getValueByIndex(int index) {
        // 入?yún)⑴袛?        if (index < 0 || index > capacity) {
            throw new IllegalArgumentException("索引異常!");
        }
        return this.arr[index];
    }

    // 查詢指定的值在數(shù)組中是否存在,存在返回索引,不存在返回-1
    public int containsValue(T value) {
        for (int i = 0; i < this.size; i++) {
            if (value.equals(this.arr[i])) {
                return i;
            }
        }
        return -1;
    }

    // 刪除指定位置的元素
    public T deleteValueByIndex(int index) {
        // 入?yún)⑴袛?        if (index < 0 || index > capacity) {
            throw new IllegalArgumentException("索引異常");
        }
        // 1.找到刪除的位置的元素
        T deValue = this.arr[index];
        // 2.將刪除元素之后的元素前移
        for (int j = index + 1; j < this.size; j++) {
            this.arr[j - 1] = this.arr[j];
        }
        this.size--;
        // 判斷是否縮容
        if (this.size <= this.capacity / 4 && this.capacity / 2 > 0) {
            resize(this.capacity / 2);
        }
        return deValue;
    }
    
    
    // 重寫toString方法,用于數(shù)組打印
    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("{");
        for (int i = 0; i < this.size; i++) {
            sb.append(this.arr[i]);
            if (i < this.size - 1) {
                sb.append(",");
            }
        }
        sb.append("}");
        return sb.toString();
    }

}
?2.例題介紹

? ? ? ? 兩數(shù)之和(1. 兩數(shù)之和 - 力扣(LeetCode))

  • ?題解:可以利用Map,將數(shù)組中的值和其對(duì)應(yīng)的索引以鍵值對(duì)的方式存放在Map中。遍歷數(shù)組,當(dāng)發(fā)現(xiàn)target - nums[i](這是解決本題的重點(diǎn)思想,將兩數(shù)之和轉(zhuǎn)換為兩數(shù)之差(值1 - 值2 = 目標(biāo)值 即為,目標(biāo)值 - 值1 = 值2))在Map中,說明找到了目標(biāo)值,返回target - nums[i]的下標(biāo)和i即可?;谝陨纤枷?,在向Map中存放鍵值對(duì)時(shí),可以將數(shù)組中元素的值作為鍵,元素在數(shù)組中的索引作為值存放在Map中,方便我們獲取索引。
  • 代碼實(shí)現(xiàn)
package com.gty.algo.subject;

import java.util.Arrays;
import java.util.HashMap;

public class LeetCode_01 {
    public int[] twoSum(int[] nums, int target) {
        // 入?yún)⑴袛?        if(nums == null || nums.length < 2){
            return null;
        }

        // 利用Map,將數(shù)組中的值和其對(duì)應(yīng)的索引以鍵值對(duì)的方式存放起來,可以將值作為Map中的鍵,索引作為值,
        HashMap<Integer, Integer> map = new HashMap<>();
        // 遍歷數(shù)組,求數(shù)組中兩數(shù)之和等于目標(biāo)值,即求目標(biāo)值 - 值1 = 值2,
        for (int i = 0; i < nums.length; i++) {
            int temp = target - nums[i];
            if(map.containsKey(temp)){ //判斷值是否存在
                return new int[]{map.get(temp),i}; //map.get(temp)---通過key獲取key對(duì)應(yīng)的value
            }else{
                map.put(nums[i],i); //向Map中添加元素
            }
        }
        return null;
    }


    public static void main(String[] args) {
        int [] nums = {2,7,11,15};
        LeetCode_01 leetCode_01 = new LeetCode_01();
        int [] res = leetCode_01.twoSum(nums,9);
        System.out.println(Arrays.toString(res)); //[0, 1]
    }
}

?數(shù)據(jù)結(jié)構(gòu)(數(shù)組),數(shù)據(jù)結(jié)構(gòu),算法數(shù)據(jù)結(jié)構(gòu)(數(shù)組),數(shù)據(jù)結(jié)構(gòu),算法文章來源地址http://www.zghlxwxcb.cn/news/detail-824673.html

到了這里,關(guān)于數(shù)據(jù)結(jié)構(gòu)(數(shù)組)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 數(shù)據(jù)結(jié)構(gòu)與算法-數(shù)組(附阿里面試題)

    ??????? 給你一個(gè)文件里面包含全國(guó)人民(14億)的年齡數(shù)據(jù)(0~180),現(xiàn)在要你統(tǒng)計(jì)每一個(gè)年齡?? 有多少人? ???????? 給定機(jī)器為 單臺(tái)+2CPU+2G內(nèi)存。不得使用現(xiàn)成的容器,比如map等。 (這一句可以忽略) ????????在以上情況下你該如何以最高效的方法來解決這個(gè)

    2024年02月13日
    瀏覽(26)
  • 【數(shù)據(jù)結(jié)構(gòu)和算法】尋找數(shù)組的中心下標(biāo)

    【數(shù)據(jù)結(jié)構(gòu)和算法】尋找數(shù)組的中心下標(biāo)

    Java基礎(chǔ)合集 數(shù)據(jù)結(jié)構(gòu)與算法合集 設(shè)計(jì)模式合集 多線程合集 分布式合集 ES合集 其他系列文章導(dǎo)航 文章目錄 前言 一、題目描述 二、題解 2.1 前綴和的解題模板 2.1.1 最長(zhǎng)遞增子序列長(zhǎng)度 2.1.2 尋找數(shù)組中第 k 大的元素 2.1.3 最長(zhǎng)公共子序列長(zhǎng)度 2.1.4 尋找數(shù)組中第 k 小的元素 2

    2024年02月04日
    瀏覽(28)
  • 【數(shù)據(jù)結(jié)構(gòu)和算法】使用數(shù)組的結(jié)構(gòu)實(shí)現(xiàn)鏈表(單向或雙向)

    【數(shù)據(jù)結(jié)構(gòu)和算法】使用數(shù)組的結(jié)構(gòu)實(shí)現(xiàn)鏈表(單向或雙向)

    上文我們通過結(jié)構(gòu)體的結(jié)構(gòu)實(shí)現(xiàn)了隊(duì)列 、以及循環(huán)隊(duì)列的實(shí)現(xiàn),我們或許在其他老師的教學(xué)中,只學(xué)到了用結(jié)構(gòu)體的形式來實(shí)現(xiàn)鏈表、隊(duì)列、棧等數(shù)據(jù)結(jié)構(gòu),本文我想告訴你的是,我們 可以使用數(shù)組的結(jié)構(gòu)實(shí)現(xiàn)鏈表、單調(diào)棧、單調(diào)隊(duì)列 目錄 前言 一、用數(shù)組結(jié)構(gòu)的好處 1.數(shù)

    2024年01月20日
    瀏覽(96)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法——TypeScript】數(shù)組、棧、隊(duì)列、鏈表

    【數(shù)據(jù)結(jié)構(gòu)與算法——TypeScript】數(shù)組、棧、隊(duì)列、鏈表

    解決問題 的過程中,不僅僅 數(shù)據(jù)的存儲(chǔ)方式會(huì)影響效率,算法的優(yōu)劣也會(huì)影響效率 什么是算法? 定義: ?? 一個(gè)有限指令集,每條指令的描述不依賴于言語 (編寫指令:java/c++/ts/js) ?? 接收一些輸入(有些情況下不需要輸入)(接收:排序:無序數(shù)組) ?? 產(chǎn)生輸出 (

    2024年02月14日
    瀏覽(45)
  • 數(shù)據(jù)結(jié)構(gòu)與算法·第5章【數(shù)組和廣義表】

    數(shù)據(jù)結(jié)構(gòu)與算法·第5章【數(shù)組和廣義表】

    兩種順序映象的方式: 以行序?yàn)橹餍?低下標(biāo)優(yōu)先); 以列序?yàn)橹餍?高下標(biāo)優(yōu)先)。 而 n n n 維數(shù)組: LOC(x1, x2, ..., xn) = LOC(0, 0, ..., 0) + [(x1 × b1 + x2) × b2 + x3] × b3 + ... + xn 數(shù)據(jù)類型定義 其中: A.bounds是每一維可以放多少元素: a[A.bounds[0]][A.bounds[1]][A.bounds[2]]…… A.constants是指向每

    2024年02月08日
    瀏覽(23)
  • 算法與數(shù)據(jù)結(jié)構(gòu)(二十四)最優(yōu)子結(jié)構(gòu)原理和 dp 數(shù)組遍歷方向

    算法與數(shù)據(jù)結(jié)構(gòu)(二十四)最優(yōu)子結(jié)構(gòu)原理和 dp 數(shù)組遍歷方向

    注:此文只在個(gè)人總結(jié) labuladong 動(dòng)態(tài)規(guī)劃框架,僅限于學(xué)習(xí)交流,版權(quán)歸原作者所有; 本文是兩年前發(fā)的 動(dòng)態(tài)規(guī)劃答疑篇open in new window 的修訂版,根據(jù)我的不斷學(xué)習(xí)總結(jié)以及讀者的評(píng)論反饋,我給擴(kuò)展了更多內(nèi)容,力求使本文成為繼 動(dòng)態(tài)規(guī)劃核心套路框架 之后的一篇全面

    2024年02月12日
    瀏覽(24)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】Kadane‘s算法(動(dòng)態(tài)規(guī)劃、最大子數(shù)組和)

    【數(shù)據(jù)結(jié)構(gòu)與算法】Kadane‘s算法(動(dòng)態(tài)規(guī)劃、最大子數(shù)組和)

    Kadane\\\'s 算法是一種用于解決最大子數(shù)組和問題的動(dòng)態(tài)規(guī)劃算法。這類問題的目標(biāo)是在給定整數(shù)數(shù)組中找到一個(gè)連續(xù)的子數(shù)組,使其元素之和最大(數(shù)組含有負(fù)數(shù))。 算法的核心思想是通過迭代數(shù)組的每個(gè)元素,維護(hù)兩個(gè)變量來跟蹤局部最優(yōu)解和全局最優(yōu)解。 以下是Kadane’s算

    2024年03月22日
    瀏覽(28)
  • 頭歌(C語言)-數(shù)據(jù)結(jié)構(gòu)與算法-數(shù)組(共7關(guān))

    任務(wù)描述 本關(guān)任務(wù):將十個(gè)數(shù)進(jìn)行從大到小的順序進(jìn)行排列。 相關(guān)知識(shí)(略) 編程要求 根據(jù)提示,在右側(cè)編輯器 Begin-End 處補(bǔ)充代碼。 輸入 輸入十個(gè)整數(shù)。 輸出 以從大到小的順序輸出這個(gè)十個(gè)數(shù)。 測(cè)試說明 樣例輸入: 1 2 3 4 5 6 7 8 9 10 樣例輸出: 10 9 8 7 6 5 4 3 2 1 代碼:

    2024年02月11日
    瀏覽(31)
  • 數(shù)據(jù)結(jié)構(gòu)與算法教程,數(shù)據(jù)結(jié)構(gòu)C語言版教程!(第五部分、數(shù)組和廣義表詳解)五

    數(shù)據(jù)結(jié)構(gòu)與算法教程,數(shù)據(jù)結(jié)構(gòu)C語言版教程?。ǖ谖宀糠帧?shù)組和廣義表詳解)五

    數(shù)組和廣義表,都用于存儲(chǔ)邏輯關(guān)系為“一對(duì)一”的數(shù)據(jù)。 數(shù)組存儲(chǔ)結(jié)構(gòu),99% 的編程語言都包含的存儲(chǔ)結(jié)構(gòu),用于存儲(chǔ)不可再分的單一數(shù)據(jù);而廣義表不同,它還可以存儲(chǔ)子廣義表。 本章重點(diǎn)從矩陣的角度討論二維數(shù)組的存儲(chǔ),同時(shí)講解廣義表的存儲(chǔ)結(jié)構(gòu)以及有關(guān)其廣度和

    2024年01月23日
    瀏覽(26)
  • 數(shù)據(jù)結(jié)構(gòu)與算法教程,數(shù)據(jù)結(jié)構(gòu)C語言版教程?。ǖ谖宀糠帧?shù)組和廣義表詳解)三

    數(shù)據(jù)結(jié)構(gòu)與算法教程,數(shù)據(jù)結(jié)構(gòu)C語言版教程?。ǖ谖宀糠帧?shù)組和廣義表詳解)三

    數(shù)組和廣義表,都用于存儲(chǔ)邏輯關(guān)系為“一對(duì)一”的數(shù)據(jù)。 數(shù)組存儲(chǔ)結(jié)構(gòu),99% 的編程語言都包含的存儲(chǔ)結(jié)構(gòu),用于存儲(chǔ)不可再分的單一數(shù)據(jù);而廣義表不同,它還可以存儲(chǔ)子廣義表。 本章重點(diǎn)從矩陣的角度討論二維數(shù)組的存儲(chǔ),同時(shí)講解廣義表的存儲(chǔ)結(jié)構(gòu)以及有關(guān)其廣度和

    2024年01月21日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包