中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

網(wǎng)站建設(shè)公司的服務(wù)特點(diǎn)網(wǎng)站優(yōu)化方案模板

網(wǎng)站建設(shè)公司的服務(wù)特點(diǎn),網(wǎng)站優(yōu)化方案模板,注冊(cè)新公司需要多少錢(qián),泉州哪里有搭建網(wǎng)站的公司文章目錄一、什么是雙向鏈表二、雙向鏈表的簡(jiǎn)單實(shí)現(xiàn)一、什么是雙向鏈表 我們來(lái)看一下這個(gè)例子: 在一個(gè)教室里,所有的課桌排成一列,如圖 相信在你們的讀書(shū)生涯中,老師肯定有要求你們記住自己的前后桌是誰(shuí)。所以該例子中&#x…

文章目錄

  • 一、什么是雙向鏈表
  • 二、雙向鏈表的簡(jiǎn)單實(shí)現(xiàn)

在這里插入圖片描述

一、什么是雙向鏈表

我們來(lái)看一下這個(gè)例子:

在一個(gè)教室里,所有的課桌排成一列,如圖
在這里插入圖片描述

相信在你們的讀書(shū)生涯中,老師肯定有要求你們記住自己的前后桌是誰(shuí)。所以該例子中,老師就要求學(xué)生們記住自己的前后桌,其中坐在第一排的學(xué)生需要記住自己是第一排的學(xué)生以及自己的后桌是誰(shuí);最后一排的學(xué)生要記住自己的前桌是誰(shuí)以及自己是最后一排的學(xué)生。如圖:
在這里插入圖片描述

這一列座位就相當(dāng)于一個(gè) 雙向鏈表

假如有一天,老師還沒(méi)記住每個(gè)學(xué)生的名字,于是就問(wèn):這一列第三個(gè)人叫什么名字?這時(shí)就要從第一個(gè)學(xué)生開(kāi)始數(shù),例如從圖中坐在第一個(gè)的 小5 開(kāi)始數(shù):第一個(gè)人是 小5,他的后桌是 小7;因此第二個(gè)人就是 小7,他的后桌是 小1;因此第三個(gè)人就是 小1 了。此時(shí)老師問(wèn) 小1:你的前桌叫什么名字?你的后桌叫什么名字?

因?yàn)閯傞_(kāi)始老師就讓每個(gè)學(xué)生記住了自己的前桌以及后桌,所以此時(shí) 小1 能很快地告訴老師他的前桌是 小7,他的后桌是 小6。

但是,我們?cè)O(shè)想一下,如果是上一篇文章的 鏈表結(jié)構(gòu) 的例子中,如果老師在得知了第三個(gè)人是 小1 以后,詢問(wèn) 小1 的前桌叫什么名字,小1 能回答上來(lái)嗎?并不能,因?yàn)槔蠋熤蛔屆總€(gè)學(xué)生記住了自己的后桌,所以此時(shí)想要得知 小1 的前桌叫什么名字,只能這樣:第三個(gè)學(xué)生叫 小1,那么他的前桌就坐在第二個(gè)位置,所以從第一個(gè)學(xué)生開(kāi)始數(shù),第一個(gè)學(xué)生是 小5,他的后桌是 小7;因此第二個(gè)學(xué)生就是 小7。當(dāng)然本文舉得例子中學(xué)生數(shù)量有點(diǎn)少,但一旦數(shù)量多起來(lái)了,每次問(wèn)一個(gè)學(xué)生他的前桌叫什么名字的時(shí)候,都要從頭開(kāi)始數(shù)。

從中可以看出,讓每個(gè)學(xué)生記住自己的前桌后桌是非常有必要的,因?yàn)樵谀承┣闆r下,可以快速地解決問(wèn)題。

上面講了那么多,接下來(lái)我們就來(lái)看一下 雙向鏈表 是什么樣的,如圖

在這里插入圖片描述

可以看到,對(duì)比 鏈表結(jié)構(gòu),雙向鏈表 多了一個(gè)指針 tail,它是指向最后一個(gè)元素的,就相當(dāng)于例子中的學(xué)生記住了自己是最后一排。

雙向鏈表與單鏈表基本相似,但是最大的區(qū)別在于雙向鏈表在節(jié)點(diǎn)中除了指向下一節(jié)點(diǎn)的next指針外,還有指向前一節(jié)點(diǎn)的prev指針,這使得雙向鏈表在可以在任意節(jié)點(diǎn)從頭尾兩個(gè)方向進(jìn)行遍歷,是“雙向”的。

和單鏈表相比,雙向鏈表在刪除和查詢等方面明顯在操作上更具有靈活性,但是會(huì)消耗更多的內(nèi)存,需要根據(jù)使用條件進(jìn)行取舍。

java中的LinkedHashMap的本質(zhì)即是一個(gè)雙向鏈表。
在這里插入圖片描述

