跟小刀学习 java 数据结构 单向链表
来源:互联网 发布:linux 卸载squid 编辑:程序博客网 时间:2024/04/30 15:20
- 这次我写java数据结构的单向链表,
转载:请注明出处
什么是单向链表呢?从字面的意思来说它是有方向的,只有一个方向,链表这种数据结构,表示它是一种链式的存储结构,它在物理内存中不是连续的,而是通过一个一个的指针指向下一个节点,最后一个元素的next指针域指向NULL,即为空,它表示链表的末尾元素,链表的第一个元素称为“头”元素。单向链表的添加时是从头结点开始添加
- 单向链表的删除也是从头结点开始删除,当然也可以删除想删除的数据
- 单向链表的 查询是,是从头结点开始查询,如果不是就找下一个节点.一直到找到为止
- 所以可以这个总结,单向链接的添加和删除比较快,但是在查询上效率比较低,好了废话不多说直接上代码
先一写一个节点类public class Link { public int iData; public double dData; public Link(int id, double dd) { this.iData =id; this.dData =dd; } public Link next;//指向下一个 public void display(){ System.out.print("["+iData+","+dData+"] "); }}
这里写链表 public class LinkList { private Link first; public LinkList() { this.first = null; } /** * 添加第一个元素,从头结点开始添加 * @param id * @param dd */ public void insertFirst(int id,double dd){ Link newLink = new Link(id,dd);//创建一个link实例 newLink.next=first;// 新的节点的next 指向原来的第一个节点 first = newLink;//第一个节点变成新添加的 } public Link find(int key){ Link current = first; while(current.iData !=key){//如果当前的idata不等于这个key 就继续找。 if(current.next !=null){//下一个不等于空 那就把下一个变成当前的 current=current.next; }else return null; } return current; } /** * 删除 一个元素 * @param key * @return */ public Link delete(int key){ Link current = first; Link previous = first; while(current.iData != key){ if(current.next == null) return null;//下一个为空,返回null else //这里比较绕口。就是说。下一个不为空 就当前的变成前一个,当前的下一个节点变成前一个 previous = current; current = current.next; } //如果要删的找个元素就是第一个的话 if(current == first){ first = first.next; }else{ //如果要删除的元素不是第一个的话就把前一个的指针指向当前的指针指向的那个 1--2--3 //就是1指向3 previous.next=current.next; } return current; } /** * 从第一个节点开始删除 * @return */ public Link deleteFirst(){ Link temp =first; first=first.next; return temp; } public boolean isEmpty(){ return first == null; } public void displayList(){ System.out.print("(first-->last):"); Link current = first; while(current != null){ current.display(); current=current.next; } System.out.println(); }}
有俩个测试类我也献上代码
public class TestLinkList {
public static void main(String[] args) { LinkList linkList = new LinkList(); linkList.insertFirst(88, 0.89); linkList.insertFirst(23, 0.12); linkList.insertFirst(34, 0.23); linkList.insertFirst(17, 0.77); linkList.insertFirst(33, 0.45); linkList.displayList(); while(!linkList.isEmpty()){ Link deleteFirst = linkList.deleteFirst(); System.out.print("Delete"); deleteFirst.display(); System.out.println(); } linkList.displayList();}
}
测试查询和删除你想删的数据
public static void main(String[] args) {
LinkList linkList = new LinkList();
linkList.insertFirst(88, 0.89);
linkList.insertFirst(23, 0.12);
linkList.insertFirst(34, 0.23);
linkList.insertFirst(17, 0.77);
linkList.insertFirst(33, 0.45);
linkList.displayList();
Link find = linkList.find(34); if(find == null) System.out.println("can't fount key"); else System.out.println("fount link with key :"+ find.iData); Link delete = linkList.delete(23); if(find == null) System.out.println("can't delete key"); else System.out.println("delete link with key :"+ delete.iData); linkList.displayList(); }
“`
上述就是单向链表的java实现.如果有不对的地方,我们可以多多交流
—小刀
1 0
- 跟小刀学习 java 数据结构 单向链表
- 跟小刀学 数据结构 双向链表
- 跟小刀学习 java 数据结构 栈和队列的实现
- 跟小刀 学习数据结构 红黑树的概念
- 跟小刀 学习java导出word
- 跟小刀学习 数据结构二叉树的实现
- 跟小刀 学有序链表的实现
- 跟我学数据结构:(3)单向链表
- 跟我学数据结构:(3)单向链表
- 跟我学数据结构:(3)单向链表
- 数据结构学习之单向链表[附Java实现代码]
- 跟小刀学习 lucene 分词的原理
- 跟小刀学习 递归简单实现
- [数据结构算法学习] 单向链表
- 数据结构学习之单向链表结构
- 数据结构学习之单向链表结构
- Java数据结构之单向链表
- 数据结构之单向链表【java版】
- sublime编辑器
- 在MyEclipse下创建Java Web项目 入门(图文并茂)经典教程
- CKEditor和CKFinder的使用说明
- U3d中C#脚本常用方法
- Centos7使用wget安装PHP7、Mysql5.6、Nginx1.9
- 跟小刀学习 java 数据结构 单向链表
- Eclipse安装热部署插件-Jrebel
- Android 数据存储
- linux nginx安装以及配置
- SQL Server 分区表
- error link2001 无法解析的外部符号
- CVTE2017年暑期前端实习-笔试题(驼峰命名转换)
- CURL Failed to connect to Permission denied
- 什么是最小生成树什么是贪心算法(基本概念)8.1.1