「链式存储java」链式存储的线性表可以随机存取
今天给各位分享链式存储java的知识,其中也会对链式存储的线性表可以随机存取进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
java链表储存数据退出
是因为java链表系统比较卡顿,网络设置也比较卡顿,所以在储存数据的时候会出现自动退出的现象。
java怎么用链表实现
在数据结构中经常看见的一个基本概念-链表。
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
在Java中,对于链表的实现都是基于引用数据类型操作的。实现大致如下:
定义节点类Node,节点的概念很重要,一个链表是由各各节点连接在一起组成的。在节点类Node中定义节点内容及指向下一节点的引用,再增加一个添加节点的方法即可完成链表实现。
链表有很多种不同的类型:单向链表,双向链表以及循环链表。在执行效率上,相比数组而言,链表插入快查找慢,开发中得根据实际业务使用。
链式存储的循环删除代码用java怎么写
import java.util.Scanner;
class DATA2
{
String key; //结点的关键字
String name;
int age;
}
class CLType //定义链表结构
{
DATA2 nodeData=new DATA2();
CLType nextNode;
CLType CLAddEnd(CLType head,DATA2 nodeData) //追加结点
{
CLType node,htemp;
if((node=new CLType())==null)
{
System.out.print("申请内存失败!\n");
return null; //分配内存失败
}
else
{
node.nodeData=nodeData; //保存数据
node.nextNode=null; //设置结点指针为空,即为表尾
if(head==null) //头指针
{
head=node;
return head;
}
htemp=head;
while(htemp.nextNode!=null) //查找链表的末尾
{
htemp=htemp.nextNode;
}
htemp.nextNode=node;
return head;
}
}
CLType CLAddFirst(CLType head,DATA2 nodeData)
{
CLType node;
if((node=new CLType())==null)
{
System.out.print("申请内存失败!\n");
return null; //分配内存失败
}
else
{
node.nodeData=nodeData; //保存数据
node.nextNode=head; //指向头指针所指结点
head=node; //头指针指向新增结点
return head;
}
}
CLType CLFindNode(CLType head,String key) //查找结点
{
CLType htemp;
htemp=head; //保存链表头指针
while(htemp!=null) //若结点有效,则进行查找
{
if(htemp.nodeData.key.compareTo(key)==0) //若结点关键字与传入关键字相同
{
return htemp; //返回该结点指针
}
htemp=htemp.nextNode; //处理下一结点
}
return null; //返回空指针
}
CLType CLInsertNode(CLType head,String findkey,DATA2 nodeData) //插入结点
{
CLType node,nodetemp;
if((node=new CLType())==null) //分配保存结点的内容
{
System.out.print("申请内存失败!\n");
return null; //分配内存失败
}
node.nodeData=nodeData; //保存结点中的数据
nodetemp=CLFindNode(head,findkey);
if(nodetemp!=null) //若找到要插入的结点
{
node.nextNode=nodetemp.nextNode; //新插入结点指向关键结点的下一结点
nodetemp.nextNode=node; //设置关键结点指向新插入结点
}
else
{
System.out.print("未找到正确的插入位置!\n");
// free(node); //释放内存
}
return head; //返回头指针
}
int CLDeleteNode(CLType head,String key)
{
CLType node,htemp; //node保存删除结点的前一结点
htemp=head;
node=head;
while(htemp!=null)
{
if(htemp.nodeData.key.compareTo(key)==0) //找到关键字,执行删除操作
{
node.nextNode=htemp.nextNode; //使前一结点指向当前结点的下一结点
// free(htemp); //释放内存
return 1;
}
else
{
node=htemp; //指向当前结点
htemp=htemp.nextNode; //指向下一结点
}
}
return 0; //未删除
}
int CLLength(CLType head) //计算链表长度
{
CLType htemp;
int Len=0;
htemp=head;
while(htemp!=null) //遍历整个链表
{
Len++; //累加结点数量
htemp=htemp.nextNode; //处理下一结点
}
return Len; //返回结点数量
}
void CLAllNode(CLType head) //遍历链表
{
CLType htemp;
DATA2 nodeData;
htemp=head;
System.out.printf("当前链表共有%d个结点。链表所有数据如下:\n",CLLength(head));
while(htemp!=null) //循环处理链表每个结点
{
nodeData=htemp.nodeData; //获取结点数据
System.out.printf("结点(%s,%s,%d)\n",nodeData.key,nodeData.name,nodeData.age);
htemp=htemp.nextNode; //处理下一结点
}
}
}
public class P2_2 {
public static void main(String[] args) {
CLType node, head=null;
CLType CL=new CLType();
String key,findkey;
Scanner input=new Scanner(System.in);
System.out.print("链表测试。先输入链表中的数据,格式为:关键字 姓名 年龄\n");
do
{
DATA2 nodeData=new DATA2();
nodeData.key=input.next();
if(nodeData.key.equals("0"))
{
break; //若输入0,则退出
}
else
{
nodeData.name=input.next();
nodeData.age=input.nextInt();
head=CL.CLAddEnd(head,nodeData);//在链表尾部添加结点
}
}while(true);
CL.CLAllNode(head); //显示所有结点
System.out.printf("\n演示插入结点,输入插入位置的关键字:") ;
findkey=input.next(); //输入插入位置关键字
System.out.print("输入插入结点的数据(关键字 姓名 年龄):");
DATA2 nodeData=new DATA2();
nodeData.key=input.next();
nodeData.name=input.next();
nodeData.age=input.nextInt();//输入插入结点数据
head=CL.CLInsertNode(head,findkey,nodeData); //调用插入函数
CL.CLAllNode(head); //显示所有结点
System.out.print("\n演示删除结点,输入要删除的关键字:");
key=input.next(); //输入删除结点关键字
CL.CLDeleteNode(head,key); //调用删除结点函数
CL.CLAllNode(head); //显示所有结点
System.out.printf("\n演示在链表中查找,输入查找关键字:");
key=input.next(); //输入查找关键字
node=CL.CLFindNode(head,key); //调用查找函数,返回结点指针
if(node!=null) //若返回结点指针有效
{
nodeData=node.nodeData; //获取结点的数据
System.out.printf("关键字%s对应的结点为(%s,%s,%d)\n" ,key,nodeData.key,nodeData.name,nodeData.age);
}
else //若结点指针无效
{
System.out.printf("在链表中未找到关键字为%s的结点!\n",key);
}
}
}
线性表顺序存储结构和链式存储结构的优缺点(JAVA)
从数据结构的角度来说顺序结构的存储空间固定,可扩展性差,但是如果数据元素个数已知,较链式存储节省空间。他的优点是随机读取任意一个元素(因为元素时顺序存储的,所以元素的存储位置之间有一定的关系)但是顺序存储的缺点是删除,插入操作需要花费很多时间在移动元素上。
对于链式存储而言,插入和删除元素开销小,操作简便。可扩展性强。
综上所述,如果元素个数已知,且插入删除较少的可以使用顺序结构,而对于频繁有插入删除操作,元素个数未知的,最好使用链式结构,编程时可结合要处理的数据的特点设计数据结构的。
关于链式存储java和链式存储的线性表可以随机存取的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-11-28,除非注明,否则均为
原创文章,转载请注明出处。