java学习笔记——可用链表

本文深入探讨了链表的基本操作方法,包括插入、查询、删除等,并通过具体实例展示了链表类的设计与实现,旨在帮助读者理解链表在数据结构中的应用。
NO链表方法名称描述
1public void add(数据类型 对象)向链表中增加数据
2

public int size()

查看链表中数据个数
3public boolean isEmpty()查看链表是否为空
4public void clean()清空链表
5public 数据类型 get(int index)返回指定索引的数据对象,需要使用自定义类中的Compare()函数方法
6public boolean contains(数据类型  对象)查看链表中是否包含数据对象,需要使用自定义类中的Compare()函数方法
7public  void remove(数据类型 对象)删除链表中数据对象,需要使用自定义类中的Compare()函数方法
8public 数据类型[] toArray()转换为数据对象数组

 

 

 

 

 

 

 

 

 

 

 

 

class Person{
String name;
int age; public Person(String name,int age) { // TODO Auto-generated constructor stub this.name=name; this.age=age; } public boolean Compare(Person person){ if(person==null) return false; if(this==person) return true; if(this.name==person.name&&this.age==person.age) return true; return false; } public void getInfo(){ System.out.println("name:"+name+",age:"+age); } } class Link{ private class Node{ private Person data; private Node next; public Node(Person data) { // TODO Auto-generated constructor stub this.data=data; } /**********************************************/ public void addNode(Node newNode){ if(this.next==null) this.next=newNode; else { this.next.addNode(newNode); } } /*********************************************/ public Person getNode(int index){ if(index==Link.this.foot++)//注意:内部类能直接访问外部类的变量 return this.data; return this.next.getNode(index); } /*********************************************/ public boolean containsNode(Person data){ if(this.data.Compare(data)) return true; else if(this.next==null)/*重点*/ return false; return this.next.containsNode(data); } public void removeNode(Node previous,Person data){ if(this.data.Compare(data)) previous.next=this.next; else this.next.removeNode(this, data); } public void toarrayNode(){ Link.this.retArray[Link.this.foot++]=this.data; if(this.next!=null) this.next.toarrayNode(); } /*********************************************/ } private Node root; private int count=0;//结点个数 private int foot;//为了查找相关位置节点 private Person [] retArray; public void add(Person data){ Node newNode=new Node(data); if(root==null) root=newNode; else { root.addNode(newNode); } count++; } public int size(){ return count; } public boolean isEmpty(){ return this.count==0; } public void clean(){//java的虚拟机会自动回收那些分配的空间 root=null; count=0; } public Person get(int index){ if(index>count) return null; this.foot=0; return this.root.getNode(index); } public boolean contains(Person data){ if(data==null) return false; return this.root.containsNode(data); } public void remove(Person data){ if(this.contains(data)){ if(this.root.data==data) this.root=this.root.next; else this.root.next.removeNode(root, data);//重点 this.count--; } } public Person [] toArray(){ if(this.count==0) return null; retArray=new Person[count]; this.foot=0; this.root.toarrayNode(); return retArray; } } public class LinkDemo { public static void main(String[] args) { // TODO Auto-generated method stub Link link=new Link(); link.add(new Person("张三", 20)); link.add(new Person("李四", 21)); link.add(new Person("王五", 22)); System.out.println("size:"+link.size()); Person[] per1=link.toArray(); for(int i=0;i<per1.length;i++) per1[i].getInfo(); Person tmp=new Person("李四", 21); link.remove(tmp); Person[] per2=link.toArray(); for(int i=0;i<per2.length;i++) per1[i].getInfo(); } }

 

转载于:https://www.cnblogs.com/lukexwang/p/4591834.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值