数据结构之线性表
线性表
线性表是按顺序存储数据时常用的一种数据结构,线性表的常用操作:
- 从线性表中获取某个元素(get)
- 从线性表中添加某个元素(add)
- 从线性表中删除某个元素(remove)
- 从线性表中修改某个元素(set)
- 从线性表中获取元素的个数(size)
- 确定线性表是否为空(isEmpty)
实现数组有两种方式。一种是使用数组存储线性表的元素,一种是使用链式结构
数组线性表
数组是动态创建的。如果元素的个数超过了数组的容量,就创建一个更大的新数组,并将当前数组中的元素复制到新数组中。
使用数组的优缺点:我们能够快速的获取某个元素,还能通过数组的索引很容易修改某个元素。在做删除和添加操作中,会影响其它元素的位置的变动,所以效率比较低。
链表
链表是由结点组成,每个结点都是动态创建的,用来存储一个元素。所有结点链成一个线性表
结点的特点:结点中必须有个引用指向它的下一个结点,尾结点的引用指向的下一个结点为空。
链表的优缺点:链表的添加和删除只需要改变这个元素相邻的上下两个结点的引用,效率很高。获取和修改某个元素则需要遍历链表,效率比较低。
如果链表的结点只有一个引用指向下一个结点,因此该结点只能从头部向尾部遍历,则称单链表。
如果链表的尾部结点的下一个结点指向头结点,则称循环单列表
如果链表包含两个引用,一个指向下一个结点,一个指向上一个结点,头结点指向上一个结点为空,尾结点指向的下一个结点为空。则称双向链表
如果链表包含 如果链表包含两个引用,一个指向下一个结点,一个指向上一个结点,头结点指向上一个结点为尾结点,尾结点指向的下一个结点为头结点。则称循环双向列表。
栈和队列
栈可以看做是一种特殊的线性表,访问、插入和删除其中的元素只能在栈尾(栈顶)进行。由于栈只允许在栈顶进行插入和删除操作,所有用数组线性表来实现比链表效率更高。
队列表示一个等待的线性表,元素只能从队列的末端插入,从开始端访问和删除。使用链表效率比较高。
优先队列:在优先队列中元素被被赋予优先级,优先队列具有最高进先出的特征。