国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 編程 > Java > 正文

Java語言中鏈表和雙向鏈表

2020-03-24 19:28:16
字體:
供稿:網(wǎng)友
鏈表是一種重要的數(shù)據(jù)結(jié)構(gòu),在程序設(shè)計(jì)中占有很重要的地位。C語言和C++語言中是用指針來實(shí)現(xiàn)鏈表結(jié)構(gòu)的,由于Java語言不提供指針,所以有人認(rèn)為在Java語言中不能實(shí)現(xiàn)鏈表,其實(shí)不然,Java語言比C和C++更容易實(shí)現(xiàn)鏈表結(jié)構(gòu)。Java語言中的對象引用實(shí)際上是一個(gè)指針(本文中的指針均為概念上的意義,而非語言提供的數(shù)據(jù)類型),所以我們可以編寫這樣的類來實(shí)現(xiàn)鏈表中的結(jié)點(diǎn)。

html' target='_blank'>class Node
{
Object data;
Node next;//指向下一個(gè)結(jié)點(diǎn)
}

將數(shù)據(jù)域定義成Object類是因?yàn)镺bject類是廣義超類,任何類對象都可以給其賦值,增加了代碼的通用性。為了使鏈表可以被訪問還需要定義一個(gè)表頭,表頭必須包含指向第一個(gè)結(jié)點(diǎn)的指針和指向當(dāng)前結(jié)點(diǎn)的指針。為了便于在鏈表尾部增加結(jié)點(diǎn),還可以增加一指向鏈表尾部的指針,另外還可以用一個(gè)域來表示鏈表的大小,當(dāng)調(diào)用者想得到鏈表的大小時(shí),不必遍歷整個(gè)鏈表。下圖是這種鏈表的示意圖: 鏈表的數(shù)據(jù)結(jié)構(gòu)

我們可以用類List來實(shí)現(xiàn)鏈表結(jié)構(gòu),用變量Head、Tail、Length、Pointer來實(shí)現(xiàn)表頭。存儲(chǔ)當(dāng)前結(jié)點(diǎn)的指針時(shí)有一定的技巧,Pointer并非存儲(chǔ)指向當(dāng)前結(jié)點(diǎn)的指針,而是存儲(chǔ)指向它的前趨結(jié)點(diǎn)的指針,當(dāng)其值為null時(shí)表示當(dāng)前結(jié)點(diǎn)是第一個(gè)結(jié)點(diǎn)。那么為什么要這樣做呢?這是因?yàn)楫?dāng)刪除當(dāng)前結(jié)點(diǎn)后仍需保證剩下的結(jié)點(diǎn)構(gòu)成鏈表,如果Pointer指向當(dāng)前結(jié)點(diǎn),則會(huì)給操作帶來很大困難。那么如何得到當(dāng)前結(jié)點(diǎn)呢,我們定義了一個(gè)方法cursor(),返回值是指向當(dāng)前結(jié)點(diǎn)的指針。類List還定義了一些方法來實(shí)現(xiàn)對鏈表的基本操作,通過運(yùn)用這些基本操作我們可以對鏈表進(jìn)行各種操作。例如reset()方法使第一個(gè)結(jié)點(diǎn)成為當(dāng)前結(jié)點(diǎn)。insert(Object d)方法在當(dāng)前結(jié)點(diǎn)前插入一個(gè)結(jié)點(diǎn),并使其成為當(dāng)前結(jié)點(diǎn)。remove()方法刪除當(dāng)前結(jié)點(diǎn)同時(shí)返回其內(nèi)容,并使其后繼結(jié)點(diǎn)成為當(dāng)前結(jié)點(diǎn),如果刪除的是最后一個(gè)結(jié)點(diǎn),則第一個(gè)結(jié)點(diǎn)變?yōu)楫?dāng)前結(jié)點(diǎn)。

鏈表類List的源代碼如下:

