抽象数据类型ADT

  • 是带有一组操作的一些对象的集合

一种特别的抽象类型——表ADT

什么是一个表呢?

最简单的一个整数表 -> 由一群整数构成的一个数组,可以看做是一张表

//表的简单数组实现

int[] arr = new int[10];

...

//对一个表的扩容

int[] newArr = new int[arr.length*2];

for(int i=0;i

newArr[i] = arr[i];

}

arr =newArr;

数组的实现是线性执行的,对其中的查找操作也是常数时间,但是插入和删除却潜藏着昂贵的开销。两种情况最坏的情况都是O(N)

简单链表

于是为了避免插入和删除的开销就有了,链表的出现。链表是由一个个节点组成的,并且不限制需要存储在一段连续的内存中。

节点

每一个节点均含有一个表元素、一个包含了后继节点的链Link。

//链表节点

LinkNode class{

Object var;

LinkNode next;

}

对于链表中节点的删除与插入,只需要常数时间。

首先找到要删除的节点位置或者要插入的节点位置

删除 该节点的前一个节点,指向该节点的后继节点就可以了

插入 找到插入节点的前一个节点,将前一个节点的后继节点用该节点指向,将前一个节点指向该节点

双链表

对于单链表的不足之处在于,对尾节点的删除,需要先找到最后节点的项,把他改为next链改为null,然后再更新持有最后节点的链。但是在经典链表中,每个节点均存储的是下一个节点,并不提供最后一个节点的前驱节点的任何信息。

单链表的删除需要靠辅助节点,而双向链表则可以直接删除

对于此,就想到了双向链表,让每一个节点持有一个指向它在表中的前驱节点的链。

JAVA中 Collections API中的表

集合的概念在java中用Collection接口来抽象,它存储一组类型相同的对象

//源码参考

public interface Collection extends Iterable {

int size();

boolean isEmpty();

boolean contains(Object o);

Iterator iterator(); //该方法继承于Iterable接口内的Iterator方法

boolean add(E e);

boolean remove(Object o);

}

Collection接口对Iterator接口进行了扩展,实现Iterator接口中那些类拥有增强的for循环。

//Iterator接口

public interface Iterator {

boolean hasNext();

E next();

default void remove() {

throw new UnsupportedOperationException("remove");

}

default void forEachRemaining(Consumer super E> action) {

Objects.requireNonNull(action);

while (hasNext())

action.accept(next());

}

}

List接口、ArrayList类、LinkedList类

List接口 既是表的抽象,他继承了Collection

