JAVA单向链表实现
單向鏈表
鏈表和數(shù)組一樣是一種最常用的線性數(shù)據(jù)結(jié)構(gòu),兩者各有優(yōu)缺點(diǎn)。數(shù)組我們知道是在內(nèi)存上的一塊連續(xù)的空間構(gòu)成,所以其元素訪問可以通過下標(biāo)進(jìn)行,隨機(jī)訪問速度很快,但數(shù)組也有其缺點(diǎn),由于數(shù)組的內(nèi)存是一次性申請的,就像基本數(shù)據(jù)類型一樣,一次性申請所需的空間,在數(shù)據(jù)量變動(dòng)很大的時(shí)候就容易導(dǎo)致預(yù)先申請的內(nèi)存不夠或內(nèi)存浪費(fèi)。在者就是在存的是有序數(shù)列時(shí)進(jìn)行數(shù)據(jù)插入會(huì)比較麻煩,所以鏈表就是為了彌補(bǔ)數(shù)組的不足的一種數(shù)據(jù)結(jié)構(gòu)。相反的,鏈表對于變動(dòng)很大的數(shù)據(jù)有很大的適應(yīng)性,而且其對于數(shù)據(jù)插入和刪除很方便。而鏈表的缺點(diǎn)就是對于內(nèi)存的浪費(fèi),鏈表除了存儲(chǔ)需要的數(shù)據(jù)還要存儲(chǔ)額外的指針。鏈表的節(jié)點(diǎn)示意圖如下:
?
看到指針你可能會(huì)想:“我們這不是java語言嗎?沒有指針啊!”,沒錯(cuò)!在我對java了解不是很深的時(shí)候我也這么想,但是我要說的是java雖然不允許程序員像c/c++那樣使用指針,但java語言本身的實(shí)現(xiàn)還是離不開指針的(變量名其實(shí)就是指向jvm中一塊內(nèi)存的指針,我就不詳述)。請看以下節(jié)點(diǎn)的代碼:
//節(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)private class Node{
private Object data=null;//數(shù)據(jù)域
private Node next=null;//下一個(gè)節(jié)點(diǎn)
private Node(Object data) {
this.data=data;
}
}
這里的節(jié)點(diǎn)class我是寫成inner class的形式,后面有完整代碼。還有一點(diǎn)就是這里object類型,這里也可以使用泛型
//鏈表數(shù)據(jù)結(jié)構(gòu)public class SingleLinkList {
int size=0;//鏈表長度,可有可無,有的話很容易實(shí)現(xiàn)很多鏈表的特殊操作
Node head=null;//頭節(jié)點(diǎn)
public SingleLinkList() {
this.size=0;this.head=null;
}
}
package singleLinkList;
?
public class SingleLinkList {
?
int size=0;//鏈表長度
Node head=null;
public SingleLinkList() {
this.size=0;this.head=null;
}
//節(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)
private class Node{
private Object data=null;//數(shù)據(jù)域
private Node next=null;//下一個(gè)節(jié)點(diǎn)
private Node(Object data) {
this.data=data;
}
}
//表頭添加元素
public Object addHead(Object data) {
Node newHead=new Node(data);
if(size==0) {
this.head=newHead;
}
else {
newHead.next=this.head;
this.head=newHead;
}
size++;
return data;
}
//刪除表頭元素
public Object deleteHead() {
if(size>0) {
Node node=this.head;
this.head=this.head.next;
size--;
}
return null;
}
//查找指定元素
public Node findData(Object data) {
if(size==0)return null;
Node cur=this.head;
轉(zhuǎn)載于:https://www.cnblogs.com/Davidhwj/p/10433387.html
總結(jié)
以上是生活随笔為你收集整理的JAVA单向链表实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到孩子小的时候是什么意思
- 下一篇: 【转】SASS用法指南