java数据结构(一)——线性链表
来源:互联网 发布:涂银遮光布有毒吗 知乎 编辑:程序博客网 时间:2024/06/11 09:18
与C++类似java数据结构的线性表中也有顺序表和线性表。但是顺序表有几个缺点:1.插入删除操作不方便。2.存储空间必须连续,当表较大时无法申请到足够大的连续存储空间。所以,本文介绍链表结构。
链表具体结构如下:
1.数据部分,保存需要存储的数据。
2.地址部分,保存下一个节点的地址。
代码主要包括数据结构和数据操作。
数据结构部分:
class DATA{ String key; //结点的关键字 String name; int age;} class CLType//定义链表结构{ DATA nodeData=new DATA(); CLType nextNode;}
数据操作部分:
1.添加节点
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; } }
2.插入头结点
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;//返回头指针(java中没有指针实际上是头引用) }
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;//未删除 }
5.遍历所有节点
void CLAllNode(CLType head) //遍历链表 { CLType htemp; DATA 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;//处理下一结点 } } }
6.计算表长
int CLLength(CLType head)//计算链表长度 { CLType htemp; int Len=0; htemp=head; while(htemp!=null) //遍历整个链表 { Len++; //累加结点数量 htemp=htemp.nextNode;//处理下一结点 } return Len;//返回结点数量 }
1 0
- java数据结构(一)——线性链表
- 数据结构——线性表(一)
- 数据结构 JAVA描述(一) 线性表
- 大话数据结构(一)——线性表顺序存储结构的java实现
- 【数据结构】学习笔记(一)——线性表
- 数据结构复习——线性表(一)数组
- 数据结构与算法——线性表(一)
- C++ 数据结构(一)——线性表
- 数据结构之——线性表(一)
- 数据结构(一)---线性表
- 数据结构(一)线性表
- [数据结构]线性表(一)
- 【数据结构】线性表(一)
- 【数据结构】数据结构与算法(一)——线性结构
- Java数据结构(一):线性表之开篇
- 数据结构——线性表(一)线性表的顺序存储和单链表
- Java数据结构——线性表归并
- JAVA数据结构——线性表
- leetcode--007. Reverse Integer
- MySQL大小写不敏感的解决方法
- 【JSONP】详解二
- iOS控件之UISegmentedControl
- spring 初始化 bean 或者销毁 bean 操作
- java数据结构(一)——线性链表
- 数组指针应用
- python学习笔记5列表生成式
- iOS 的 UIApplicationDelegate 你懂多少
- java中自定义时间减去某几天返回减去的天数时间
- SwiftyiRate中文说明
- Windows下Faster R-CNN 配置/Matlab版本编译
- tomcat的配置和优化
- 独立性检验的基本思想和初步应用