超级赛罗格斗,bi,艺龙-竞技宝_竞技宝官网_竞技宝娱乐

admin 1周前 ( 07-11 21:24 ) 0条评论
摘要: 对一名程序猿来讲,使用哪种语言来开发程序不是最重要的,数据结构和算法才是核心,是程序猿的内功,最终决定你的技术上限。...

对一名程序猿来讲,运用哪种言语来开发程序不是最重要的,数据结构和算法才是中心,是程序猿的内功,终究决议你的技能上限。假如你想进步自己的水平,进步中心竞争力,数据结构和算法是必需求学的,今日就带咱们一起来学习链表的概念,并用 Java 言语完成一个链表的结构。

什么是链表?

链表是一种最常见的数据结构,其内部数据呈线性摆放,归于线性表结构,什么是线性表?表中的数据按次序顺次摆放,就像用一条线把数据串联起超级赛罗搏斗,bi,艺龙-竞技宝_竞技宝官网_竞技宝文娱来相同。



链表便是这种排布方法,特色是增加数据和删去数据速度快,可是查询数据会比较耗时,这是由于链表在内存中的存储结构形成的。

这儿咱们能够将数组与链表进行比照,数组咱们应该都很了解,学过 Java 的都会用,可是你真的了解它在内存中的存储结构吗?数组的特色是查询数据很快,增加数据和删去数据功率低,这一特征与链表恰好相反,数组的缺点正是链表的优势,数组的优势则是链表的缺点,所以二者比照着来记,作用会更好。

来说说为什么数组和链表的超级赛罗搏斗,bi,艺龙-竞技宝_竞技宝官网_竞技宝文娱特色恰好相反,首要来看看二者在内存中的存储结构。

数组和链表都是线性表结构,数组在内存中是一串接连的内存空间,比方界说一个 int 类型数金诺瑞组,int[] array = new int[6],计算机会为 array 分配一块接连的空间,如下图所示。


1000-1003 这段空间用来存储数组中的第一个元素 array[0],1004-1007 的空间用来存储 array[1],以此类推数组中的每个元素都对应一块巨细为 4 byte 的空间,这种结构就决议了数组查询数据速度很快,只需求知道首地址(在栈内存中记载的便是数组的首地址,能够直接获取),再结合寻址公式就能够很快找到对应元素的地址,然后取出数据。

数组的寻址公式:i_address = first_address + data_size*i

带入上述事例中,比方要找到数组中第 3 个元素,也便是下标为 2 ,该元素的首地址即 2_address = 1000 + 蚊子静2*4 = 1008,计算机只需求履行一个简略的数学运算就能够找到元素的首地址,从而取出对应的值,关于计算机来讲,夜舞男简略数学运算的耗时简直能够忽略不计,所以数组查询数据速度非常快。

也正是由于这种结构导致数组增加和删去数据功率很低,由于这两种操作不仅仅是在数组中增加或许移除一个元素那么简略,一起还需求移动其他已存在的元素。

数组中各个元素的内存地址都是接连,不间断的,删去某个元素之后需求确保数组仍然是接连的,所以就需求移动数据,比方要删去 array[2],删去之后需求顺次将 array[3]、array[4]、array[5] 向前移动一位,如下图所示。


同理,假如此刻将 0 增加到数组中的第 2 位,即 array[1] 的方位,相同需求先将 array[1] 及其之后的各个元素顺次向后移动 1 位,给新数据腾出方位才干增加,如下图所示。


由于要移动元素,所以无论是增加数据仍是删去数据,功率都不高。

搞清楚数组的存储结构之后,咱们再来看看链表的存储结构,在内存中,链表中的数据是涣散的,无须存储在一块接连的内存空间中,如下图所示。


链表中存储了 3 个元素分别是 1、2、3,每个元素都有一个指针,指向下一个元素的内存地址,1 的指针就指向 2 的内存地址 1008,2 的指针就指向 3 的内存地址 1020,顺次类推。

不同元素之间的物理空间距离也是不确定的,所以贾冰和李丽丽什么关系这样的结构就无法经过一个固定的公式来求出某个元素的内存地址,只能从首元素开端顺次向后查找,直到找到方针元素。假如方针元素坐落链表的最终一位,则需求遍历整个链表才干找到它,功率很低。

相同,正是由于这样的结构,使得链表增加和删去元素功率很高,无须移动其他已存在的元素,只需求修正元素指针即可。比方,删去 2,则只需求将 1 的指针指向 3 即可,如下图所示。


增加元素也是相同,要在 2 和 3 之间增加元素 0 ,只需求随机分配一块空间存储 0,然后将 2 的指针指向 0,0 的指针指向 3 即可,如下图所示。


所以在链表中,无论是增加仍是删去元素,都只需求修正相关节点的指针即可,功率很高。

搞清楚链表的结构之后,咱们运用 Java 言语来完成一个单链表的结构。

