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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

抄代码DAY6

發布時間:2023/12/20 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 抄代码DAY6 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

鏈表

鏈表是一種物理存儲單元上非連續、非順序的存儲結構,數據元素的邏輯順序是通過鏈表中的指針鏈接次序實現的。

每個數據元素單元里有date域和next指針域。next指針指向下一個數據元素的date域,這樣把整個鏈表像像一個鏈一樣連起來。要注意保證next域指向的元素唯一。

寫了一個Node類,定義數據類型:

class Node {int data;//data域Node next;//next指針域public Node(int paraValue) {data = paraValue;next = null;}}

在鏈表中設置一個頭節點(不存儲任何數據),便于對鏈表的統一操作(增刪改查),否則還得對第一個節點專門設置操作。

Node header;//頭節點

?對toString方法進行重寫,(具體在DAY4)

當對對象打印輸出的時候,可以發現,直接輸出對象與調用對象的toString()方法產生的效果是一致的。因為當輸出對象的時候,調用的也是對象的toString()方法,只不過其不可見而已。

當使用toString()方法對象進行描述時,輸出格式為:類名+@+哈希碼。hashCode的值在JAVA中不同對象輸出不同的值,hashCode是通過將對象的地址轉換成一個整數來實現。

一般是方法希望獲得一個對象的詳細信息,可以對toSting方法進行重寫。此處對其進行了重寫。

//重寫方法,這個在DAY3中寫過public String toString() {String resultString = "";if (header.next == null) {return "empty";} Node tempNode = header.next;while (tempNode != null) {resultString += tempNode.data + ", ";tempNode = tempNode.next;} return resultString;}

?查找操作在插入和刪除操作里面都要用,在鏈表上的操作都是利用指針來進行。

1.查找操作

寫locate方法,設置兩個指針:tempPosition(遍歷指針,用來向后查找)和tempCurrentPosition(指向當前的元素位置),利用while循環進行查找。找到了用tempCurrentPosition指針賦值給tempPosition,再返回。

//查找public int locate(int paraValue) {int tempPosition = -1;//查找的指針Node tempNode = header.next;//從頭節點后一個節點開始查找int tempCurrentPosition = 0;//指向當前位置的指針while (tempNode != null) {if (tempNode.data == paraValue) {tempPosition = tempCurrentPosition;//找到查找元素,將當前指針覆蓋查找指針break;} //判空//沒找到,繼續向后查找tempNode = tempNode.next;tempCurrentPosition++;}return tempPosition;//返回}

2.插入操作

輸入待插入元素和待插入元素的位置。

關鍵是找到待插入元素的前一個位置,將新元素插入鏈表。

//插入元素public boolean insert(int paraPosition, int paraValue) {Node tempNode = header;//指針Node tempNewNode;for (int i = 0; i < paraPosition; i++) {if (tempNode.next == null) {System.out.println("The position " + paraPosition + " is illegal.");return false;} // 報錯tempNode = tempNode.next;//指針指向下一個元素} // 查找待插入位置tempNewNode = new Node(paraValue);//創建新節點tempNewNode.next = tempNode.next;tempNode.next = tempNewNode;//將新節點插入鏈中return true;}

3.刪除操作

本操作為按存儲位置刪除,先查找到待刪除的元素位置。設置一個指針,用指針的元素的指針指向下下個元素的data域,完成刪除。

//刪除public boolean delete(int paraPosition) {if (header.next == null) {System.out.println("Cannot delete element from an empty list.");return false;}//報錯Node tempNode = header;//指針指向頭節點for (int i = 0; i < paraPosition; i++) {if (tempNode.next.next == null) {System.out.println("The position " + paraPosition + " is illegal.");return false;} //當指針指向節點的后兩個節點的指針與為空時報錯tempNode = tempNode.next;//指針指向下一個元素} tempNode.next = tempNode.next.next;//刪除元素return true;}

也可以輸入值來進行刪除,按值查找再進行刪除。

下面為測試代碼:

public static void main(String args[]) {linklist tempFirstList = new linklist();System.out.println("Initialized, the list is: " + tempFirstList.toString());for (int i = 0; i < 5; i++) {tempFirstList.insert(0, i);} System.out.println("Inserted, the list is: " + tempFirstList.toString());tempFirstList.insert(6, 9);tempFirstList.delete(4);tempFirstList.delete(2);System.out.println("Deleted, the list is: " + tempFirstList.toString());tempFirstList.delete(0);System.out.println("Deleted, the list is: " + tempFirstList.toString());for (int i = 0; i < 5; i++) {tempFirstList.delete(0);System.out.println("Looped delete, the list is: " + tempFirstList.toString());} }

結果為

?總結:下面比較一下順序表和鏈表,在增刪改查這些操作上,順序表需要大量移動元素,而鏈表效率高,大大減小了時間復雜度。但是順序表又可以隨機訪問。所以說,選擇哪種數據結構進行存儲要具體問題具體分析。

總結

以上是生活随笔為你收集整理的抄代码DAY6的全部內容,希望文章能夠幫你解決所遇到的問題。

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