Java面向对象_数据结构之链表

链表:是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里村到下一个节点的指针。

在链表数据结构中,需要使用到递归算法。递归算法是一种直接或间接地调用自身算法的过程。

 1 public class Practice14 {
 2
 3     public static void main(String[] args) {
 4         // TODO Auto-generated method stub
 5         jiecheng(5);
 6         System.out.println(jiecheng2(5));
 7     }
 8     //递归写法(很简单)
 9     //注意递归必须要有出口,递归过多会造成内存栈溢出
10     public static int jiecheng2(int num){
11         if(num==1)return 1;
12         return num*jiecheng2(num-1);
13     }
14     //求阶乘(普通写法)
15     public static void jiecheng(int num){
16
17         int sum=num;
18         int i=num-1;
19         do{
20             sum=sum*i;
21             i--;
22         }while(i>1);
23         System.out.println(sum);
24     }
25
26 }

链表数据结构用于适合频繁进行添加、插入、删除操作,举个例子:

 1 //链表数据结构用于适合频繁进行添加、插入、删除操作
 2 public class Practice14 {
 3
 4     public static void main(String[] args) {
 5         // TODO Auto-generated method stub
 6         NodeManager nm=new NodeManager();
 7         nm.addNode("1");
 8         nm.addNode("2");
 9         nm.addNode("3");
10         nm.addNode("4");
11         nm.printNode();
12         nm.delNode("3");
13         nm.printNode();
14     }
15
16 }
17 //节点管理类
18 class NodeManager{
19     private Node root;//根节点
20     public void addNode(String name){
21         if(root==null){
22             root=new Node(name);
23         }else{
24             root.add(name);
25         }
26     }
27
28     public void delNode(String name){
29         if(root.getName().equals(name)){
30             root=root.next;
31         }else{
32             root.del(name);
33         }
34
35     }
36
37     public void printNode(){
38         if(root!=null){
39             System.out.print(root.getName()+"->");
40             root.print();
41             System.out.println();
42         }
43
44     }
45     //每个节点对象
46     class Node{
47         private String name;
48         private Node next;//表示当前节点的下一个节点
49         public Node(String name){
50             this.name=name;
51         }
52
53         public String getName() {
54             return name;
55         }
56         public void setName(String name) {
57             this.name = name;
58         }
59         public Node getNext() {
60             return next;
61         }
62         public void setNext(Node next) {
63             this.next = next;
64         }
65         //添加节点
66         public void add(String name){
67             if(this.next==null){
68                 this.next=new Node(name);
69             }else{
70             this.next.add(name); //递归
71             }
72         }
73         //删除节点
74         public void del(String name){
75             if(this.next!=null){
76                 if(this.next.name.equals(name)){
77                     this.next=this.next.next;
78                 }else{
79                     this.next.del(name);
80                 }
81             }
82         }
83         //输出节点
84         public void print(){
85             if(this.next!=null){
86                 System.out.print(this.next.getName()+"->");
87                 this.next.print();
88             }
89         }
90     }
91 }
时间: 2024-10-15 20:54:52

Java面向对象_数据结构之链表的相关文章

Java面向对象_常用类库api——二叉树数据结构实现