二、雙向鏈表的簡(jiǎn)單實(shí)現(xiàn)

修改原來(lái)的Node類,在里面添加一個(gè)新成員變量Node prev

/*** @Author:huang* @Date:2023-03-23 20:10* @Description:節(jié)點(diǎn)類*/
public class Node {//節(jié)點(diǎn)序號(hào)int num;//數(shù)據(jù)Object data;//下一個(gè)節(jié)點(diǎn)Node next;//上一節(jié)點(diǎn)Node prev;public Node(int num, Object data) {this.num = num;this.data = data;}@Overridepublic String toString() {return "Node{" +"num=" + num +", data=" + data +'}';}
}
  1. 添加
    添加與單向鏈表代碼邏輯一樣,但是新節(jié)點(diǎn)在添加時(shí)需要修改prev指針指向原來(lái)的尾節(jié)點(diǎn)。
    舉個(gè)例子,對(duì)于無(wú)排序插入,原本有節(jié)點(diǎn)A,現(xiàn)在要插入一個(gè)B:
  • 找到A,然后讓A.next指向B
  • 讓B.prev指向A

而對(duì)于排序插入,就是原有節(jié)點(diǎn)A,C,要在中間插入B:

  • 找到A,讓B.prev指向A
  • 讓B.next指向A.next,也就是讓B的next指向C
  • 讓A.next.prev指向B,也就是讓C的prev指向B
  • 讓A.next指向B
/*** 添加節(jié)點(diǎn)到鏈表* @param node 要插入的節(jié)點(diǎn)*/
public void add(Node node) {Node temp = head;//遍歷鏈表while (true) {if (temp.next == null) {break;}//不是尾節(jié)點(diǎn)就繼續(xù)遍歷下一個(gè)節(jié)點(diǎn)temp = temp.next;}//將尾節(jié)點(diǎn)指向即將插入的新節(jié)點(diǎn)temp.next = node;node.prev = temp;
}/*** 按順序添加節(jié)點(diǎn)到鏈表* @param node 要插入的節(jié)點(diǎn)*/
public void addByOrder(Node node) {Node temp = head;//遍歷鏈表while (true) {//如果鏈表到底了就直接插入if (temp.next == null) {temp.next = node;node.prev = temp;return;}else if (temp.next.num > node.num){//如果后一節(jié)點(diǎn)比當(dāng)新節(jié)點(diǎn)大,就插入當(dāng)前節(jié)點(diǎn)node.prev = temp;node.next = temp.next;temp.next.prev = node;temp.next = node;return;}else if (temp.next.num == node.num){//如果后一節(jié)點(diǎn)等于新節(jié)點(diǎn),拋異常throw new RuntimeException("插入節(jié)點(diǎn)與已有節(jié)點(diǎn)序號(hào)重復(fù)!");}//如果后一節(jié)點(diǎn)比當(dāng)前節(jié)點(diǎn)小,就繼續(xù)遍歷temp = temp.next;}
}
  1. 刪除
    由于相對(duì)單鏈表,雙向鏈表的節(jié)點(diǎn)可以自己找到上一節(jié)點(diǎn),所以刪除的時(shí)候可以直接找到要?jiǎng)h除的節(jié)點(diǎn)進(jìn)行操作。

舉個(gè)例子,假設(shè)有節(jié)點(diǎn)A,B,C,現(xiàn)在要?jiǎng)h除B:

  • 找到B,讓B.prev.next=B.next,也就是讓A的next指向C
  • 讓B.next.prev=B.prev,也就是讓C的prev指向A

如果要?jiǎng)h除的節(jié)點(diǎn)已經(jīng)是尾節(jié)點(diǎn)了,那就跟單鏈表一樣了。

/*** 刪除節(jié)點(diǎn)* @param num 要?jiǎng)h除的節(jié)點(diǎn)編號(hào)*/
public void delete(int num) {Node temp = head;//判斷鏈表是否為空if (temp.next == null) {throw new RuntimeException("鏈表為空!");}//遍歷鏈表while (true) {//如果鏈表到底了if (temp.next == null) {throw new RuntimeException("編號(hào)為" + num + "的節(jié)點(diǎn)不存在!");}//如果找到了待刪除節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn)if (temp.num == num) {//判斷待刪除節(jié)點(diǎn)是否為尾節(jié)點(diǎn)if (temp.next == null){temp.prev.next = null;}else {temp.prev.next = temp.next;temp.next.prev = temp.prev;}return;}//繼續(xù)遍歷下一節(jié)點(diǎn)temp = temp.next;}
}
  1. 修改,查詢(與單鏈表一致)
    由于修改和查詢與單鏈表基本一致,這里就不在贅述了,直接放代碼:
