導航:首頁 > 編程語言 > java鏈表結構

java鏈表結構

發布時間:2022-10-01 06:57:16

java寫鏈表結構如何在一個node里寫多個數據

java泛型不支持int必須進行包裝轉成Integer

//你們老師那個能運行?
publicclassLinkedPriorityList<E>{
Node<E>head;
Node<E>last;
publicvoidaddNode(Edate){
if(head==null){
head=newNode<E>(date);
last=head;
}else{
last.next=newNode<E>(date);
last=last.next;
}
}
publicvoidIterator(){
Node<E>temp=head;
while(true){
System.out.println(temp.data);
if(temp.next==null){
break;
}
temp=temp.next;
}
}

publicstaticvoidmain(String[]args){
//LinkedPriorityList<String>lpList=newLinkedPriorityList<String>();
//如果要泛型支持不同數據類型,不寫<String>就行
LinkedPriorityListlpList=newLinkedPriorityList();
lpList.addNode("bac");
lpList.addNode("cdd");
lpList.addNode("3234");
lpList.addNode(21);
lpList.addNode('e');
lpList.Iterator();
}
}

classNode<E>{
Edata;
Node<E>next;
Node(Edate){
this.data=date;
}
}

② java 中如何實現鏈表操作

class Node {
Object data;
Node next;//申明類Node類的對象叫Next

public Node(Object data) { //類Node的構造函數
setData(data);
}
public void setData(Object data) {
this.data = data;
}
public Object getData() {
return data;
}
}

