数据结构--数据结构的组织方法

面试题:常见的数据结构的优缺点?(数据结构+算法)

解答:https://blog.csdn.net/Yuyh131/article/details/83629606


数据结构:简单地说,数据结构是以某种特定的布局方式存储数据的容器。这种“布局方式”决定了数据结构对于某些操作是高效的,而对于其他操作则是低效的。首先我们需要理解各种数据结构,才能在处理实际问题时选取最合适的数据结构。

常见的数据结构:栈、队列、数组、链表、树、图、字典树(高效树形结构)、散列表(哈希表)

Java常用数据结构(图解):https://www.cnblogs.com/xdecode/p/9321848.html


图片源自于:https://blog.csdn.net/qinglv1/article/details/90756711


1、栈和队列:

数据结构--数据结构的组织方法_第1张图片

2、栈(stack):先进后出,删除与加入均在栈顶操作

栈也称为堆栈,是一种线性表。

堆栈的特性: 最先放入堆栈中的内容最后被拿出来,最后放入堆栈中的内容最先被拿出来, 被称为先进后出、后进先出。

栈的基本操作: 面试中关于栈的常见问题:

 

  • Push——在顶部插入一个元素
  • Pop——返回并移除栈顶元素
  • isEmpty——如果栈为空,则返回
  • trueTop——返回顶部元素,但并不移除它
  • 使用栈计算后缀表达式

  • 对栈的元素进行排序

  • 判断表达式是否括号平衡

 

3、队列(先进先出):

队列也是一种特殊的线性表。不同于栈所服从的先进后出的原则,队列的原则是先进先出。

队列在队头做删除操作,在队尾做插入操作:

队列的基本操作: 面试中关于队列的常见问题:
  • Enqueue()——在队列尾部插入元素
  • Dequeue()——移除队列头部的元素
  • isEmpty()——如果队列为空,则返回
  • trueTop()——返回队列的第一个元素
  • 使用队列表示栈
  • 对队列的前k个元素倒序
  • 使用队列生成从1到n的二进制数

 

4、数组和链表:

数据结构--数据结构的组织方法_第2张图片

数组的基本操作: 面试中关于数组的常见问题:
  • Insert——在指定索引位置插入一个元素
  • Get——返回指定索引位置的元素
  • Delete——删除指定索引位置的元素
  • Size——得到数组所有元素的数量
  • 寻找数组中第二小的元素

  • 找到数组中第一个不重复出现的整数

  • 合并两个有序数组

  • 重新排列数组中的正值和负值

链表的基本操作: 面试中关于链表的常见问题:
  • InsertAtEnd - 在链表的末尾插入指定元素

  • InsertAtHead - 在链接列表的开头/头部插入指定元素

  • Delete - 从链接列表中删除指定元素

  • DeleteAtHead - 删除链接列表的第一个元素

  • Search - 从链表中返回指定元素

  • isEmpty - 如果链表为空,则返回true

  • 反转链表
  • 检测链表中的循环
  • 返回链表倒数第N个节点
  • 删除链表中的重复项

 

5、图(Graph): 是由顶点和连接顶点的边构成的离散结构。在计算机科学中,图是最灵活的数据结构之一,很多问题都可以使用图模型进行建模求解。

具体解释:https://blog.csdn.net/zhaozigu123/article/details/79283616

图的类型 程序中的表现形式 常见遍历算法 面试中关于图的常见问题
  • 无向图
  • 有向图
  • 邻接矩阵

  • 邻接表

  • 广度优先搜索

  • 深度优先搜索

  • 实现广度和深度优先搜索

  • 检查图是否为树

  • 计算图的边数

  • 找到两个顶点之间的最短路径

 

6、树(Tree):树形结构是一种层级式的数据结构,由顶点(节点)和连接它们的边组成。 树类似于图,但区分树和图的重要特征是树中不存在环路。

树形结构被广泛应用于人工智能和复杂算法,它可以提供解决问题的有效存储机制。

图解以二叉树结构为例:

数据结构--数据结构的组织方法_第3张图片

Root - 根节点

Parent - 父节点

Child - 子节点

Leaf - 叶子节点

Sibling - 兄弟节点

以下是树形结构的主要类型: 面试中关于树结构的常见问题:
  • N元树 / 平衡树
  • 二叉树 / 二叉搜索树
  • AVL树 / 红黑树 / 2-3树
  • 求二叉树的高度

  • 在二叉搜索树中查找第k个最大值

  • 查找与根节点距离k的节点

  • 在二叉树中查找给定节点的祖先节点

 

7、字典树(Trie):

字典树,也称为“前缀树”,是一种特殊的树状数据结构,对于解决字符串相关问题非常有效。它能够提供快速检索,主要用于搜索字典中的单词,在搜索引擎中自动提供建议,甚至被用于IP的路由。

典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串)。主要思想是利用字符串的公共前缀来节约存储空间。

详解:https://blog.csdn.net/weixin_39778570/article/details/81990417

面试中关于字典树的常见问题
  • 计算字典树中的总单词数

  • 打印存储在字典树中的所有单词

  • 使用字典树对数组的元素进行排序

  • 使用字典树从字典中形成单词

  • 构建T9字典(字典树+ DFS )

 

8、哈希表:

是一个用于唯一标识对象并将每个对象存储在一些预先计算的唯一索引(称为“键(key)”)中的过程。因此,对象以键值对的形式存储,这些键值对的集合被称为“字典”。可以使用键搜索每个对象。基于哈希法有很多不同的数据结构,但最常用的数据结构是哈希表。

哈希表通常使用数组实现。

详解:https://blog.csdn.net/u011109881/article/details/80379505

散列数据结构的性能取决于以下三个因素: 面试中关于哈希结构的常见问题:
  • 哈希函数

  • 哈希表的大小

  • 碰撞处理方法

  • 在数组中查找对称键值对
  • 追踪遍历的完整路径
  • 查找数组是否是另一个数组的子集
  • 检查给定的数组是否不相交

共勉:明日复明日,明日何其多。我生待明日,万事成蹉跎。

你可能感兴趣的:(Java,数据结构)