/*** 展示鏈表*/
public void show() {//判斷鏈表是否為空if (head.next == null) {throw new RuntimeException("鏈表為空!");}Node temp = head.next;//遍歷鏈表while (true) {if (temp == null) {break;}System.out.println(temp.toString());temp = temp.next;}
}/*** 根據(jù)序號(hào)獲取節(jié)點(diǎn)* @param num 要獲取的節(jié)點(diǎn)序號(hào)* @return*/
public Node get(int num){//判斷鏈表是否為空if (head.next == null) {throw new RuntimeException("鏈表為空!");}Node temp = head.next;//遍歷鏈表while (true) {if (temp == null) {throw new RuntimeException("編號(hào)為" + num + "的節(jié)點(diǎn)不存在!");}if (temp.num == num) {return temp;}temp = temp.next;}
}/*** 修改節(jié)點(diǎn)* @param node 要更新的節(jié)點(diǎn)*/
public void update(Node node) {Node temp = head;//判斷鏈表是否為空if (temp.next == null) {throw new RuntimeException("鏈表為空!");}//獲取要更新的節(jié)點(diǎn)序號(hào)int nodeNum = node.num;//遍歷鏈表while (true) {//如果已經(jīng)遍歷完鏈表if (temp == null) {throw new RuntimeException("編號(hào)為" + temp.num + "的節(jié)點(diǎn)不存在!");}//如果找到了該節(jié)點(diǎn)if (temp.num == nodeNum) {temp.data = node.data;return;}//繼續(xù)遍歷下一節(jié)點(diǎn)temp = temp.next;}
}
http://www.risenshineclean.com/news/32321.html

相關(guān)文章:

  • 做電影網(wǎng)站考什么電商平臺(tái)推廣費(fèi)用大概要多少
  • 網(wǎng)站優(yōu)化要從哪些方面做上海seo網(wǎng)站推廣
  • 吉林市做網(wǎng)站的科技公司網(wǎng)絡(luò)推廣常見(jiàn)的方法
  • 純html5網(wǎng)站源碼長(zhǎng)沙網(wǎng)站優(yōu)化價(jià)格
  • 網(wǎng)站加速cdn自己做互聯(lián)網(wǎng)推廣是什么
  • 怎樣用wordpress建站網(wǎng)絡(luò)銷(xiāo)售是什么工作內(nèi)容
  • 社交平臺(tái)推廣方式seo外包方法
  • 網(wǎng)站建設(shè) 時(shí)間安排推廣軟件賺錢(qián)的app
  • 網(wǎng)站建設(shè)正版軟件廣東網(wǎng)站營(yíng)銷(xiāo)seo方案
  • 做網(wǎng)站 價(jià)格seo怎么優(yōu)化方案
  • 保定專業(yè)做網(wǎng)站的公司最近的國(guó)際新聞
  • 足球網(wǎng)站建設(shè)企業(yè)網(wǎng)站怎么推廣
  • 建設(shè)網(wǎng)站時(shí)以什么為導(dǎo)向拼多多代運(yùn)營(yíng)公司十大排名
  • 軟件開(kāi)發(fā)外包服務(wù)公司上海搜索排名優(yōu)化
  • 怎么授權(quán)小說(shuō)做游戲網(wǎng)站如何進(jìn)行網(wǎng)絡(luò)營(yíng)銷(xiāo)推廣
  • 長(zhǎng)沙建立網(wǎng)站seo技術(shù)有哪些
  • 深圳網(wǎng)站建設(shè)迅美市場(chǎng)調(diào)研公司
  • 怎么模板建站杭州百度seo代理
  • 寧波網(wǎng)站建設(shè)公司排名銷(xiāo)售網(wǎng)絡(luò)平臺(tái)
  • 站長(zhǎng)工具網(wǎng)站測(cè)速東莞疫情最新消息通知
  • 青島網(wǎng)絡(luò)推廣建站營(yíng)銷(xiāo)平臺(tái)有哪些
  • 個(gè)人名義做網(wǎng)站百度熱門(mén)關(guān)鍵詞排名
  • asp.net實(shí)用網(wǎng)站開(kāi)發(fā)doc十大免費(fèi)貨源網(wǎng)站免費(fèi)版本
  • 梁山做網(wǎng)站的公司西安seo培訓(xùn)機(jī)構(gòu)
  • php學(xué)建網(wǎng)站搜索引擎優(yōu)化的簡(jiǎn)寫(xiě)是
  • 海南專業(yè)做網(wǎng)站的公司優(yōu)化網(wǎng)站推廣
  • 凡科網(wǎng)電腦版怎么做網(wǎng)站seo搜索優(yōu)化推廣
  • 網(wǎng)站編程技術(shù) 吉林出版集團(tuán)股份有限公司新東方烹飪學(xué)校學(xué)費(fèi)價(jià)目表
  • 用php做圖書(shū)管理網(wǎng)站重慶百度關(guān)鍵詞推廣
  • 肯達(dá)建設(shè)網(wǎng)站百度關(guān)鍵詞工具