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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

2021-9-下旬 数据结构-线性表-链表-java代码实现(复习用)

發布時間:2025/3/20 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2021-9-下旬 数据结构-线性表-链表-java代码实现(复习用) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

鏈表涉及到指針了,這里我還不了解java里對指針的隱藏,又由于以前學過C++里的指針,二者混淆,導致一開始非常蒙,出了很多問題,當然后來隨著邊寫邊查,基本都解決了。
順便學習了一下java里的泛型

//鏈表是一種“鏈式存儲”的線性表,所有元素的內存地址不一定是連續的,在結構上已經完全不是數組了 //普通線性表有個大缺點,可能會造成內存空間的浪費,有些位置不存元素時也占用內存 //那么能不能用到多少就申請多少內存呢?? 所以鏈表出現了//在定義鏈表類時,一般在定義鏈表大類中定義一個子類結點類 //鏈表在結構上,是由頭結點和結點組成的,頭結點存儲指向第一個結點的地址,這里頭結點其實就是個指針變量 //鏈表的大部分接口和線性表一致,但是實現方法不同,因此不能直接繼承//順帶一提,java中類 A b=a;b改變a也會改變,二者指向同一塊內存 public class LinkedListZH<E> {public static final int ELEMENT_NOT_FOUND = -1;private int size;//定義全局變量(不在函數里的)不初始化默認初始值為0,局部變量則初始值隨機private Node<E> headNode;//什么找到index為2的元素只需要兩次headnode=headnode.next???//為什么老師的headNode就是第一個結點(除了所謂頭結點)???//把headNode想象成單純一個指向第一個結點的指針就通了!!!,也就是說有第一個結點時headNode就是第一個節點,沒有第一個結點時,//headNode為null,但是具體原理在java里我依然沒整明白,難道說headNode這個名本身代表的就是一個地址,所以//所以插入第一個元素時,headNode直接 =new Node<>(element,headNode(這時為null))就代表headNode就指向了第一個結點,也意味著在java里headnode就是第一個結點的引用?//如果這時候用headNode.next = node(element,headNode.next)就會報錯"this.headNode" is null//是因為我們根本沒設置headNode,headnode為null嗎,導致空指針錯誤private static class Node<E> {E element;Node<E> next = null;//JAVA把指針淡化了,C中需要Node *p = next;next -> nextNode;,Java中只要next=nextNode就可以了public Node(E element, Node<E> next) {this.element = element;this.next = next;}}public void clear(){headNode = null;size = 0;}public void isEmptyPrint(){if (headNode == null){System.out.println("Empty");}else{System.out.println("Not Empty");}}//是否包含,一定記得看看有沒有多余句子寫到循環里了public void containsPrint(E element){Node<E> node = headNode;for(int i = 0;i < size ; i++){if (node.element == element){System.out.println("Contain");return;}node = node.next;}System.out.println("Not Contain");}//痛苦add,看前面,這里headNode。next和headNode的問題想了我快兩個點public void add(int index , E element){if ( index == 0){Node<E> node = new Node<>(element,headNode);headNode = node;}else {Node<E> node = indexSearchNode(index - 1);node.next = new Node<>(element,node.next);}size++;}public void remove(int index){if (index == 0){headNode = headNode.next;}else{Node<E> pre = indexSearchNode(index - 1);pre.next = pre.next.next;}size--;//別忘了動size啊啊啊啊!!!!}public void add(E element){add(size,element);}//根據索引返回對應結點,注意返回值是Node<E>而不是E,該函數經常在別的函數內使用private Node<E> indexSearchNode (int index){Node<E> node = headNode;for(int i = 0; i < index ; i ++){node = node.next;}return node;}public String toString() {StringBuilder string = new StringBuilder();string.append("size=").append(size).append(" [");Node<E> node = headNode;for (int i = 0; i < size; i++) {if (i != 0) {string.append(", ");}string.append(node.element);node = node.next;}string.append("]");return string.toString();}}

總結

以上是生活随笔為你收集整理的2021-9-下旬 数据结构-线性表-链表-java代码实现(复习用)的全部內容,希望文章能夠幫你解決所遇到的問題。

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