成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

鏈表還有頭插和尾插?

開發(fā) 前端
鏈表中數(shù)據(jù)元素的邏輯順序是通過鏈表中的指針鏈接次序?qū)崿F(xiàn)的。鏈表由一系列結(jié)點(diǎn)(鏈表中每一個(gè)元 素稱為結(jié)點(diǎn))組成,結(jié)點(diǎn)可以在運(yùn)行時(shí)動(dòng)態(tài)生成。每個(gè)結(jié)點(diǎn)包括兩個(gè)部分:一個(gè)是存儲(chǔ)數(shù)據(jù)元素的數(shù)據(jù) 域,另一個(gè)是存儲(chǔ)下一個(gè)結(jié)點(diǎn)地址的指針域。

作為一個(gè)技術(shù)博主,了不起不是在創(chuàng)作就是在創(chuàng)作的路上(當(dāng)然偶爾也會(huì)有點(diǎn)恰飯文~還指望大家多多支持),昨天的時(shí)候,了不起給大家分享了一下這個(gè)關(guān)于數(shù)據(jù)結(jié)構(gòu)里面的數(shù)組是什么內(nèi)容,而且也給大家說了數(shù)據(jù)結(jié)構(gòu)都有什么,我們來回顧一下內(nèi)容。

數(shù)據(jù)結(jié)構(gòu)分類

我們在開發(fā)中,也都經(jīng)常的用到數(shù)據(jù)結(jié)構(gòu),只是不是很在意這個(gè)名詞,而是直接使用他們的另外的說法,比如:

  • 數(shù)組
  • 鏈表

上面的這四個(gè)數(shù)結(jié)構(gòu),可以統(tǒng)稱為線性表。而除了線性表,我們還有其他的數(shù)據(jù)結(jié)構(gòu),比如散列表,樹,還有圖。

散列表有:

  • hash
  • 位圖

樹有:

  • 二叉樹
  • 多路樹

圖包含:

  • 有向圖
  • 無向圖
  • 帶權(quán)圖

今天我們就來分析一下這個(gè)數(shù)據(jù)結(jié)構(gòu)中的另外一個(gè),鏈表

什么是鏈表

按照慣例,我們先從百度百科上面看看他是怎么解釋的:

鏈表(linked list)是一種在物理上非連續(xù)、非順序的數(shù)據(jù)結(jié)構(gòu),由若干節(jié)點(diǎn)(node)所組成。

鏈表中數(shù)據(jù)元素的邏輯順序是通過鏈表中的指針鏈接次序?qū)崿F(xiàn)的。鏈表由一系列結(jié)點(diǎn)(鏈表中每一個(gè)元 素稱為結(jié)點(diǎn))組成,結(jié)點(diǎn)可以在運(yùn)行時(shí)動(dòng)態(tài)生成。每個(gè)結(jié)點(diǎn)包括兩個(gè)部分:一個(gè)是存儲(chǔ)數(shù)據(jù)元素的數(shù)據(jù) 域,另一個(gè)是存儲(chǔ)下一個(gè)結(jié)點(diǎn)地址的指針域。

其實(shí)換成大白話解釋,那就是一個(gè)一個(gè)的結(jié)點(diǎn)組合成的一個(gè)鏈?zhǔn)浇Y(jié)構(gòu),上一個(gè)元素存儲(chǔ)下一個(gè)元素的指針域。

我們常見的鏈表結(jié)構(gòu),比較少,就那么幾種

單鏈表

單向鏈表的每一個(gè)節(jié)點(diǎn)又包含兩部分,一部分是存放數(shù)據(jù)的變量data,另一部分是指向下一個(gè)節(jié) 點(diǎn)的指針next

實(shí)際上模擬代碼:

Node{
int data;
Node next;
}

那么他的圖解是什么樣子呢?

圖片

圖解畫的比較爛,大家多見諒。

雙向鏈表

雙向鏈表是什么呢?

雙向鏈表的每一個(gè)節(jié)點(diǎn)除了擁有data和next指針,還擁有指向前置節(jié)點(diǎn)的prev指針。

圖片

循環(huán)鏈表

那么什么是循環(huán)鏈表呢?

循環(huán)鏈表實(shí)際上就是鏈表的尾節(jié)點(diǎn)指向頭節(jié)點(diǎn)形成一個(gè)環(huán),稱為循環(huán)鏈表。

