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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

线性表的Java实现--链式存储(双向链表)

發(fā)布時(shí)間:2025/3/17 java 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 线性表的Java实现--链式存储(双向链表) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

有了單向鏈表的基礎(chǔ),雙向鏈表的實(shí)現(xiàn)就容易多了。

?

雙向鏈表的一般情況:

?增加節(jié)點(diǎn):



?

刪除節(jié)點(diǎn):



?

雙向鏈表的Java實(shí)現(xiàn):

package?com.liuhao.algorithm;??public?class?DuLinkList<T>?{??/**?*?內(nèi)部類:鏈表中的一個(gè)節(jié)點(diǎn)?*??*?@author?liuhao?data?節(jié)點(diǎn)中的數(shù)據(jù)?prev?指向前一個(gè)節(jié)點(diǎn)的引用?next?指向下一個(gè)節(jié)點(diǎn)的引用?*/??private?class?Node?{??private?T?data;//?保存的數(shù)據(jù)元素??private?Node?prev;//?指向上一個(gè)節(jié)點(diǎn)??private?Node?next;//?指向下一個(gè)節(jié)點(diǎn)??public?Node()?{??}??public?Node(T?data,?Node?prev,?Node?next)?{??super();??this.data?=?data;??this.prev?=?prev;??this.next?=?next;??}??}??private?Node?header;//?頭結(jié)點(diǎn)??private?Node?tail;//?尾節(jié)點(diǎn)??private?int?size;//?鏈表中元素個(gè)數(shù)??//?創(chuàng)建空鏈表??public?DuLinkList()?{??header?=?null;??tail?=?null;??}??//?已指定數(shù)據(jù)元素創(chuàng)建鏈表,只有一個(gè)元素??public?DuLinkList(T?element)?{??header?=?new?Node(element,?null,?null);??//?只有一個(gè)節(jié)點(diǎn),header,tail都指向該節(jié)點(diǎn)??tail?=?header;??size++;??}??//?返回鏈表長(zhǎng)度??public?int?length()?{??return?size;??}??//?獲取指定位置的數(shù)據(jù)元素??public?T?get(int?index)?{??return?this.getNodeByIndex(index).data;??}??//?獲取指定位置的節(jié)點(diǎn)??private?Node?getNodeByIndex(int?index)?{??if?(index?<?0?||?index?>?size?-?1)?{??throw?new?IndexOutOfBoundsException("索引超出線性表范圍");??}??if?(index?<?size?/?2)?{??Node?current?=?header;??for?(int?i?=?0;?i?<?size?/?2?&&?current?!=?null;?i++,?current?=?current.next)?{??if?(i?==?index)?{??return?current;??}??}??}?else?{??Node?current?=?tail;??for?(int?i?=?size?-?1;?i?>=?size?/?2?&&?current?!=?null;?i--,?current?=?current.prev)?{??if?(i?==?index)?{??return?current;??}??}??}??return?null;??}??//?按值查詢所在的位置??public?int?locate(T?element)?{??Node?current?=?header;??for?(int?i?=?0;?i?<?size?-?1?&&?current?!=?null;?i++,?current?=?current.next)?{??if?(element.equals(current.data))?{??return?i;??}??}??return?-1;??}??//?向指定位置插入元素??public?void?insert(T?element,?int?index)?{??if?(index?<?0?||?index?>?size)?{??throw?new?IndexOutOfBoundsException("索引超出線性表范圍");??}??if?(header?==?null)?{??this.add(element);??}?else?{??if?(0?==?index)?{??this.addAtHead(element);??}?else?{??Node?prev?=?this.getNodeByIndex(index?-?1);//?獲取插入節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn)??Node?next?=?prev.next;//?待插索引處的節(jié)點(diǎn)??Node?newNode?=?new?Node(element,?prev,?next);//?新增節(jié)點(diǎn),讓它的prev指向之前的節(jié)點(diǎn)。next指向之后的節(jié)點(diǎn)??prev.next?=?newNode;//?之前的節(jié)點(diǎn)的next指向當(dāng)前節(jié)點(diǎn)??next.prev?=?newNode;//?之后節(jié)點(diǎn)的prev指向當(dāng)前節(jié)點(diǎn)??size++;??}??}??}??//?采用尾插法添加新節(jié)點(diǎn)??public?void?add(T?element)?{??//?若還是空表,則將header和tail都指向該元素即可??if?(header?==?null)?{??header?=?new?Node(element,?null,?null);??tail?=?header;??}?else?{??//?創(chuàng)建信節(jié)點(diǎn),prev指向tail??Node?newNode?=?new?Node(element,?tail,?null);??//?令tail的next指向新節(jié)點(diǎn)??tail.next?=?newNode;??tail?=?newNode;//?把新節(jié)點(diǎn)設(shè)為尾節(jié)點(diǎn)??}??size++;??}??//?采用頭插發(fā)添加新節(jié)點(diǎn)??public?void?addAtHead(T?element)?{??Node?newNode?=?new?Node(element,?null,?header);??header.prev?=?newNode;??header?=?newNode;??//?如果插入之前是空表??if?(tail?==?null)?{??tail?=?header;??}??size++;??}??//?刪除指定索引處的元素??public?T?delete(int?index)?{??if?(index?<?0?||?index?>?size?-?1)?{??throw?new?IndexOutOfBoundsException("索引超出線性表范圍");??}??Node?del?=?null;??if?(index?==?0)?{??del?=?header;??header?=?header.next;??header.prev?=?null;??}?else?{??Node?prev?=?this.getNodeByIndex(index?-?1);//?獲取索引處之前的節(jié)點(diǎn)??del?=?prev.next;//?獲取索引處的節(jié)點(diǎn)??//?讓之前的節(jié)點(diǎn)的next指向下一個(gè)節(jié)點(diǎn)??prev.next?=?del.next;??//?有可能刪除的是最后一個(gè)元素,若直接調(diào)用next.prev可能會(huì)出錯(cuò)??if?(del.next?!=?null)?{??del.next.prev?=?prev;??}??//若刪除的是最后一個(gè)元素,那么就要重置tail;??tail?=?prev;??del.prev?=?null;??del.next?=?null;??}??size--;??return?del.data;??}??//?刪除最后一個(gè)元素??public?T?remove()?{??return?this.delete(size?-?1);??}??//?判斷是否為空??public?boolean?isEmpty()?{??return?size?==?0;??}??//?清空線性表??public?void?clear()?{??header?=?null;??tail?=?null;??size?=?0;??}??public?String?toString()?{??if?(size?==?0)?{??return?"[]";??}?else?{??StringBuilder?sb?=?new?StringBuilder("[");??for?(Node?current?=?header;?current?!=?null;?current?=?current.next)?{??sb.append(current.data.toString()?+?",?");??}??sb.append("]");??int?len?=?sb.length();??//?刪除多余的“,”和空格??return?sb.delete(len?-?3,?len?-?2).toString();??}??}?? }??

測(cè)試代碼:

package com.liuhao.test;import org.junit.Test;import com.liuhao.algorithm.DuLinkList;public class DuLinkListTest {@Testpublic void test() {//測(cè)試構(gòu)造函數(shù)DuLinkList<String> duList = new DuLinkList("好");System.out.println(duList);//測(cè)試添加元素duList.add("ni");duList.add("沒");System.out.println(duList);//在頭部添加duList.addAtHead("五月");System.out.println(duList);//在指定位置添加duList.insert("摩卡", 2);System.out.println(duList);//獲取指定位置處的元素System.out.println("第2個(gè)元素是(從0開始計(jì)數(shù)):" + duList.get(2));//返回元素索引System.out.println("摩卡在的位置是:" + duList.locate("摩卡"));System.out.println("moka所在的位置:" + duList.locate("moka"));//獲取長(zhǎng)度System.out.println("當(dāng)前線性表的長(zhǎng)度:" + duList.length());//判斷是否為空System.out.println(duList.isEmpty());//刪除最后一個(gè)元素duList.remove();System.out.println("調(diào)用remove()后:" + duList);//獲取長(zhǎng)度System.out.println("當(dāng)前線性表的長(zhǎng)度:" + duList.length());//刪除指定位置處元素duList.delete(3);System.out.println("刪除第4個(gè)元素后:" + duList);//獲取長(zhǎng)度System.out.println("當(dāng)前線性表的長(zhǎng)度:" + duList.length());//清空duList.clear();System.out.println(duList);//判斷是否為空System.out.println(duList.isEmpty());}}

  

轉(zhuǎn)載于:https://www.cnblogs.com/ganchuanpu/p/7468565.html

總結(jié)

以上是生活随笔為你收集整理的线性表的Java实现--链式存储(双向链表)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 暖暖日本在线视频 | 日韩精品一区二区三区网站 | 国产视频久久久久久久 | 国产又大又硬又粗 | 国产午夜精品久久久久 | 欧美一区二区三区大屁股撅起来 | 中文精品久久 | 欧美日韩国语 | 99精品欧美一区二区蜜桃免费 | 日韩av综合 | 久久久久九九九九 | 欧美日韩一区二区三区 | www精品一区二区三区 | 日韩国产91 | 亚洲春色www| 97在线精品视频 | 放荡闺蜜高h季红豆h | 韩国三级中文字幕 | a一级视频 | 中文字幕日韩一区 | 91最新在线 | 无人码人妻一区二区三区免费 | 亚洲福利二区 | 日本精品视频在线观看 | 91视频首页| 黄wwwww| caoporn人人| 日本少妇吞精囗交视频 | 中文字幕影片免费在线观看 | 女同亚洲精品一区二区三 | 日韩七区 | 99re6这里有精品热视频 | 黄色a级片视频 | www.欧美激情 | 免费亚洲一区 | 97视频久久| 日韩综合第一页 | 国产100页 | 波多野结衣片子 | 蜜桃成人av| 日产久久视频 | 五月婷婷一区二区三区 | 超碰97人| 香蕉一区二区三区四区 | 欧美拍拍| a级片免费看 | 国产精品扒开腿做爽爽爽男男 | 欣赏asian国模裸体pics | 性生交大片免费看狂欲 | 亚洲欧美另类在线 | 国产a毛片| 成年人免费网站在线观看 | 思思99热| 国产在线国偷精品免费看 | 亚洲精品三| 日韩大片在线免费观看 | 福利视频网址 | 中文字幕日韩一区二区 | 欧美一区二区三区久久精品 | 精品欧美一区二区三区免费观看 | 久草热视频 | 日韩人妻无码精品综合区 | 亚洲高清毛片 | 日本少妇xx| 久久αv | 99久久99久久精品国产片果冰 | 香蕉视频久久久 | 神马午夜在线观看 | 性xxxx狂欢老少配o | 精品久久一区二区三区 | √天堂资源在线 | 久久香蕉影院 | 免费观看av毛片 | 国产精品成人无码免费 | 欧美sm凌虐视频网站 | 深夜网站在线 | 69视频污 | 99热18| 日本电影大尺度免费观看 | 中文字幕在线资源 | 91av视频在线免费观看 | 天天视频国产 | 蜜桃成人av | 免费看黄色的网址 | 欧美性受xxxxxx黑人xyx性爽 | 成年人av电影 | 看黄色大片 | 欧美 日韩 国产 成人 在线 91 | 97超碰国产精品无码蜜芽 | 91自啪 | 日本三级吃奶头添泬无码苍井空 | 亚洲电影一区二区三区 | 天堂av亚洲av国产av电影 | 浴室里强摁做开腿呻吟男男 | 涩涩亚洲| 激情五月深爱五月 | 午夜影院欧美 | av不卡一区二区 | 一级黄色免费网站 |