public interface List extends Collection {

int size();

boolean isEmpty();

boolean contains(Object o);

Iterator iterator();

Object[] toArray();

E get(int index);

E set(int index, E element);

void add(int index, E element);

E remove(int index);

/ **

*从列表中的指定位置开始,以正确的

*顺序返回列表中元素的列表迭代器。

*指定的索引表示首次调用{@link ListIterator#next next}将返回的第一个元素。

*初次调用{@link ListIterator#previous previous}将

*返回具有指定索引减一的元素。

* * @param index从列表迭代器返回的第一个元素的索引(通过调用{@link ListIterator#next next})

* @在此列表中的元素上返回列表迭代器(按适当的顺序) ,从列表中的指定位置开始

* @throws IndexOutOfBoundsException如果索引超出范围

*({@code index <0 || index> size()})* /

ListIterator listIterator(int index);

ArrayList和LinkedList是对List的两种实现

ArrayList 单链表

  • 是一种可增长的数组实现
  • 优点在于,对get和set的调用花费常数时间
  • 缺点是add和remove的代价昂贵

LinkedList 双链表

  • 是一种双链表的实现
  • 优点在于,add和remove的开销小
  • 并且提供了addFirst、removeFirst、addLast、removeLast、getFirst、getLast等方法
  • 缺点则是他不容易进行索引,对get的调用则是昂贵的

原文链接:https://blog.csdn.net/qq_34691097/article/details/103097013

递增的整数序列链表的插入_程序员:数据结构——链表List、ArrayList、LinkedList...相关推荐

  1. 基本概念_程序员基本功——链表的基本概念

    [程序员必须掌握数据结构: 数据结构中必讲链表: 所以,程序员必须掌握链表] 链表是数据元素的线性集合(Linear Collection),物理存储不连续.那么,这种设计的优点是什么?缺点又是什么? ...

  2. java 二分搜索获得大于目标数的第一位_程序员数据结构算法编程,二分查找搜索算法的原理与应用介绍!...

    本文来讲一种搜索算法,即二分搜索算法,通常在面试时也会被问到. 我们先来看一个例子,在图书馆通常是根据查到的编号去找书,可以在书架上按顺序一本本地查找,也可以找到一本书不符合预期时,再跳过一大部分书再 ...

  3. 习题2.4 递增的整数序列链表的插入 (15 分)

    习题2.4 递增的整数序列链表的插入 (15 分) 本题要求实现一个函数,在递增的整数序列链表(带头结点)中插入一个新整数,并保持该序列的有序性. 函数接口定义: List Insert( List ...

  4. 习题2.4 递增的整数序列链表的插入(15 分)浙大版《数据结构(第2版)》题目集...

    习题2.4 递增的整数序列链表的插入(15 分) 本题要求实现一个函数,在递增的整数序列链表(带头结点)中插入一个新整数,并保持该序列的有序性. 函数接口定义: List Insert( List L ...

  5. c语言链表递增,[C语言][PTA][2019Fall] 6-28 递增的整数序列链表的插入 (15 point(s))

    Post Views: 80 最后更新时间: 2021-04-02 20:16:17 () 声明 这是 拼题A(PTA)<中M2019秋C入门和进阶练习集>的习题.原题在 https:// ...

  6. 6-3 递增的整数序列链表的插入 (10 分)

    ** 6-3 递增的整数序列链表的插入 (10 分) ** 本题要求实现一个函数,在递增的整数序列链表(带头结点)中插入一个新整数,并保持该序列的有序性. 函数接口定义: List Insert( L ...

  7. 递增的整数序列链表的插入

    习题2.4 递增的整数序列链表的插入 (15 分) 本题要求实现一个函数,在递增的整数序列链表(带头结点)中插入一个新整数,并保持该序列的有序性. 函数接口定义: List Insert( List ...

  8. PTA 函数题 递增的整数序列链表的插入(C语言)

    本题要求实现一个函数,在递增的整数序列链表(带头结点)中插入一个新整数,并保持该序列的有序性. 函数接口定义: List Insert( List L, ElementType X ); 其中List ...

  9. 回文链表 牛客网 程序员面试金典 C++ Python

    回文链表 牛客网 程序员面试金典  C++ Python 题目描述 请编写一个函数,检查链表是否为回文. 给定一个链表ListNode* pHead,请返回一个bool,代表链表是否为回文. 测试样例 ...

最新文章

  1. python学习--基础
  2. 使用微信的JS-SDK实现自定义分享到微信朋友圈
  3. pytorch .item_pytorch + SGD
  4. Hive存储过程实现-hpsql
  5. fixed在微信下的BUG
  6. $nextTick 源码
  7. 如何打通“鱼塘” ?腾讯启动“SaaS技术联盟” 共建技术中台
  8. 装饰画必备素材——装饰设计师,填充不用愁!
  9. Linux lsof命令使用小结
  10. 关于举办“2019 年全国传智杯 IT 技能大赛”的通知
  11. Python基础——isupper()方法和islower()方法
  12. smtp协议支持身份认证与不认证两种状态。
  13. 志在必得的。。。。失败。。。
  14. 4K视频剪辑、特效合成、调色完美硬件配置方案2018
  15. MyBatis 第二扇门
  16. JavaScript闭包研究
  17. 21-4-21 USB接口
  18. Vue3前端项目加载使用腾讯地图
  19. 3-OpenCL快速入门教程
  20. 软件测试可以做到多大岁数?

热门文章

  1. 设计行业专业素材导航网站|行业流行
  2. 如果你需要万圣节的图片素材来点缀你的节日活动,看这里就对了
  3. python数据参数_python 的参数总结
  4. Madagascar的自定义浮点型函数--对数函数
  5. CUDA和LAPACK混编的MakeFile文件
  6. Linux Kernel TCP/IP Stack|Linux网络硬核系列 | 图
  7. 单片机modbus rtu通讯_【原创】永宏PLC系列RS485通讯方式
  8. qlabel 显示图片后大小不变_图形编程:QT使用scrollarea显示图片的解决方案
  9. mysql 触发器 二进制_Mysql 二进制日志格式 对存储过程,函数,触发器,事件的记录方式的影响...
  10. rpm安装mysql