那么圖解是什么樣的呢?

圖片

我們在昨天看數(shù)組的時(shí)候,知道了數(shù)組數(shù)組在內(nèi)存中的存儲(chǔ)方式是順序存儲(chǔ)(連續(xù)存儲(chǔ))。

那么鏈表呢?

其實(shí)鏈表在內(nèi)存中的存儲(chǔ)方式則是隨機(jī)存儲(chǔ)(鏈?zhǔn)酱?儲(chǔ))

鏈表的每一個(gè)節(jié)點(diǎn)分布在內(nèi)存的不同位置,依靠next指針關(guān)聯(lián)起來。這樣可以靈活有效地利用零散的碎 片空間。

我們再來一個(gè)簡單的內(nèi)存結(jié)構(gòu)圖來看一下這個(gè)鏈表在內(nèi)存中的存儲(chǔ)模型。

圖片

那么查找操作是什么操作呢?

查找節(jié)點(diǎn):

在查找元素時(shí),鏈表只能從頭節(jié)點(diǎn)開始向后一個(gè)一個(gè)節(jié)點(diǎn)逐一查找。

更新節(jié)點(diǎn):

找到要更新的節(jié)點(diǎn),然后把舊數(shù)據(jù)替換成新數(shù)據(jù)

其實(shí)鏈表這個(gè)地方,很多時(shí)候后在面試的時(shí)候,經(jīng)常會(huì)被問到一個(gè)內(nèi)容,那就是插入還有刪除,這是面試的時(shí)候經(jīng)常會(huì)被問到的一個(gè)內(nèi)容,那么這個(gè)插入是什么樣子的呢?

鏈表的插入

鏈表的插入也即鏈表的構(gòu)建,把點(diǎn)連成鏈。因插入位置不同分成三種情況。

  • 1.頭插法

在鏈表最前端插入數(shù)據(jù)

  • 2.尾插法

在鏈表最后插入數(shù)據(jù)

  • 3.按位置插入

當(dāng)在鏈表中間插入值的時(shí)候,新節(jié)點(diǎn):new

原插入位置節(jié)點(diǎn):temp

temp前一個(gè)節(jié)點(diǎn):pre

插入操作需要做的:

new.next = temp
pre.next = new

而這個(gè)插入,又離不開 head,

我們來模擬一下這個(gè)使用 Java 代碼來簡單的實(shí)現(xiàn)一下這個(gè)頭插法,尾插法,已經(jīng)按照位置插入。

我們先定義一個(gè)頭部

ListNode head = null;

我們再建立鏈表對(duì)象的類:LinkNode

public class ListNode {
private int val;
private ListNode next;
public ListNode(int value) {
this.val = value;
}
public ListNode() {}
public ListNode getNext() {
return this.next;
}
public int getVal() {
return this.val;
}
public void setNext(ListNode next) {
this.next = next;
}
public void setVal(int value) {
this.val = value;
}
}

頭插法

public void HeadInsert(int val) {
ListNode newNode = new ListNode(val); 首先把val建立成一個(gè)新節(jié)點(diǎn)
if(head == null) { 鏈表為空的情況
head = newNode;
return;
}
newNode.setNext(head); 鏈表不為空,則把原第一個(gè)節(jié)點(diǎn)給到新節(jié)點(diǎn)的next
head = newNode; 新節(jié)點(diǎn)成為頭節(jié)點(diǎn)
}

尾插法

public void EndInsert(int val) {
新建節(jié)點(diǎn)存儲(chǔ)數(shù)據(jù)
ListNode newNode = new ListNode(val);
判斷頭節(jié)點(diǎn)是否為空,就是鏈表是否為空
if(head == null) {
head = newNode;
return;
}
ListNode indexNode = head; 由于頭節(jié)點(diǎn)head不能改變,召喚替身
while (indexNode.getNext() != null) { 從頭向后遍歷,直到某一節(jié)點(diǎn)的next
indexNode = indexNode.getNext(); 是空的,意味他是最后一個(gè)節(jié)點(diǎn)。
}
indexNode.setNext(newNode); 讓原來最后一個(gè)節(jié)點(diǎn)的next指向新節(jié)點(diǎn)
}

