当前位置: 首页 > 后端技术 > PHP

我理解的数据结构(四)——链表(LinkedList)

时间:2023-03-30 01:30:42 PHP

我理解的数据结构(四)——链表(LinkedList)1.链表和数组最大的区别:链表list是一个真正动态的数据结构,数据存储在“节点”中优点:真正的动态,不需要处理固定容量的问题缺点:失去了随机访问(索引访问)能力数据存储在“节点”类节点{Ee;Nodenext;}二、链表添加元素示意图链表和数组在添加元素上有很大区别。在数组末尾添加元素很简单,而在链表头部添加元素很简单。原因是:数组维护者的大小,以及链表维护者的头部。原理如下:3.向链表添加元素的代码实现publicclassLinkedList{//nodeprivateclassNode{//存储元素publicEe;//下一个节点publicNodenext;publicNode(Ee,Nodenode){this.e=e;this.next=节点;}publicNode(Ee){this(e,null);}公共节点(){这(空,空);}@OverridepublicStringtoString(){returne.toString();}}私有节点头;私有整数大小;publicLinkedList(){head=null;大小=0;}publicintgetSize(){返回大小;}publicbooleanisEmpty(){返回大小==0;}//练习:在链表索引位置添加一个元素epublicvoidadd(Ee,intindex){if(index<0||index>size){thrownewIllegalArgumentException("indexisillegal");}if(index==0){//添加addFirst(e);}别的{//Insert//需要插入的前一个元素Nodeprev=head;for(inti=0;i{//节点privateclassNode{//存储元素//下一个节点publicNodenext;publicNode(Ee,节点节点){this.e=e;this.next=节点;}publicNode(Ee){this(e,null);}公共节点(){这(空,空);}@OverridepublicStringtoString(){returne.toString();}}//虚拟头节点privateNodedummyHead;私有整数大小;publicLinkedList(){//一个空链表也有一个dummyHeaddummyHead=newNode(null,null);大小=0;}publicintgetSize(){返回大小;}publicbooleanisEmpty(){返回大小==0;}//练习:在链表的索引位置添加一个元素epublicvoidadd(Ee,intindex){if(index<0||index>size){thrownewIllegalArgumentException("indexisillegal");}//上一个需要插入的元素Nodeprev=dummyHead;for(inti=0;isize){thrownewIllegalArgumentException("设置失败,索引不合法");}节点cur=dummyHead.next;for(inti=0;isize){thrownewIllegalArgumentException("getfailed,indexisillegal");}节点cur=dummyHead.next;for(inti=0;i");}res.append("NULL");returnres.toString();}6.链表的删除操作//练习:删除索引位置的元素publicEremove(intindex){if(index<0||index>size){thrownewIllegalArgumentException("移除失败,索引不合法");}//待删除节点的前一个节点Nodeprev=dummyHead;for(inti=0;i