二叉树是每个节点最多有两个子树的有序树.通常子树被称为"左子树"和"右子树". 二叉树算法的排序规则: 1.选择第一个元素作为根节点 2.之后如果元素大于根节点放在右子树,如果元素小于根节点,则放在左子树 3.最后按照中序遍历的方式进行输出,则可以得到排序的结果(左->根->右) 8.3.10.1.6.14.4.7.13 1 public class BinaryTree { 2 private Node root; 3 public void addN

java培训_数据结构和算法那个重要?

java培训前两天一枚Java小鲜肉问:小编,Java中数据和算法哪个重要?回答明白这个问题,我觉得还是先要解决几个生活中常见的问题 大胸和美腿哪个重要? 老婆和老婆同时掉河里先救谁? 詹姆斯和库里谁更厉害? 林志玲和舒淇谁更性感? 你 的 答 案 都重要 都要救 都厉害 都性感 所以Java中数据和算法 同 样 重 要 其实这个问题等价于,搬砖需不需要学物理. 如果只干搬砖砌墙的活,熟练掌握工具那也就够了.但是要想设计建筑的话,还是要学很多东西的. 程序=数据结构+算法 在Java中算法和数据

Java面向对象_包装类访问修饰符

在java中有一个设计的原则"一切皆对象",java中的基本数据类型就完全不符合这种设计思想,因为八种基本数据类型并不是引用数据类型,所以java中为了解决这样的问题,jdk1.5以后引入了八种基本数据类型的包装类. 八种包装类分为两大类型: Number:Integer.Short.Long.Double.Float.Byte都是Number的子类表示一个数字. Object:Character.Boolean都是Object的直接子类. 1 public class Test5 {

Java面向对象_对象内存分析—值传递和引用传递

对象内存分析,我一直学的比较模糊,今天抽空整理一下,希望能理清. 先说一下,内存分析从何而来,这对于我们这些刚接触java的人来说都比较模糊,就从new关键字说起吧. new关键字表示创建一个对象或者说是实例化对象或者说是申请内存空间,所有程序运行都需要内存来存储数据,这样内存的概念就出来了.举个例子说明:定义一个类Person,属性:char a;int sge;那么创建一个对象申请的内存空间就是所有属性所占字节之和,为6个字节. 详细理一下对象在内存中的结构: Person p=new Pe

Java面向对象_对象数组

今天学习了对象数组,写点东西总结一下.废话不多说,啥是对象数组呢? 对象数组的概念是这么讲的,对象数组就是数组里的每个元素都是类的对象,赋值时先定义对象,然后将对象直接赋给数组. 举个例子,使用对象数组实现多个Hero的管理 1 import java.util.Arrays; 2 import java.util.Scanner; 3 4 public class Test4 { 5 6 /** 7 * @param args 8 */ 9 public static void main(St

Java面向对象_常用类库api——日期操作类

Data类 类Data表示特定的瞬间,精确到毫秒,也就是程序运行时的当前时间 Data data=new Data();//实例化Data对象,表示当前时间 Calendar类 日历类,使用此类可以将时间精确到毫秒显示. //两种实例化方式 Calendar c=Calendar.getInstance();//Calendar类是抽象类,不能直接new Calendar c=new GregorianCalendar(); DateFormat类及子类SimpleDateFormat 例: 1

java面向对象_接口

java接口 interface,是一个抽象类型,是抽象方法的集合,接口通常以interface来申明.一个类通过继承接口的方式,从而来继承接口的抽象方法. 接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念.类描述对象的属性和方法.接口则包含类要实现的方法. 除非实现接口的类是抽象类,否则该类要定义接口中的所有方法. 接口与类相似点: 一个接口可以有多个方法. 接口文件保存在.java结尾的文件中,文件名使用接口名. 接口的字节码文件保存在.class结尾的文件中. 接口相应的字节

Java面向对象_常用类库api——对象比较器

概念:对两个或多个数据项进行比较,以确定他们是否相等,或确定他们之间的大小关系及排列顺序成为比较. 1.Comparable接口: 此接口强行对实现它的每个类的对象进行整体排序.这种排序被称为类的自然排序,类的compareTo方法被称为它的自然比较方法. 1 public class ComparableDemo { 2 3 /** 4 * @param args 5 */ 6 public static void main(String[] args) { 7 // TODO Auto-ge

Java面向对象_单例设计模式

单例设计模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点 1.构造方法私有化 2.声明一个本类对象 3.给外部提供一个静态方法获取对象实例 两种实现方式:饿汉式和懒汉式 何种情况下使用呢?当一个类中没有属性(对象的状态):该类作为工具类使用非常频繁: 好处:节省内存(因为不断创建对象会消耗内存) 1 public class Practice14 { 2 3 public static void main(String[] args) { 4 // TODO Auto-generate