按位置插入

public void Insert(int val,int index) {數(shù)值,插入位置
if(index<0 || index > this.getLength()) {
System.out.println("index位置不合法");
return;
}
if(index == 0) {
HeadInsert(val);
}else if(index == getLength()) {
EndInsert(val);
}else {
ListNode newNode = new ListNode(val);
ListNode tempNode = head;
ListNode preNode = null; pre在temp前1位
int position = 0; 通過它找到正確插入位置
while (tempNode != null) {
if(position == index) {
newNode.setNext(tempNode); pre在temp前1位
temp指向的是要被插入的位置的值
preNode.setNext(newNode);
return;
}
preNode = tempNode;
tempNode = tempNode.getNext();
position++;
}
}
}

其實(shí)相對(duì)而言,鏈表的刪除就真的比這個(gè)插入簡單了。

鏈表刪除

public void Delete(int index) {
if (index < 0 || index>getLength()) {
System.out.println("位置不合法");
return;
}
if(index == 0) { 刪除第一個(gè)節(jié)點(diǎn)時(shí)
head = head.getNext();
return;
}
ListNode tempNode = head;
ListNode preNode = null;
int position = 0;
while(tempNode != null) {
if(position == index) {
//pre和temp差1位,temp指向的是要被刪除的值
preNode.setNext(tempNode.getNext());
//temp的下一個(gè)值由pre和temp都指向,刪除temp的
tempNode.setNext(null );
return;
}
preNode = tempNode;
tempNode = tempNode.getNext();
position++;
}
}

對(duì)于這個(gè)鏈表,你學(xué)會(huì)了么?

責(zé)任編輯:武曉燕 來源: Java極客技術(shù)
相關(guān)推薦

2021-02-23 00:22:01

筆記本電腦硬件數(shù)據(jù)

2023-01-31 08:24:55

HashMap死循環(huán)

2015-11-03 16:49:43

小米

2021-07-14 09:18:19

Python插值算法

2022-07-11 10:45:37

插樁性能優(yōu)化打包

2023-08-07 15:49:59

CSS顏色插值算法

2021-12-30 23:57:29

插值方式Github

2021-12-02 18:05:21

Android Interpolato動(dòng)畫

2023-08-22 20:43:09

HashMap單線程null

2022-08-16 08:37:09

視頻插幀深度學(xué)習(xí)

2011-04-07 13:02:56

2010-06-18 14:41:48

Linux ACPI服

2023-07-25 08:10:36

內(nèi)存CPU插槽

2010-03-04 11:13:53

Android系統(tǒng)手機(jī)

2018-07-20 09:16:04

鏈?zhǔn)?/a>存儲(chǔ)結(jié)構(gòu)

2021-11-25 00:04:16

C# 插值字符串

2009-03-16 10:22:33

NehalemMac Pro開盒

2020-05-11 23:18:09

內(nèi)存條CPU插槽

2016-05-18 14:50:57

運(yùn)維PortfastAPI

2021-02-05 07:58:03

字節(jié)碼插樁交付
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产精品国产三级国产aⅴ原创 | 亚洲天堂一区 | 中文在线一区二区 | 久久国内精品 | 久久久国产亚洲精品 | 亚洲成人自拍 | 久草日韩 | 午夜视频大全 | 毛片免费观看 | 亚洲综合资源 | 日韩久久综合网 | 国产美女特级嫩嫩嫩bbb片 | 中文字幕亚洲在线 | 亚洲成人免费 | 欧美综合在线观看 | 亚洲国产精品一区二区第一页 | 国产区在线看 | 国产精品亚洲成在人线 | 国产91在线播放 | 亚洲国产精品一区 | 欧美激情精品久久久久久变态 | 成人在线精品视频 | 黄色片免费在线观看 | 日本午夜一区二区三区 | 琪琪午夜伦伦电影福利片 | 能看的av | 一区久久 | 久久久精品一区二区三区 | 亚洲成人一级片 | 久久久国产一区 | 欧美一级α片 | 成人免费在线视频 | 中文字幕电影在线观看 | 国产午夜精品视频 | 色免费在线视频 | 国产精品999 | 免费在线观看成人 | 成人免费在线电影 | 国产一级在线视频 | 久久激情视频 | 精品国产一区久久 |