java链表和递归算法学习

来源:互联网 发布:电路接线图软件 编辑:程序博客网 时间:2024/06/07 05:25
数据结结构之链表



链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会

按线性的顺序存储数据,而是在每一个节点里存下一个节点的指针(Pointer)

链表与数组区别

链表不适合遍历,但是适合灵活的(插入,删除等)操作






递归算法:直接或间接调用自身的算法


注:递归一定要有出口,递归过多会造成栈内存溢出(当N很大时)



public class test_13{public static void main(String[] args){System.out.println(jieceng(5));System.out.println(jieceng_dg(5));}//求阶层public static int jieceng(int num){int sum = num;int i = num -1; do { sum = sum*i; i--; }while(i>1); return sum;}// 递归算法 ,节俭了代码// 递归一定要有出口,递归过多会造成栈内存溢出public static int jieceng_dg(int num){if (num==1)return 1;return num*jieceng_dg(num-1);}}


完整链表代码:

// 链表数据结构// 适合用于频繁进行添加、插入、删除操作public class test_13_lianbiao{public static void main(String[] args){  NodeManager nm = new NodeManager();  nm.addNode("1");  nm.addNode("2");  nm.addNode("3");  nm.addNode("4");  nm.addNode("5");  nm.addNode("6");  nm.printNode();  nm.delNode("4");  nm.printNode();}}//链表的节点管理类class NodeManager{private Node head;//头节点(根节点)public void addNode(String name){if (head==null){head = new Node(name);}else{head.add(name);}}public void delNode(String name){if (head.getName().equals(name)){head=head.next;}else{head.delet(name);}}public void printNode(){if (head!=null){System.out.print(head.getName()+"->");head.print();System.out.println();}}// 表示每个节点对象class Node {private String name;private Node next;// 表示当前结点的下一个节点public String getName(){return name;}public Node(String name){this.name=name;}public void add(String name)//添加节点{if(this.next==null){this.next = new Node(name);}else{this.next.add(name);//体现出递归调用}}public void delet(String name)//删除节点{if (this.next!=null){if (this.next.name.equals(name)){this.next=this.next.next;}else{this.next.delet(name);}}}public void print()// 打印所有节点{if (this.next!=null){System.out.print(this.next.getName()+"->");this.next.print();}}}}

跑出结果:



0 0
原创粉丝点击