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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构数组和链表

發布時間:2023/12/31 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构数组和链表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數組

數組(讀操作多,寫少的情況下)線性數據結構

數組的特點可以在內存中順序存儲,是一個順序表。 數組中的每一個元素,都存儲在小小的內存單元中,并且元素之間接緊密排列,既不能打亂元素的存儲順序,也不能跳過某個存儲單元進行存儲。

讀取數組:

數組可以通過下標快速查找對應的數據,時間復雜度為O(1) 更新數據:數組可以通過下標快速找到數據進行替換,時間復雜度為O(1)

插入數據:

數組查找數據時間復雜度為O(1),然后需要將后面的數據依次后移和替換,數組循環進行替換的時間復雜度為O(n)。時間復雜度為 O(1)+O(n)=O(n)

刪除元素:

數組刪除元素也涉及到元素的移動時間復雜度為O(n)

鏈表

鏈表在內存中是隨機存儲(讀操作少,寫多的情況下)線性數據結構

單向鏈表

數據結構為 data(存儲的變量)、next(下一個節點的指針)

雙向鏈表

數據結構為 prev(上一節點) 、data(存儲的變量)、next(下一節點的指針)

鏈表的時間復雜度
鏈表的讀取:

首先要從第一個節點進行讀取,沒有找到在通過next進行讀取。時間復雜度為O(n)

鏈表的修改:

首先要找到該節點,直接修改該節點對應的data就可以了,不考慮查找節點時間夫扎渡為O(1)

鏈表插入數據;

在不考慮查找數據,我們直需拿到上一個元素的next指向當前指針,在把當前指針的next指向下一指針就好了。不考慮查詢的時間復雜度為O(1)

鏈表刪除數據:

在不考慮查詢的情況下,鏈表刪除數據直需把當前指針的next給上一指針即可。不考慮查詢的時間復雜度為O(1)

數組和鏈表的差異:

數組的優勢在于能夠快速定位元素,對于讀操作多,寫操作少的情況下。使用數組更方便。相反使用讀操作少,寫操作多的情況下使用鏈表更方便。

鏈表代碼實現

public class APi {private Node head; //鏈表頭部private Node last; //鏈表尾部private int size; //鏈表長度/*** 鏈表插入數據* @param data 插入的值* @param index 插入的位置*/public void inseart(int data,int index) throws Exception{if(index < 0 || index > size) { //判斷鏈表是否超出下限throw new Exception("超出下標");}Node node=new Node(data); //創建鏈表if(size==0){//判斷鏈表長度是否為0head = node;last =node;} else if(index ==0){ //插入頭節點node.setNext(head);head = node;} else if(index==size) { //插入尾節點last.setNext(node); //上一個元素的next設為當前元素的值last=node; //當前尾節點}else{Node node1 = get(index - 1); // 拿到上一個元素node.setNext(node1.getNext()); //設置當前節點的next為上一個節點的nextnode1.setNext(node);}size++;}//查找鏈表public Node get(int index) throws Exception {if(index<0 || index>size){throw new IndexOutOfBoundsException("下標越界");}Node node=head;for(int i = 0; i < index; i++) {node=node.getNext();}return node;}//輸出鏈表public void output(){Node node = head;while (node != null) {System.out.println(node.getData());node = node.getNext();}}} public class Node {private int data ;private Node next;Node(int data){this.data = data;}public int getData() {return data;}public void setData(int data) {this.data = data;}public Node getNext() {return next;}public void setNext(Node node) {this.next = node;} }

總結

以上是生活随笔為你收集整理的数据结构数组和链表的全部內容,希望文章能夠幫你解決所遇到的問題。

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