import java.io.*;
public class List
{
/*用變量來實(shí)現(xiàn)表頭*/
private Node Head=null;
private Node Tail=null;
private Node Pointer=null;
private int Length=0;
public void deleteAll()
/*清空整個(gè)鏈表*/
{
Head=null;
Tail=null;
Pointer=null;
Length=0;
}
public void reset()
/*鏈表復(fù)位,使第一個(gè)結(jié)點(diǎn)成為當(dāng)前結(jié)點(diǎn)*/
{
Pointer=null;
}
public boolean isEmpty()
/*判斷鏈表是否為空*/
{
return(Length==0);
}
public boolean isEnd()
/*判斷當(dāng)前結(jié)點(diǎn)是否為最后一個(gè)結(jié)點(diǎn)*/
{
if(Length==0)
throw new java.lang.NullPointerException();
else if(Length==1)
return true;
else
return(cursor()==Tail);
}
public Object nextNode()
/*返回當(dāng)前結(jié)點(diǎn)的下一個(gè)結(jié)點(diǎn)的值,并使其成為當(dāng)前結(jié)點(diǎn)*/
{
if(Length==1)
throw new java.util.NoSuchElementException();
else if(Length==0)
throw new java.lang.NullPointerException();
else
{
Node temp=cursor();
Pointer=temp;
if(temp!=Tail)
return(temp.next.data);
else
throw new java.util.NoSuchElementException();
}
}
public Object currentNode()
/*返回當(dāng)前結(jié)點(diǎn)的值*/
{
Node temp=cursor();
return temp.data;
}

public void insert(Object d)
/*在當(dāng)前結(jié)點(diǎn)前插入一個(gè)結(jié)點(diǎn),并使其成為當(dāng)前結(jié)點(diǎn)*/
{
Node e=new Node(d);
if(Length==0)
{
Tail=e;
Head=e;
}
else
{
Node temp=cursor();
e.next=temp;
if(Pointer==null)
Head=e;
else
Pointer.next=e;
}
Length++;
}
public int size()
/*返回鏈表的大小*/
{
return (Length);
}
public Object remove()
/*將當(dāng)前結(jié)點(diǎn)移出鏈表,下一個(gè)結(jié)點(diǎn)成為當(dāng)前結(jié)點(diǎn),如果移出的結(jié)點(diǎn)是最后一個(gè)結(jié)點(diǎn),則第一個(gè)結(jié)點(diǎn)成為當(dāng)前結(jié)點(diǎn)*/
{
Object temp;
if(Length==0)
throw new java.util.NoSuchElementException();
else if(Length==1)
{
temp=Head.data;
deleteAll();
}
else
{
Node cur=cursor();
temp=cur.data;
if(cur==Head)
Head=cur.next;
else if(cur==Tail)
{
Pointer.next=null;
Tail=Pointer;
reset();
}
else
Pointer.next=cur.next;
Length--;
}
return temp;
}
private Node cursor()
/*返回當(dāng)前結(jié)點(diǎn)的指針*/
{
if(Head==null)
throw new java.lang.NullPointerException();
else if(Pointer==null)
return Head;
else
return Pointer.next;
}
public static void main(String[] args)
/*鏈表的簡單應(yīng)用舉例*/
{
List a=new List ();
for(int i=1;i i++)
a.insert(new Integer(i));
System.out.println(a.currentNode());
while(!a.isEnd())
System.out.println(a.nextNode());
a.reset();
while(!a.isEnd())
{
a.remove();
}
a.remove();
a.reset();
if(a.isEmpty())
System.out.println("There is no Node in List /n");
System.in.println("You can press return to quit/n");
try
{
System.in.read();
//確保用戶看清程序運(yùn)行結(jié)果
}
catch(IOException e)
{}
}
}
class Node
/*構(gòu)成鏈表的結(jié)點(diǎn)定義*/
{
Object data;
Node next;
Node(Object d)
{
data=d;
next=null;
}
}

讀者還可以根據(jù)實(shí)際需要定義新的方法來對鏈表進(jìn)行操作。雙向鏈表可以用類似的方法實(shí)現(xiàn)只是結(jié)點(diǎn)的類增加了一個(gè)指向前趨結(jié)點(diǎn)的指針。

可以用這樣的代碼來實(shí)現(xiàn):

class Node
{
Object data;
Node next;
Node previous;
Node(Object d)
{
data=d;
next=null;
previous=null;
}
}

