Java数据结构链表.ppt
《Java数据结构链表.ppt》由会员分享,可在线阅读,更多相关《Java数据结构链表.ppt(33页珍藏版)》请在第壹文秘上搜索。
1、Java数据结构链表学习目标链表的概念单链表双链表数组的缺点数组是很有用的数据结构,但是有两个局限:若改变数据的大小就需要创建一个新数组并从原数组中拷贝所有数据至新数组;数组数据在内存中依次连续存储,向数组中插入一项要移动数组中其他数据。链表的概念链表这种数据结构是使用指针(即引用)将存储数据元素的那些单元依次串联在一起。这种方法避免了在数组中用连续的单元存储元素的缺点,因而在插入或者删除时不再需要移动元素来腾出空间或填补空缺。需要作出的改变就是在每个单元中设置指针来表示表中元素之间的逻辑关系(前还是后)。因此每个单元至少有两个域,一个用于数据元素的存储,一个用于指向其他单元的指针。这种具有一
2、个数据域和多个指针域的存储单元称为节点(Node)。链表的图示 数据 指针node(节点)节点本身就是对象节点的设计节点接口public interface Node /获取节点数据域public Object getData();/设置节点数据域public void setData(Object obj);单链表单链表的每个节点只有一个指向表中下一个节点的指针。第一个节点称为首节点,最后一个称为尾节点。尾节点的特征是next引用为空(null)。a0nextnodenodea1next单链表节点的设计除了需要实现Node接口定义的获取和设置数据域的两个方法以外,还需要提供对指向下一节点的指
3、针的操作方法。为此提供两个方法,getNext()和setNext(Node node)。public class SinglyLinkedNode implements Node private Object obj;private SinglyLinkedNode next;单链表节点的设计(续)public SinglyLinkedNode() this(null, null);public SinglyLinkedNode(Object obj, SinglyLinkedNode next) this.obj = obj;this.next = next;单链表节点的设计(续)publ
4、ic SinglyLinkedNode getNext() return next;public void setNext(SinglyLinkedNode next) this.next = next;public Object getData() return obj;public void setData(Object obj) this. obj = obj;单链表的设计单链表的一个重要特性是只能通过前驱节点找到后续节点,而无法从后续节点找到前驱节点。因此在单链表中进行查找操作,只能从链表的首节点开始,通过每个节点的next引用来依次访问链表中的每个节点以完成相应的查找操作。为使程序更
5、简洁,通常在单链表的最前面添加一个哑元节点,也称为头节点(Head),注意,有别于真正的首节点,头节点中不存储任何实质的数据对象,其next通常指向0位的元素。单链表的设计(续)通用的单链表类的初始化public class SinglyLinkedList /头节点private SinglyLinkedNode head;/元素个数private int size;public SinglyLinkedList() head = new SinglyLinkedNode();/为什么新建了SinglyLinkedNode类的对象,size还设为0?size = 0;单链表的设计(续)通用的
6、单链表类的查找方法给定索引,返回节点public Object get(int index) throws IndexOutOfBoundsException if (size()=0) /添加size()方法return null; else if (index = size() throw new IndexOutOfBoundsException(); else SinglyLinkedNode node = head.getNext();for (; index 0; index-) node = node.getNext();return node.getData();单链表的设计(
7、续)通用的单链表类的查找方法给定对象,返回索引public int indexOf(Object obj)SinglyLinkedNode node = head.getNext();int index = 0;while(node!=null)if(node.getData().equals(obj)return index;elseindex+;node = node.getNext();return -1;/如果没找到,返回-1练习请设计并实现操作单链表的方法:判断单链表结构中是否包含指定对象public boolean contains(Object obj)单链表的设计(续)对于任何
8、基于序号的插入、删除,以及任何基于数据元素所在节点的前面或后面的插入、删除,在带头节点的单链表中均可转化为在某个特定节点之后完成节点的插入、删除,而不用考虑插入、删除是在链表的首部、中间还是尾部等不同情况。练习请设计并实现操作单链表的方法:将指定数据元素插入到链表尾部public void add(Object o)将指定数据元素插入到链表中指定位置public void add(int index,Object o)删除链表中指定位置的数据元素public boolean remove(int index)删除链表中第一次出现的指定数据元素public boolean remove(Obje
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 数据结构