java 靜態(tài)鏈表實(shí)現(xiàn)示例詳解
正文
試著用 java 來實(shí)現(xiàn)下鏈表,因?yàn)?java 沒有指針概念的緣故,用數(shù)組的下標(biāo)來代替指針,這樣一個(gè)靜態(tài)鏈表就出來了。
靜態(tài)雙向不循環(huán)鏈表
public class Test {
public static void main(String[] args) {
L l = new L();
l.init();
l.insert(123);
l.insert(456);
l.insert(789);
l.insert(222);
int removeIndex = l.insert(333);
l.show();
l.removeNode(removeIndex);
l.show();
System.exit(0);
}
}
/**
* 靜態(tài)鏈表
*/
class L {
private static final int MAX = 100; //鏈表的最大容量
private Node node[] = new Node[MAX];
private int head; //頭指針,頭指針區(qū)域可存儲(chǔ)數(shù)據(jù)也可以不存儲(chǔ)數(shù)據(jù),只用來做向?qū)?我這里是存儲(chǔ)了數(shù)據(jù).
class Node {
public int next = -1; //指針指向的后一個(gè)節(jié)點(diǎn)
public int pre = -1; //指針指向的前一個(gè)節(jié)點(diǎn)
public long value = -1; //節(jié)點(diǎn)的值
}
/**
* 初始化鏈表空間,其實(shí)這個(gè)可以在實(shí)例化類的時(shí)候完成的.
*/
public void init() {
head = 0;
for (int i = 0; i < MAX; i++) {
node[i] = new Node();
node[i].next = -1; //為了簡(jiǎn)單的實(shí)現(xiàn)下,假設(shè)空值為-1
node[i].pre = -1;
node[i].value = -1;
}
}
/**
* 分配節(jié)點(diǎn)空間,類似于c里的malloc
*
* @return int
*/
public int malloc() {
for (int i = 0; i < MAX; i++) {
if (node[i].pre < 0 && node[i].next < 0 && node[i].value < 0) {
return i;
}
}
System.out.println("malloc fail ,full");
return -1;
}
/**
* 移除節(jié)點(diǎn)
*
* @param indexNode indexNode
*/
public void removeNode(int indexNode) {
if (indexNode < 0) {
System.out.println("removeNode indexNode is error");
return;
}
int preNode = node[indexNode].pre;
int nextNode = node[indexNode].next;
node[indexNode].pre = -1;
node[indexNode].next = -1;
node[indexNode].value = -1;
if (nextNode >= 0) {
node[nextNode].pre = preNode;
}
//頭節(jié)點(diǎn)被移除
if (preNode < 0) {
head = nextNode;
} else {
node[preNode].next = nextNode;
}
}
/**
* 插入節(jié)點(diǎn)
*
* @param v v
*/
public int insert(long v) {
int index = head;
while (node[index].next >= 0) {
index = node[index].next;
}
int insertNodeIndex = malloc();
if (insertNodeIndex < 0) {
System.out.println("malloc error,please check malloc function.");
return -1;
}
node[insertNodeIndex].value = v;
if (insertNodeIndex == head) {
node[insertNodeIndex].pre = -1;
} else {
node[index].next = insertNodeIndex;
node[insertNodeIndex].pre = index;
}
return insertNodeIndex;
}
/**
* 測(cè)試下顯示這個(gè)鏈表
*/
public void show() {
int index = head;
System.out.println("show l:-------------------------");
while (node[index].next >= 0) {
System.out.println(node[index].value);
index = node[index].next;
}
System.out.println(node[index].value);
System.out.println("show l end:-----------------------");
System.out.println("test show l start:_______________");
while (node[index].pre >= 0) {
System.out.println(node[index].value);
index = node[index].pre;
}
System.out.println(node[index].value);
System.out.println("test show l end:_______________");
}
}以上就是java 靜態(tài)鏈表實(shí)現(xiàn)示例詳解的詳細(xì)內(nèi)容,更多關(guān)于java 靜態(tài)鏈表的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java使用Poi導(dǎo)出Excel表格方法實(shí)例
這篇文章主要給大家介紹了關(guān)于Java使用Poi導(dǎo)出Excel表格的相關(guān)資料,Java POI是一個(gè)用于操作Microsoft Office格式的Java API庫(kù),可以使用它來導(dǎo)出Excel文件,需要的朋友可以參考下2023-10-10
springboot掃描引入jar包的service等組件方式
這篇文章主要介紹了springboot掃描引入jar包的service等組件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
SpringCloud+Nacos多服務(wù)多實(shí)例本地測(cè)試過程
文章介紹了如何使用Nacos進(jìn)行服務(wù)注冊(cè)與發(fā)現(xiàn),通過配置和啟動(dòng)不同實(shí)例來實(shí)現(xiàn)服務(wù)的高可用性,并展示了如何在前端調(diào)用服務(wù)接口,確保系統(tǒng)的穩(wěn)定運(yùn)行2026-02-02
解決mybatis-plus-boot-starter與mybatis-spring-boot-starter的錯(cuò)誤問題
本文主要講述了在使用MyBatis和MyBatis-Plus時(shí)遇到的綁定異常問題,通過排查和總結(jié),作者發(fā)現(xiàn)使用MyBatis-Plus?Boot?Starter可以解決這個(gè)問題,文章詳細(xì)對(duì)比了MyBatis-Plus?Boot?Starter和MyBatis?Spring?Boot?Starter的功能和使用場(chǎng)景2025-01-01