class Link {
Node head;//申明一個Node類的一個對象 head
int size = 0;

public void add(Object data) {
Node n = new Node(data); //調用Node類的構造函數

鏈表是一種重要的數據結構,在程序設計中佔有很重要的地位。C語言和C++語

言中是用指針來實現鏈表結構的,由於Java語言不提供指針,所以有人認為在

Java語言中不能實現鏈表,其實不然,Java語言比C和C++更容易實現鏈表結構

。Java語言中的對象引用實際上是一個指針(本文中的指針均為概念上的意義,

而非語言提供的數據類型),所以我們可以編寫這樣的類來實現鏈表中的結點。

class Node
{
Object data;
Node next;//指向下一個結點
}

將數據域定義成Object類是因為Object類是廣義超類,任何類對象都可以給

其賦值,增加了代碼的通用性。為了使鏈表可以被訪問還需要定義一個表頭,表

頭必須包含指向第一個結點的指針和指向當前結點的指針。為了便於在鏈表尾部

增加結點,還可以增加一指向鏈表尾部的指針,另外還可以用一個域來表示鏈表

的大小,當調用者想得到鏈表的大小時,不必遍歷整個鏈表。下圖是這種鏈表的

示意圖:

鏈表的數據結構

我們可以用類List來實現鏈表結構,用變數Head、Tail、Length、Pointer

來實現表頭。存儲當前結點的指針時有一定的技巧, Pointer並非存儲指向當前

結點的指針,而是存儲指向它的前趨結點的指針,當其值為null時表示當前結點是

第一個結點。那麼為什麼要這樣做呢?這是因為當刪除當前結點後仍需保證剩下

的結點構成鏈表,如果Pointer指向當前結點,則會給操作帶來很大困難。那麼如

何得到當前結點呢,我們定義了一個方法cursor(),返回值是指向當前結點的指

針。類List還定義了一些方法來實現對鏈表的基本操作,通過運用這些基本操作

我們可以對鏈表進行各種操作。例如reset()方法使第一個結點成為當前結點。

insert(Object d)方法在當前結點前插入一個結點,並使其成為當前結點。

remove()方法刪除當前結點同時返回其內容,並使其後繼結點成為當前結點,如

果刪除的是最 後一個結點,則第一個結點變為當前結點。

鏈表類List的源代碼如下:

import java.io.*;
public class List
{
/*用變數來實現表頭*/
private Node Head=null;
private Node Tail=null;
private Node Pointer=null;
private int Length=0;
public void deleteAll()
/*清空整個鏈表*/
{
Head=null;
Tail=null;
Pointer=null;
Length=0;
}
public void reset()
/*鏈表復位,使第一個結點成為當前結點*/
{
Pointer=null;
}
public boolean isEmpty()
/*判斷鏈表是否為空*/
{
return(Length==0);
}
public boolean isEnd()
/*判斷當前結點是否為最後一個結點*/
{
if(Length==0)
throw new java.lang.NullPointerException();
else if(Length==1)
return true;
else
return(cursor()==Tail);
}
public Object nextNode()
/*返回當前結點的下一個結點的值,並使其成為當前結點*/
{
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()
/*返回當前結點的值*/
{
Node temp=cursor();
return temp.data;
}

public void insert(Object d)
/*在當前結點前插入一個結點,並使其成為當前結點*/
{
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()
/*將當前結點移出鏈表,下一個結點成為當前結點,如果移出的結點是最後

一個結點,則第一個結點成為當前結點*/
{
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()
/*返回當前結點的指針*/
{
if(Head==null)
throw new java.lang.NullPointerException();
else if(Pointer==null)
return Head;
else
return Pointer.next;
}
public static void main(String[] args)
/*鏈表的簡單應用舉例*/
{
List a=new List ();
for(int i=1;i<=10;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();
//確保用戶看清程序運行結果
}
catch(IOException e)
{}
}
}
class Node
/*構成鏈表的結點定義*/
{
Object data;
Node next;
Node(Object d)
{
data=d;
next=null;
}
}

讀者還可以根據實際需要定義新的方法來對鏈表進行操作。雙向鏈表可以用

類似的方法實現只是結點的類增加了一個指向前趨結點的指針。

可以用這樣的代碼來實現:

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

當然,雙向鏈表基本操作的實現略有不同。鏈表和雙向鏈表的實現方法,也

可以用在堆棧和隊列的實現中,這里就不再多寫了,有興趣的讀者可以將List類

的代碼稍加改動即可。

③ java怎麼用鏈表實現

在數據結構中經常看見的一個基本概念-鏈表。
鏈表是一種物理存儲單元上非連續、非順序的存儲結構,數據元素的邏輯順序是通過鏈表中的指針鏈接次序實現的。鏈表由一系列結點(鏈表中每一個元素稱為結點)組成,結點可以在運行時動態生成。每個結點包括兩個部分:一個是存儲數據元素的數據域,另一個是存儲下一個結點地址的指針域。
在Java中,對於鏈表的實現都是基於引用數據類型操作的。實現大致如下:
定義節點類Node,節點的概念很重要,一個鏈表是由各各節點連接在一起組成的。在節點類Node中定義節點內容及指向下一節點的引用,再增加一個添加節點的方法即可完成鏈表實現。
鏈表有很多種不同的類型:單向鏈表,雙向鏈表以及循環鏈表。在執行效率上,相比數組而言,鏈表插入快查找慢,開發中得根據實際業務使用。

④ java arraylist 屬於靜態鏈表結構嗎為什麼

靜態鏈表? 動態鏈表?
靜態數據就是內存里的一片連續的區域,每次讀取下一個數據都是通過指針偏移的方式,想了解詳細點的話去學下C,C裡面對這部分講的很清楚。
動態數據,入ArrayList的底層實現就是靜態鏈表結構

⑤ . java怎麼創建鏈表

java中創建鏈表的例子:
package zx;
class Link{
private Node root;

class Node{
private String name;
private Node Next;
public Node(String name){
this.name = name;
}
public String getName(){
return this.name;
}
public void addNode(Node newNode){
if(this.Next==null){
this.Next = newNode;
}else{
this.Next.addNode(newNode);
}
}
public void printNode(){
System.out.print(this.name + "-->");
if(this.Next!=null){
this.Next.printNode();
}
}
};
public void add(String name){
Node newNode = new Node(name);
if(this.root==null){
this.root = newNode;
}else{
this.root.addNode(newNode);
}
}
public void print(){
if(this.root!=null){
this.root.printNode();
}
}
};

public class LinkDemo {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Link link = new Link();
link.add("根節點");
link.add("第一節點");
link.add("第二節點");
link.add("第三節點");
link.add("第四節點");
link.print();
System.out.println("null");

}

}

⑥ java的LinkedHashSet是怎樣實現存取有序的, 底層原理是什麼

LinkedHashSet 的實現

對於 LinkedHashSet 而言,它繼承與 HashSet、又基於 LinkedHashMap 來實現的。

LinkedHashSet 底層使用 LinkedHashMap 來保存所有元素,它繼承與 HashSet,其所有的方法操作上又與 HashSet 相同,因此 LinkedHashSet 的實現上非常簡單,只提供了四個構造方法,並通過傳遞一個標識參數,調用父類的構造器,底層構造一個 LinkedHashMap 來實現,在相關操作上與父類 HashSet 的操作相同,直接調用父類 HashSet 的方法即可。

需要注意理解的點是:

⑦ java里的鏈表指的是什麼為什麼需要鏈表

鏈表的確是一種數據結構.而數據結構就是一種存放數據的方式.
鏈表就是和鐵鏈相似的.一個接著一個.一個扣著一個.
比如:
1,後面接著是2,然後是3,是連續的.1,2,3,就是這個鏈表的節點,就是數據存放的地方
再通俗點.
大學的校園生活:
班級是這樣的.1年1班,1年2班,....1年10班.
班級就是節點,而班級里的學生,就是數據.他們是連續存儲的.但是內存分分配不是連續的.
有時間看下,<數據結構>書上寫的很好.我就說到這吧.

⑧ JAVA中鏈表有什麼用

java中的List介面 中有兩個實現類:ArrayList和LinkedList。前者是使用數組實現,用索引來取數據是它的優勢。後者是用雙向鏈表實現,在插入和刪除操作上占優勢。具體實現已經封裝好了,不用操心過多,具體動作都有具體的方法。

⑨ java中 雙向鏈表是什麼意思啊,是用來幹啥的啊,求大神解答謝謝

採用雙向循環鏈表作為數據結構
1 新元素的下一個指向header
2 新元素的上一個指向header的上一個
3 新元素的上一個的下一個指向新元素
4 新元素的下一個的上一個指向新元素
一般LinkedList是採用雙向循環鏈表,無需擴容,添加元素添加到最後即可

⑩ java棧 是鏈表嗎

不是的。
鏈表:
鏈表是一種物理存儲單元上非連續,非順序的存儲結構,數據元素的邏輯順序是通過鏈表中的指針鏈接次序實現的,聊表由一系列節點組成,(鏈表中的每個元素稱為節點),節點可以在運行時動態生成,每個節點包括兩個部分:一個是存儲數據元素的數據域,另一個是存儲下一個結點地址的指針域。相比線性表順序結構,操作復雜。
棧:(水杯喝水,先進後出)
棧是一種數據結構,是只能在某一端插入和刪除的特殊線性表。他按照先進後出的原則存儲數據
線性表是邏輯概念,只要所有的數據在邏輯上是一維的都可以認為是線性表。線性表包括順序表(棧,隊列等),鏈表(單鏈表,雙鏈表等)。跟線性表相對的概念應該是樹或者堆。

順序表是空間概念,指的是所有的數據在存儲空間上順序排列,而跟具體的操作方式無關。與順序表相對的概念只有鏈表。

閱讀全文

與java鏈表結構相關的資料

熱點內容
十三排電影院坐第幾排 瀏覽:122
尼故福利院 瀏覽:602
哪有好看的電影網站 瀏覽:773
紅顏薄命女斗小說 瀏覽:940
法國電影戀愛love2012電影完整版 瀏覽:459
在線影視 不卡 瀏覽:168
老男孩韓國完整版百度網盤 瀏覽:485
用箱子運水怪結果被放出來了電影 瀏覽:519
徐錦江空中飛人片名 瀏覽:164
手機免費在線看福利電影 瀏覽:457
羅麗星克萊爾經典 瀏覽:342
台灣紅羊有哪些經典電影 瀏覽:568
免下載你懂的 瀏覽:975
新建文件夾1女演員三位 瀏覽:740
不用下載就能看的視頻網站 瀏覽:330
我一個神偷硬生生把國家偷成強國 瀏覽:600
樣子是五歲小男孩和郭富城演的 瀏覽:460
韓國演員也美娜 瀏覽:898
陸離是哪部小說的主角 瀏覽:49
華娛開局佟麗婭 瀏覽:17