算法入門之基本數據結構:鏈表

前面我們簡單的對隊列和棧有了個瞭解,今天我們還要將一種數據結構,Java中很多集合類都是由這幾種數據結構演變而來的,除了隊列和棧還有我們今天要說的鏈表,鏈表其實還是蠻複雜的,在C中有個指針用來實現,很多人說java不存在指針概念,是不是就不能實現鏈表呢,答案是否,java雖然沒有指針但是有對象的引用,我們先看看java中怎麼實現鏈表,然後再來具體分析鏈表到底是一種怎樣的數據結構

 

代碼模擬鏈表:

public class MyLinkList {
    // 使用數組模擬單向鏈表
    public static void main(String[] args) {
        //1.通過排序算法已經排好序的一組數
        int[] waitNumbers = {3,6,8,13,15,35};
        int t = waitNumbers.length;
        //2.定義一個數組存放數據
        int[] data = new int[10];
        //3.數據先放入第一個數組
        for (int i = 0; i < waitNumbers.length ; i++) {
            data[i] = waitNumbers[i];
        }
        //4.定義一個數組存下個節點的位置
        int[] nextNode = new int[10];
        //5.初始化已知數組下個節點位置
        for (int i = 0; i < t ; i++) {
            if(i == t-1){
                //說明到了數組最後一位,下個節點不存在
                nextNode[i] = 0;
            }else{
                nextNode[i] = i+1;
            }
        }
        System.out.println(JSON.toJSONString(data));
        System.out.println(JSON.toJSONString(nextNode));
        // 向data中插入一個數字n(10)
        //6.首先要找到插入的數字的位置
        int n = 10;
        for (int i = 0; i < data.length; i++) {
            if(data[i] > n){
                //說明找到了,n應該插在第i-1位上
                data[t] = n;
                nextNode[t] = i;
                t += 1;
                break;
            }else{
                // 數組中的值都比n小,
                data[t] = n;
                nextNode[t-1] = t;
                nextNode[t] = 0;
            }
        }
        System.out.println(JSON.toJSONString(data));
        System.out.println(JSON.toJSONString(nextNode));
    }
}
結果:
存值數組:[3,6,8,13,15,35,0,0,0,0] 
存下個節點位置數組:[1,2,3,4,5,0,0,0,0,0]
插入一個節點10後
存值數組:[3,6,8,13,15,35,10,0,0,0]
存下個節點位置數組:[1,2,3,4,5,6,3,0,0,0]

 

分析

    Java中經典的鏈表代表是LinkedList我們今天沒有去講LinkedList如何實現,也沒有去講如何使用他的API,而是自己通過數組實現了一個簡單的鏈表,旨在更方便去理解這種數據結構,通過上述代碼我們不難發現鏈表的一些基本特性:

  • 兩大基本組成元素:數據塊;指向下個節點的存儲空間

  • 數據爲非線性結構

  • 基本操作:插入元素;刪除元素(刪除元素的時候就得實現該元素前一個節點和後一個節點的連接)

 

鏈表結構分析如下圖

 

本文只分析鏈表結構,關於Java中鏈表的實現有很多以後我們會再具體分析,有興趣的可以先去了解了解LinkedList的原理,本文不做研究

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章