实用数据结构LinkedList.ppt





《实用数据结构LinkedList.ppt》由会员分享,可在线阅读,更多相关《实用数据结构LinkedList.ppt(31页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、回顾数组数组ArraysArrays类类Arrays.sort()Arrays.binarySearch()Arrays.fill()Arrays.asList()ArrayListArrayList类类结构特点常用方法:size(),isEmpty(),contains(),indexOf(),toArray(),get(),set(),add(),addAll(),remove(),clear()1顺序表便于查找操作,而插入和删除元素时要大量移动元素。首先分析首先分析:插入元素时,线性表的逻辑结构逻辑结构发生什么变化发生什么变化?2(a1,ai-1,ai,an)改变为 (a1,ai-1,e
2、,ai,an)a1 a2 ai-1 ai ana1 a2 ai-1 ai ean,表的长度增加3插入算法时间复杂度分析:插入算法时间复杂度分析:考虑移动元素的平均情况考虑移动元素的平均情况插入位置插入位置需要移动的结点次数需要移动的结点次数1n2n-1n1n+10平均次数平均次数:(1+2+n-1+n)/(n+1)=n/2T(n)=O(n)4其次分析:删除元素时,线性表的逻辑结构发生什么变化?5(a1,ai-1,ai,ai+1,an)改变为 (a1,ai-1,ai+1,an)ai+1 an,表的长度减少a1 a2 ai-1 ai ai+1 ana1 a2 ai-1 6 删除算法时间复杂度分析:
3、删除算法时间复杂度分析:考虑移动元素的平均情况考虑移动元素的平均情况删除位置删除位置需要移动的结点次数需要移动的结点次数1n-12n-2n0平均次数平均次数:(0+1+n-11)/n=(n-1)/2T(n)=O(n)7课前检查创建一个类创建一个类Cat Cat 包含属性name,在构造方法中进行初始化 添加一个方法show(),用以打印name属性的值 创建一个类创建一个类CatTestCatTest,添加,添加mainmain方法,实现方法,实现 创建一个ArrayList,向其中添加几个Cat对象 遍历该集合,并且对每个Cat对象调用show()方法 8参考代码class Catpriva
4、te String name;public Cat(String name)this.name=name;public void show()System.out.println(name);public class CatTest public static void main(String args)/创建一个创建一个ArrayList,向其中添加几个,向其中添加几个Cat对象;对象;ArrayList list=new ArrayList();list.add(new Cat(mimi);list.add(new Cat(qiqi);list.add(new Cat(ding);/遍历该
5、集合,并且对每个遍历该集合,并且对每个Cat对象调用对象调用show()方法。方法。for(int i=0;ilist.size();i+)Cat c=(Cat)list.get(i);c.show();9掌握掌握ListList接口的另一个实现类:接口的另一个实现类:LinkedListLinkedList类类掌握由掌握由LinkedListLinkedList类构成的数据结构的特点(对比类构成的数据结构的特点(对比顺序表的存取特点)顺序表的存取特点)掌握掌握LinkedListLinkedList类的常用方法(对比类的常用方法(对比ArrayListArrayList类)类)本讲目标10
6、用一组地址任意地址任意的存储单元存放存放线性表中的数据元素。数据元素之间的逻辑关系是由结点中的指针域指示的。不要求物理地址相邻,访问时必须从头指针开始,顺序访问,不能随机访问。通常,使用有头结点的单链表。单链表单链表11以元素元素(数据元素的映象数据元素的映象)+指针指针(指示后继元素存储位置指示后继元素存储位置)=结点结点 (表示数据元素 或 数据元素的映象数据元素的映象)以“结点的序列结点的序列”表示线性表 称作链表链表12链表单向链表单向链表datanextdatanextdatanextnullhead节点13链表datanextdatanextdatanextnullhead节点插入
7、插入datanextdatanextdatanextdatanextnullhead节点删除删除14ai-1线性表的操作:插入在单链表中的实现:有序对有序对 改变为改变为 和和 eaiai-115线性表的操作:删除在单链表中的实现:有序对有序对 和和 改变为改变为 ai-1aiai+1ai-116链表循环链表循环链表datanextdatanextdatanexthead节点17链表双向循环链表双向循环链表datanextdatanextdatanexthead节点previouspreviousprevious18LinkedList类19LinkedList类LinkedListLinke
8、dList实现了实现了ListList接口,允许接口,允许nullnull元素。此外元素。此外LinkedListLinkedList提供额外的提供额外的getget,removeremove,insertinsert方法在方法在 LinkedListLinkedList的首部或尾部。这些操作使的首部或尾部。这些操作使LinkedListLinkedList可可被用作堆栈(被用作堆栈(stackstack),队列(),队列(queuequeue)或双向队列)或双向队列(dequedeque)。)。注意注意LinkedListLinkedList没有同步方法。如果多个线程同时访没有同步方法。如果
9、多个线程同时访问一个问一个ListList,则必须自己实现访问同步。一种解决方,则必须自己实现访问同步。一种解决方法是在创建法是在创建ListList时构造一个同步的时构造一个同步的ListList:List list=List list=Collections.synchronizedList(new Collections.synchronizedList(new LinkedList(.);LinkedList(.);20常用方法新增以下新方法:新增以下新方法:构造方法LinkedList()getFirst()和getLast()removeFirst()和removeLast()ad
10、dFirst()和addLast()与与ArrayListArrayList类中相同的方法类中相同的方法contains()size()add()remove()addAll()clear()get()set()indexOf()21List接口和LinkedList类开发一套小型的新闻管理系统,要求如下:开发一套小型的新闻管理系统,要求如下:可以添加头条新闻标题可以删除末条新闻标题存储方式如何选择?存储方式如何选择?元素个数不确定元素个数不确定使用集合类使用集合类需要在列表的头或尾添加、删除元素需要在列表的头或尾添加、删除元素22List接口和LinkedList类第一步,确定存储方式第一步
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实用 数据结构 LinkedList

限制150内