這篇文章給大家介紹JAVA中怎么實(shí)現(xiàn)鏈表和雙向鏈表,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
成都創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的伊川網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
JAVA基礎(chǔ):語(yǔ)言中鏈表和雙向鏈表的實(shí)現(xiàn)(轉(zhuǎn))[@more@]鏈表是一種重要的數(shù)據(jù)結(jié)構(gòu),在程序設(shè)計(jì)中占有很重要的地位。C語(yǔ)言和C++語(yǔ)言中是用指針來(lái)實(shí)現(xiàn)鏈表結(jié)構(gòu)的,由于JAVA語(yǔ)言不提供指針,所以有人認(rèn)為在JAVA語(yǔ)言中不能實(shí)現(xiàn)鏈表,其實(shí)不然,JAVA語(yǔ)言比C和C++更容易實(shí)現(xiàn)鏈表結(jié)構(gòu)。JAVA語(yǔ)言中的對(duì)象引用實(shí)際上是一個(gè)指針(本文中的指針均為概念上的意義,而非語(yǔ)言提供的數(shù)據(jù)類型),所以我們可以編寫這樣的類來(lái)實(shí)現(xiàn)鏈表中的結(jié)點(diǎn)。
class Node
{
Object data;
Node next; // 指向下一個(gè)結(jié)點(diǎn)
}
將數(shù)據(jù)域定義成Object類是因?yàn)镺bject類是廣義超類(所有類的祖先),任何類對(duì)象都可以給其賦值,增加了代碼的通用性。為了使鏈表可以被訪問(wèn)還需要定義一個(gè)表頭,表頭必須包含指向第一個(gè)結(jié)點(diǎn)的指針和指向當(dāng)前結(jié)點(diǎn)的指針。為了便于在鏈表尾部增加結(jié)點(diǎn),還可以增加一指向鏈表尾部的指針,另外還可以用一個(gè)域來(lái)表示鏈表的大小,當(dāng)調(diào)用者想得到鏈表的大小時(shí),不必遍歷整個(gè)鏈表,下圖是這種鏈表的示意圖。
圖一 鏈表的數(shù)據(jù)結(jié)構(gòu)
我們可以用類List來(lái)實(shí)現(xiàn)鏈表結(jié)構(gòu),用變量Head、Tail、Length、Pointer來(lái)實(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ōu)槭裁匆@樣做呢?這是因?yàn)楫?dāng)我們刪除當(dāng)前結(jié)點(diǎn)后仍需保證剩下的結(jié)點(diǎn)構(gòu)成鏈表,如果Pointer指向當(dāng)前結(jié)點(diǎn),則會(huì)給操作帶來(lái)很大困難。那么如何得到當(dāng)前結(jié)點(diǎn)呢,我們定義了一個(gè)方法cursor(),返回值是指向當(dāng)前結(jié)點(diǎn)的指針。類List還定義了一些方法來(lái)實(shí)現(xiàn)對(duì)鏈表的基本操作,通過(guò)運(yùn)用這些基本操作我們可以對(duì)鏈表進(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
{
/* 用變量來(lái)實(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 );
}
關(guān)于JAVA中怎么實(shí)現(xiàn)鏈表和雙向鏈表就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
當(dāng)前標(biāo)題:JAVA中怎么實(shí)現(xiàn)鏈表和雙向鏈表
分享路徑:http://sd-ha.com/article4/gcjgie.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、建站公司、標(biāo)簽優(yōu)化、網(wǎng)站制作、網(wǎng)站改版、關(guān)鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)