一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - Java單鏈表基本操作的實現(xiàn)

Java單鏈表基本操作的實現(xiàn)

2020-05-24 12:26踏雁尋花 JAVA教程

鏈表是一種數(shù)據(jù)結構,和數(shù)組同級。接下來通過本文給大家介紹Java單鏈表基本操作的實現(xiàn),非常不錯,具有參考借鑒價值,感興趣的朋友一起看下吧

最近被問到鏈表,是一個朋友和我討論Java的時候說的。說實話,我學習編程的近一年時間里,學到的東西還是挺少的。語言是學了Java和C#,關于Web的學了一點Html+css+javascript。因為比較偏好,學習WinForm時比較認真,數(shù)據(jù)庫操作也自己有所研究。但鏈表這個東西我還真沒有學習和研究過,加上最近自己在看WPF,而課程也到了JSP了,比較緊。

但是我還是抽了一個晚上加半天的時間看了一下單向鏈表。并且使用Java試著寫了一個實例出來。沒有接觸過鏈表的朋友可以作為參考,希望大家多提寶貴意見。

我們首先解釋一下什么是鏈表。就我所知,鏈表是一種數(shù)據(jù)結構,和數(shù)組同級。比如,Java中我們使用的ArrayList,其實現(xiàn)原理是數(shù)組。而LinkedList的實現(xiàn)原理就是鏈表了。我的老師說,鏈表在進行循環(huán)遍歷時效率不高,但是插入和刪除時優(yōu)勢明顯。那么他有著愈十年的編程經(jīng)驗,我是相信的。不過不知道他是否是說雙向鏈表,我們在此呢只對單向鏈表做一個了解。

鏈表(Chain本文所說鏈表均為單向鏈表,以下均簡稱單向鏈表)實際上是由節(jié)點(Node)組成的,一個鏈表擁有不定數(shù)量的節(jié)點。而向外暴露的只有一個頭節(jié)點(Head),我們對鏈表的所有操作,都是直接或者間接地通過其頭節(jié)點來進行的。

節(jié)點(Node)是由一個需要儲存的對象及對下一個節(jié)點的引用組成的。也就是說,節(jié)點擁有兩個成員:儲存的對象、對下一個節(jié)點的引用。

  這樣說可能大家不是很明白,我貼一張圖大家可能更容易理解。

Java單鏈表基本操作的實現(xiàn)

Java單鏈表基本操作的實現(xiàn)關鍵代碼如下所示:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
package com.tyxh.link;
//節(jié)點類
public class Node {
protected Node next; //指針域
protected int data;//數(shù)據(jù)域
public Node( int data) {
this. data = data;
}
//顯示此節(jié)點
public void display() {
System. out.print( data + " ");
}
}
package com.tyxh.link;
//單鏈表
public class LinkList {
public Node first; // 定義一個頭結點
private int pos = 0;// 節(jié)點的位置
public LinkList() {
this. first = null;
}
// 插入一個頭節(jié)點
public void addFirstNode( int data) {
Node node = new Node(data);
node. next = first;
first = node;
}
// 刪除一個頭結點,并返回頭結點
public Node deleteFirstNode() {
Node tempNode = first;
first = tempNode. next;
return tempNode;
}
// 在任意位置插入節(jié)點 在index的后面插入
public void add(int index, int data) {
Node node = new Node(data);
Node current = first;
Node previous = first;
while ( pos != index) {
previous = current;
current = current. next;
pos++;
}
node. next = current;
previous. next = node;
pos = 0;
}
// 刪除任意位置的節(jié)點
public Node deleteByPos( int index) {
Node current = first;
Node previous = first;
while ( pos != index) {
pos++;
previous = current;
current = current. next;
}
if(current == first) {
first = first. next;
} else {
pos = 0;
previous. next = current. next;
}
return current;
}
// 根據(jù)節(jié)點的data刪除節(jié)點(僅僅刪除第一個)
public Node deleteByData( int data) {
Node current = first;
Node previous = first; //記住上一個節(jié)點
while (current. data != data) {
if (current. next == null) {
return null;
}
previous = current;
current = current. next;
}
if(current == first) {
first = first. next;
} else {
previous. next = current. next;
}
return current;
}
// 顯示出所有的節(jié)點信息
public void displayAllNodes() {
Node current = first;
while (current != null) {
current.display();
current = current. next;
}
System. out.println();
}
// 根據(jù)位置查找節(jié)點信息
public Node findByPos( int index) {
Node current = first;
if ( pos != index) {
current = current. next;
pos++;
}
return current;
}
// 根據(jù)數(shù)據(jù)查找節(jié)點信息
public Node findByData( int data) {
Node current = first;
while (current. data != data) {
if (current. next == null)
return null;
current = current. next;
}
return current;
}
}
package com.tyxh.link;
//測試類
public class TestLinkList {
public static void main(String[] args) {
LinkList linkList = new LinkList();
linkList.addFirstNode(20);
linkList.addFirstNode(21);
linkList.addFirstNode(19);
//19,21,20
linkList.add(1, 22); //19,22,21,20
linkList.add(2, 23); //19,22,23,21,20
linkList.add(3, 99); //19,22,23,99,21,20
linkList.displayAllNodes();
// Node node = linkList.deleteFirstNode();
// System.out.println("node : " + node.data);
// linkList.displayAllNodes();
// node = linkList.deleteByPos(2);
// System.out.println("node : " + node.data);
// linkList.displayAllNodes();
// linkList.deleteFirstNode();
Node node = linkList.deleteByData(19);
// Node node = linkList.deleteByPos(0);
System. out.println( "node : " + node. data);
linkList.displayAllNodes();
Node node1 = linkList.findByPos(0);
System. out.println( "node1: " + node1. data);
Node node2 = linkList.findByData(22);
System. out.println( "node2: " + node2. data);
}
}

以上所述是小編給大家介紹的Java單鏈表基本操作的實現(xiàn),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網(wǎng)站的支持!

原文鏈接:http://blog.csdn.net/tayanxunhua/article/details/11100097/

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲天天综合网 | 亚洲高清一区二区三区久久 | 69成人影院| 波多野结衣在线免费观看 | 亚洲欧美日韩综合一区久久 | 女子校生下媚药在线观看 | 欧美综合色网 | 国产一区二区三区免费在线视频 | 2021麻豆剧果冻传媒入口永久 | 免费看男人使劲躁女人小说 | 美女脱小内内给男生摸j | 免费网站看v片在线香蕉 | 亚洲精品www久久久久久久软件 | 911精品国产亚洲日本美国韩国 | yy6080午夜国产免费福利 | 99在线免费观看 | 我的年轻漂亮继坶三级 | 精品湿 | 日韩精品一区二区三区中文字幕 | youjizzxxx在线观看 | 欧美日韩第二页 | 亚洲精品中文字幕第一区 | 爽爽影院免费观看 | 玩50岁四川熟女大白屁股直播 | 欧美性受xxxx88喷潮 | 大ji巴好好爽好深网站 | 美女脱了内裤打开腿让人羞羞软件 | 视频一区在线免费观看 | 99精品国产成人一区二区在线 | 91最新国产| 欧亚尺码专线欧洲s码wmy | 青草视频免费观看 | 亚洲性久久久影院 | 久久国产加勒比精品无码 | 加勒比京东热 | 91精品国产品国语在线不卡 | sp啪啪调教打屁股网站 | 色婷婷综合久久久 | 欧美精品亚洲精品日韩专区va | 国产好深好硬好爽我还要视频 | 欧美又硬又粗又长又大 |