package com.southwind.link;
public class SingleLinkedList {
public int size;
public Node head;
/**
* 链表头部增加元素
* @param obj
* @return
*/
public Node addHead(Object obj){
Node newNode = new Node(obj);
if(size == 0){
this.head = newNode;
}else{
newNode.next = head;
head = newNode;
}
size创圣のアクエリオン++;
ret还珠之子靖阿哥urn newNode;
}
/**
* 在指定方位刺进元刘军搜索引擎优化素
* @return
*/
public Node insert(int index,Object obj){
if(index >= s超级赛罗搏斗,bi,艺龙-竞技宝_竞技宝官网_竞技宝文娱ize){
return null;
}
Node newNode = new Node(obj);
if(index == 0){
newNode.next = head;
head = newNode;
}else{
Node targ性动作et = head;
Node previo农家之富有贤妻us超级赛罗搏斗,bi,艺龙-竞技宝_竞技宝官网_竞技宝文娱 = head;
int pos = 0;
while(pos != index){
previous = target;
target = tar牛志美get.next;
pos++;
}
previous.next = newNode;
newNode.next = target;
}
size++;
return newNode;
}
/**
* 超级赛罗搏斗,bi,艺龙-竞技宝_竞技宝官网_竞技宝文娱删去链表头部元素
* @return
*/
public Node removeHead(){
if(size > 0){横梁式货架
Node node = head;
head = head.next;
size--;
return node;
}else{
return null;
}
}
/**
* 删去指定方位元素
* @return
*/
public Node remove(int index){
if(index >= size){
return null;
}
Node result = head;
if(index == 0){
head = head.next;
}else{
Node target = head;
Node previous = head;
int pos = 0;
while(pos != index){
previous = target;
target = target.next;
pos++;
}
previous.next = target.next;
result =任海涛卷四 target;
}
size-会计科目背诵顺口溜-;
return result;
}
/**
* 删去指定元素
* @return
*/
public Node removeNode(Object obj){
Node target = head;
Nk1610ode previous = head;
if(obj.equals(target.data)){
head = head.next;
si丧命情网ze--;
}else{
while(target.next!=null){
if(obj.equals(target.next.data)){
previous = target;
target = target.next;
size--;
break;
}else{
target = target.next;
previous = pr超级赛罗搏斗,bi,艺龙-竞技宝_竞技宝官网_竞技宝文娱evious.next;
}
}
previous.next = target.next;
}
return t西安黑舞厅arget;
}
/**
* 回来指定元素
* @return
*/
public Node findNode(Object obj){
Node target = head;
while(target.next!=null){
if(obj.equals(target.data)){
return target;
}else{
target = target.next;
}
}
return null;
}
/**
* 输出链表元素
*/
public void show(){
if(size > 0){
Node node = head;
int length = size;
System.out.print("[");
while(length > 0){
if(length == 1){
System.out.print(node.data);
}else{
System.out.print(node.data+",");
}
node = node.next;
length--;
}
System.out.println("]");
}else{
System.out.println("[]");
}
}
}


对上述代码进行测验。

package com.southwind.link;
public class Test {
public static void main(String[] args) {
SingleLinkedList linkedList = new SingleLinkedList();
linkedList.addHead(6);
linkedList.addHead(5);
linkedList.addHead(4);
linkedList.addHead(3);
linkedList.addHead(2);
linkedList.addHead(1);
linkedList.show();
System.out.println("*********在index=3处增加元素11*********");
linkedList.insert(3,11);
linkedList.show();
System.out.println("*********在index=7处增加元素33*********");
linkedList.insert(7,33);
linkedList.show();
System.out.println("*********在index=6处增加元素22*********");
linkedList.insert(6,22);
linkedList.show();
System.out.println("*****第二书包网紫色巨硕****删去头部元素*********");
linkedList.removeHead();
linkedList.show();
System.out.println("*********删去index=7处元素*********");
linkedList.remove(7);
linkedList.show();
System.out.println("*********删去index=6处元素*********");
linkedList.remove(6);
linkedList.show();
System.out.println("*********删去index=3处元素*********");
linkedList.remove(3);
linkedList.show();
Sg8015ystem.out.println("*********删去指定元素3*********");
linkedList.removeNode(3);
linkedList.show();
System.out.println("*********删去指定虹桥书吧元素33*********");
linkedList.removeNode(33);
linkedList.show();
System.out.println("*********回来指定元素2*********");
System.out.println(linkedList.findNode(2));
System.out.println("*********回来指定元素22*********");
System.out.println(linkedList.findNode(22));
}
}


成果如下图所示。


重视微信大众号「Java大超级赛罗搏斗,bi,艺龙-竞技宝_竞技宝官网_竞技宝文娱联盟」,重视即可获取海量学习干货,一起还有不定期送书,键盘,鼠标等粉丝福利。

赶快来重视一波,海量资源拿到手软。

文章版权及转载声明:

作者:admin本文地址:http://xtfeed.cn/articles/1514.html发布于 1周前 ( 07-11 21:24 )
文章转载或复制请以超链接形式并注明出处竞技宝_竞技宝官网_竞技宝娱乐