当前位置:文档之家› 游戏开发中常用数据结构和算法

游戏开发中常用数据结构和算法


节点的添加 这里实现的是一个将链表自动增长的过程.
首先,找到链表的尾部.
然后,将新的节点添加到链表的尾部.
第018课 算法及数据结构
3 链表
3.3 MyLink
节点的添加 public void addNode(int key,int value){ if(head == null){ head = new Node(key,value); }else{ Node current = head; while(current.next != null){ current = current.next; } current.next = new Node(key,value); } } 链表为空,直接 将节点添加到 head中 尾部的查找
第018课 算法及数据结构
• 小结:
链表的创建 节点的添加 节点的查找 节点的删除 节点的插入
第018课 算法及数据结构 • 小测验:
1、简述链表的创建及插入过程. 2、简述链表的查找及删除过程. 3、简述链表的插入过程
第018课 算法及数据结构 • 课后作业:
实现有序链表的插入操作.
key 键值,数据是依靠键值 来查询的 value 数据,实际要存储的 内容 next 下一个节点的引用.
第018课 算法及数据结构
3 链表
3.3 MyLink
MyLink类,链表类.除了要包含Node,还要有一个头节点.
private Node head;
head描述了当前链表的第一个元素的引用,当一个链表拥有了头节 点,也就意味着拥有了全部的链表.
第018课 算法及数据结构
3 链表
3.3 MyLink
节点的插入
public boolean insertNode(Node newNode,int index){ Node preNode = head; if(preNode == null || index == 0){ newNode.next = preNode; preNode = newNode; return true; }else{ while(preNode.next != null && index-->0){ 节点位置的查找 preNode = preNode.next; } newNode.next = preNode.next; preNode.next = newNode; 节点的插入 return true; } }
第018课 算法及数据结构
3 链表
3.3 MyLink
public boolean delNode(int key){
Node current = head; Node parent; if(head == null){ return false; }else if(head.key == key){ head = head.next; 头节点比较特殊,需要特殊处理 确定链表不为空,否则删除失败
return true;
}else{
第018课 算法及数据结构
3 链表
3.3 MyLink
current = head.next; parent = head; while(current.key != key){ current = current.next; parent = parent.next; } if(current != null){ parent.next = current.next; return true; }else return false; } }
第018课 算法及数据结构
3 链表
3.1 链结点(Link)
下面是一个Link类定义的一 部分。它包含了一些数据和对 下一个链结点的引用: 一个int和double类型的数据, 或者inventoryItem类型的li。
class Link{ public int iData; public double dData; public Link next; } class Link{ public inventoryItem iI; public Link next; }
一个对下一个Link的引用next
第018课 算法及数据结构
3 链表
3.2 依靠关系查询
查询的过程不同
在数组中,我们使用的是位置进行查询.
在链表中,我们使用的是节点之间的关系进行查询
第018课 算法及数据结构
3 链表
3.3 MyLink
下面是Node类,节点类,它描述了每一个节点所要保存的内容. class Node{ private int key; private int value; private Node next; public Node(int key,int value){ this.key = key; this.value = value; next = null; } }
3 链表
3.3 MyLink
节点的插入 首先,找到待插入位置的前继节点parent.
然后,将待插入节点current.next指向parent.next.
最后,将parent.next指向插入节点current parent … key value current key value key value …
第018课 算法及数据结构
3 链表
3.3 MyLink
节点的删除 节点删除过程非常简单,只需要将其前继节点的next指向待删 除节点的next就可以. 除非有必要,需要对删除节点作相应处理,否则等待垃圾回收处 理即可 parent … current key value key value …
key value
新节点的添加
第018课 算法及数据结构
3 链表
3.3 MyLink
节点的查询
链表的查 询只能从前 向后依次进 行,无法使用 随机搜索.
private Node getNode(int key){ Node current = head; if(head.key == key){ return head; }else{ current = head.next; while(current.key != key){ current = current.next; } return current; } }
第018课 算法及数据结构
3 链表
3.3 MyLink
节点的删除 节点的删除包括两个方面的内容 待删除节点及其前继节点的查找 将待删除节点删除
第018课 算法及数据结构
3 链表
3.3 MyLink
节点的删除 Node current; Node parent; 分别来描述当前正在查询的节点及其父节点. 一旦当前节点与待删除节点相同则确认找到删除节点并删除之. 否则删除失败
第018课 算法及数据结构
3 链表
3.3 MyLink
链表的初始化 当链表创建之初,仅仅拥有一个空的head就可以了.其内容是逐 渐添加进去的
public MyLine() { head = null; }
此时,你已经拥有了一个链表,只是它是一个空链表.
第018课 算法及数据结构
3 链表
3.3 MyLink
深入Java编程
专业教程 理论讲解部分
Ver3.1
第018课 算法及数据结构 • 概述:

链表的使用
• 重点:

链表的使用
• 难点:

链表的使用
第018课 算法及数据结构
3 链表
数组的缺陷:
插入,删除的效率非常低
数组大小不可变,无法实现动态生成.
第018课 算法及数据结构
3 链表
链表的优势: 解决了数组无法动态增长及减小的问题.
查询待删除节点及பைடு நூலகம்其前继节点
如果查到待删除节 点则删除.否则删 除失败
第018课 算法及数据结构
3 链表
3.3 MyLink
节点的插入
插入通常使用两种插入方式:按照位置插入,按照顺序插入. 其思想不变,都是按照某种规则,找到待插入位置,然后进行插入操作. 下面介绍插入时的操作
第018课 算法及数据结构
插入删除的效率非常高 导致用途非常广泛
第018课 算法及数据结构
3 链表
3.1 链结点(Link)
在链表中,每个数据项都被包含在“链结点”(Link)中。一个链 结点是某个类的对象,这个类可以叫做Link。每个Link对象中都 包含一个对下一个链结点引用的字段(通常叫做next)。但是链表 本身的对象中有一个字段指向对第一个链结点的引用。
相关主题