导航:首页 > 编程语言 > 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链表结构相关的资料

热点内容
乳山迷雾txt全文阅读全文小说 浏览:885
vm同步命令 浏览:14
安卓转移到ios王者荣耀怎么登 浏览:955
工业压缩机品牌 浏览:182
苹果系统怎么更改app的图标 浏览:668
泰剧女同电影 浏览:435
人造变异女的电影 浏览:237
怀旧经典老录像片 浏览:593
和利时功能块怎么加密 浏览:30
宣萱电影好看 浏览:568
韩国纯真时代动态图 浏览:100
关于男主有个能操控别人 浏览:303
怎么测试doh加密 浏览:210
欧美 小说 图片 浏览:908
西安程序员未来的发展趋势 浏览:173
叫阿能的电影 浏览:261
客车购票小程序源码 浏览:645
程序员用数据表白灵魂伴侣 浏览:485
spin命令行 浏览:376
百合txt下载 浏览:61