递增的整数序列链表的插入_程序员:数据结构——链表List、ArrayList、LinkedList...
抽象数据类型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...相关推荐
- 基本概念_程序员基本功——链表的基本概念
[程序员必须掌握数据结构: 数据结构中必讲链表: 所以,程序员必须掌握链表] 链表是数据元素的线性集合(Linear Collection),物理存储不连续.那么,这种设计的优点是什么?缺点又是什么? ...
- java 二分搜索获得大于目标数的第一位_程序员数据结构算法编程,二分查找搜索算法的原理与应用介绍!...
本文来讲一种搜索算法,即二分搜索算法,通常在面试时也会被问到. 我们先来看一个例子,在图书馆通常是根据查到的编号去找书,可以在书架上按顺序一本本地查找,也可以找到一本书不符合预期时,再跳过一大部分书再 ...
- 习题2.4 递增的整数序列链表的插入 (15 分)
习题2.4 递增的整数序列链表的插入 (15 分) 本题要求实现一个函数,在递增的整数序列链表(带头结点)中插入一个新整数,并保持该序列的有序性. 函数接口定义: List Insert( List ...
- 习题2.4 递增的整数序列链表的插入(15 分)浙大版《数据结构(第2版)》题目集...
习题2.4 递增的整数序列链表的插入(15 分) 本题要求实现一个函数,在递增的整数序列链表(带头结点)中插入一个新整数,并保持该序列的有序性. 函数接口定义: List Insert( List L ...
- c语言链表递增,[C语言][PTA][2019Fall] 6-28 递增的整数序列链表的插入 (15 point(s))
Post Views: 80 最后更新时间: 2021-04-02 20:16:17 () 声明 这是 拼题A(PTA)<中M2019秋C入门和进阶练习集>的习题.原题在 https:// ...
- 6-3 递增的整数序列链表的插入 (10 分)
** 6-3 递增的整数序列链表的插入 (10 分) ** 本题要求实现一个函数,在递增的整数序列链表(带头结点)中插入一个新整数,并保持该序列的有序性. 函数接口定义: List Insert( L ...
- 递增的整数序列链表的插入
习题2.4 递增的整数序列链表的插入 (15 分) 本题要求实现一个函数,在递增的整数序列链表(带头结点)中插入一个新整数,并保持该序列的有序性. 函数接口定义: List Insert( List ...
- PTA 函数题 递增的整数序列链表的插入(C语言)
本题要求实现一个函数,在递增的整数序列链表(带头结点)中插入一个新整数,并保持该序列的有序性. 函数接口定义: List Insert( List L, ElementType X ); 其中List ...
- 回文链表 牛客网 程序员面试金典 C++ Python
回文链表 牛客网 程序员面试金典 C++ Python 题目描述 请编写一个函数,检查链表是否为回文. 给定一个链表ListNode* pHead,请返回一个bool,代表链表是否为回文. 测试样例 ...
最新文章
- python学习--基础
- 使用微信的JS-SDK实现自定义分享到微信朋友圈
- pytorch .item_pytorch + SGD
- Hive存储过程实现-hpsql
- fixed在微信下的BUG
- $nextTick 源码
- 如何打通“鱼塘” ?腾讯启动“SaaS技术联盟” 共建技术中台
- 装饰画必备素材——装饰设计师,填充不用愁!
- Linux lsof命令使用小结
- 关于举办“2019 年全国传智杯 IT 技能大赛”的通知
- Python基础——isupper()方法和islower()方法
- smtp协议支持身份认证与不认证两种状态。
- 志在必得的。。。。失败。。。
- 4K视频剪辑、特效合成、调色完美硬件配置方案2018
- MyBatis 第二扇门
- JavaScript闭包研究
- 21-4-21 USB接口
- Vue3前端项目加载使用腾讯地图
- 3-OpenCL快速入门教程
- 软件测试可以做到多大岁数?
热门文章
- 设计行业专业素材导航网站|行业流行
- 如果你需要万圣节的图片素材来点缀你的节日活动,看这里就对了
- python数据参数_python 的参数总结
- Madagascar的自定义浮点型函数--对数函数
- CUDA和LAPACK混编的MakeFile文件
- Linux Kernel TCP/IP Stack|Linux网络硬核系列 | 图
- 单片机modbus rtu通讯_【原创】永宏PLC系列RS485通讯方式
- qlabel 显示图片后大小不变_图形编程:QT使用scrollarea显示图片的解决方案
- mysql 触发器 二进制_Mysql 二进制日志格式 对存储过程,函数,触发器,事件的记录方式的影响...
- rpm安装mysql