[数据结构] 常用数据结构

数据结构

数组

是一种线性的数据结构,可以按照下标访问与更新,存储按照先后顺序进行,内存中也按照这个顺序存放。

初始化

int[] ids = new int[] {xxx,xxx,xxx}
int ids [] = {xxx,xxx,xxx};

长度指定(必须二选一)

new String [2] //动态初始化
new String[] {"xx","xx"} // 静态初始化

多维数组

int arr [][] = {{xx, xx}, {xx, xx}, {xx, xx}}
// 可以省列数
int arr [][] = new int [3][]

Arrays类可以对数组进行操作

.fill() 填充数组 .sort()对数组排序 .equals() 比较数组 .binarySearch() 查找数组

链表

常见: 单链表,双向链表,循环链表

没有空间限制,但是数据的查找效率低

  • [1.反转一个单链表。]

    思路:

    (1)通过辅助栈来完成

    (2)定义一个新链表,然后使用头插法,依次遍历插入。

  • [2.返回中间节点,有2个返回第二个中间的节点]

  • [3.输入一个链表,输出该链表中倒数第k个结点。]

  • [4.合并两个有序链表。]

  • [5.以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前]

  • [6.在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。]

  • [7.链表的回文结构]

  • [8.给定一个链表,判断链表中是否有环。]

    思路:

    (1)哈希表

    (2) 快慢指针,如果有环那么两个指针一定会相遇。

  • [9. 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null]

  • [10. 输入两个链表,找出它们的第一个公共结点]

  • LRU缓存

    固定存储空间,需要进行删除的时候将最少访问的数据进行删除。

    思路:

    (1) 通过 HashMap + 双向链表 实现

    (2) 通过 继承LinkedHashMap进行实现(只需重写 removeEldest)

Java 实现 : LinkedList类

  • LinkedList 实现 List 接口,能进行列表的相关操作。
  • LinkedList 实现了 Queue 接口,可作为队列使用。
  • LinkedList 实现 Deque 接口,即能将LinkedList当作双端队列使用。

Collection接口提供 : add remove

addremove是一对,源自Collection

offerpoll是一对,源自Queue

pushpop是一对,源自Deque,其本质是栈(Stack类由于某些历史原因,官方已不建议使用,使用Deque代替);

offerFirst/offerLastpollFirst/pollLast是一对,源自Deque,其本质是双端队列。

public boolean add(E e) 链表末尾添加元素,返回是否成功,成功为 true,失败为 false。
public void add(int index, E element) 向指定位置插入元素。
public boolean addAll(Collection c) 将一个集合的所有元素添加到链表后面,返回是否成功,成功为 true,失败为 false。
public boolean addAll(int index, Collection c) 将一个集合的所有元素添加到链表的指定位置后面,返回是否成功,成功为 true,失败为 false。
public void addFirst(E e) 元素添加到头部。
public void addLast(E e) 元素添加到尾部。
public boolean offer(E e) 向链表末尾添加元素,返回是否成功,成功为 true,失败为 false。
public boolean offerFirst(E e) 头部插入元素,返回是否成功,成功为 true,失败为 false。
public boolean offerLast(E e) 尾部插入元素,返回是否成功,成功为 true,失败为 false。
public void clear() 清空链表。
public E removeFirst() 删除并返回第一个元素。
public E removeLast() 删除并返回最后一个元素。
public boolean remove(Object o) 删除某一元素,返回是否成功,成功为 true,失败为 false。
public E remove(int index) 删除指定位置的元素。
public E poll() 删除并返回第一个元素。
public E remove() 删除并返回第一个元素。
public boolean contains(Object o) 判断是否含有某一元素。
public E get(int index) 返回指定位置的元素。
public E getFirst() 返回第一个元素。
public E getLast() 返回最后一个元素。
public int indexOf(Object o) 查找指定元素从前往后第一次出现的索引。
public int lastIndexOf(Object o) 查找指定元素最后一次出现的索引。
public E peek() 返回第一个元素。
public E element() 返回第一个元素。
public E peekFirst() 返回头部元素。
public E peekLast() 返回尾部元素。
public E set(int index, E element) 设置指定位置的元素。
public Object clone() 克隆该列表。
public Iterator descendingIterator() 返回倒序迭代器。
public int size() 返回链表元素个数。
public ListIterator listIterator(int index) 返回从指定位置开始到末尾的迭代器。
public Object[] toArray() 返回一个由链表元素组成的数组。
public T[] toArray(T[] a) 返回一个由链表元素转换类型而成的数组。
posted @   和森  阅读(53)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示