當(dāng)然,雙向鏈表基本操作的實(shí)現(xiàn)略有不同。鏈表和雙向鏈表的實(shí)現(xiàn)方法,也可以用在堆棧和隊(duì)列的實(shí)現(xiàn)中,這里就不再多寫了,有興趣的讀者可以將List類的代碼稍加改動(dòng)即可。html教程

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時(shí)間聯(lián)系我們修改或刪除,多謝。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
激情丁香婷婷| 国产免费视频在线| 五月婷婷视频在线观看| 国产三级在线观看| 思思99精品视频在线观看| 在线视频福利| 超碰在线国产| 精品视频麻豆入口| 国产激情视频一区二区三区| 国产在线视频福利| 免费不卡中文字幕视频| 久热国产在线| 黄色片免费在线| 国产色婷婷在线| 青青久在线视频免费观看| 在线国产网址| 99在线免费观看| 在线伊人免费视频| 美女av在线播放| 国产福利免费观看| www.jizz在线观看| 国产三级视频在线看| 亚洲videos| 国产日韩欧美一区二区三区视频| 中文字幕2019第三页| 女子免费在线观看视频www| 最近中文字幕mv免费高清电影 | 国产三级在线看| 欧美日韩一区二区三区视视频| 国产一卡2卡3卡免费网站| 99久久免费精品国产免费| 国产乱子视频| 日本免费视频www| 精品成人免费自拍视频| 国产视频1区| 国产你懂的在线观看| 亚洲精品影院在线| 91精品国产高久久久久久五月天| 天堂在线看视频| 久久香蕉av| 国产中文字幕av| 亚洲精品国自产拍在线观看| 国产激情在线| 在线免费观看黄色片| 2021av在线| 在线视频观看亚洲| 香蕉视频网站在线播放| 天天草天天爽| 黄色片av在线| 国产成免费视频| 精品无人乱码| 精品卡一卡卡2卡3网站| 国产福利在线视频| 99久久99久久免费精品小说| 99热免费在线| 日本a级黄色| 欧美性猛交xxxxbbbb| wwww亚洲| 国产你懂的在线观看| 国产视频你懂的| 中文字幕av高清| yjizz视频网站在线播放| 国产中文在线视频| 国产二区在线播放| www.三区| 国产成人午夜精品| 爱福利在线视频| 中文字幕网站视频在线| 国产99re| 国产免费黄网站| 精品国产免费第一区二区| 在线观看中文| 国产原创av在线| 国产精品久久久久久久牛牛 | 亚洲欧美中文字幕在线观看| 九九热在线视频| 国产精品剧情一区二区三区| 色悠久久久久综合网小说| 九九在线观看免费视频| 国产人成网在线播放va免费| www黄在线观看| 91精选福利| 国产一二区在线| 天天草天天草| 国产黄色片中文字幕| 久艹在线视频| 在线看黄网址| 国产区高清在线| 九九热在线观看| 在线三级av| 91资源在线观看| 1区2区视频| 免费电影网站在线视频观看福利| 国产大学生粉嫩无套流白浆| 国产在线观看网站| 青青草视频在线免费观看| 2019中文字幕视频| 97国产视频| 国产日本韩国在线播放| 国产专区在线播放| 丁香综合在线| 国产鲁鲁视频在线观看免费 | 日本中文字幕在线2020| 亚洲视频精品在线观看| 国产高清在线| a√在线视频| 亚洲高清在线免费| 性欧美精品xxxx| 欧美日韩在线视频免费观看| 亚洲人av在线| 国产精品一品| 在线免费观看黄色av| 亚洲va国产日韩欧美精品色婷婷| 在线久久视频| 国产欧美日韩专区| 国产二区在线播放| 国产网站免费看| 操操操综合网| 影音先锋中文字幕在线| 久热中文字幕| 97视频在线| 国产精品入口麻豆免费观看| 国产视频2区| 超碰国产在线观看| 九九在线免费视频| 五月综合激情在线| 四虎国产精品永久地址998| 国产深夜福利| 国产一二三区在线观看| 国产卡二和卡三的视频| 国产伦精品一区二区三区高清版禁 | 6699久久国产精品免费| 伊人网在线视频| 男人天堂亚洲| 丁香在线视频| 99热免费观看| 亚洲第一成人在线视频| 亚洲电影视频在线| 久久久久久久久久久久网站| 精品久久九九| 最近中文字幕mv免费高清电影 | 国产毛片毛片| 美女被人操视频在线观看| 六月天色婷婷| 99视频在线观看地址| 久草电影在线| 国产福利免费观看| 依依成人在线| 免费久久网站| 在线免费看黄| 国产激情自拍| 中文字幕不卡| 黄色一级片视频| 精品视频三区| 91精选福利| 国产超级va在线视频| 91福利在线免费| 日本h视频在线观看| 992tv在线观看在线播放| 国产香蕉视频在线看| 国产理论片免费观看| 欧美日韩国产亚洲沙发| 在线激情网站| av在线网页| 欧美婷婷久久五月精品三区| av免费网站在线观看| 在线免费国产视频| 性国产高清在线观看| gogogogo高清视频在线| 亚洲精品久久久成人| 在线中文字幕资源| 在线观看中文字幕| h视频在线网站| 青青草在线免费观看| 国产永久免费| 中文字幕在线观看av| 国产午夜视频在线观看| √天堂中文在线| 国产精品免费91| 在线黄色国产电影| 黄网站在线观看高清免费| 丁香视频免费观看| 国产一二三区在线| 永久免费av片在线观看全网站| 亚洲视频在线网| 国产一级电影网| 在线中文字幕观看| 免费a级毛片在线观看| √天堂8资源中文在线| 91xx在线观看| 欧美日韩在线精品成人综合网| 就爱干草视频| 国产高清av| 九九久久久2| 永久免费网站在线| 激情六月丁香| 亚洲天堂影院在线观看| 午夜在线小视频| www免费在线观看视频| 国产极品美女到高潮|