数据结构是在计算机中组织和存储数据的一种专业方法,以使我们可以更有效地对存储数据进行操作。数据结构在计算机科学和软件工程领域具有广泛而多样的使用范围。数据结构几乎都用于开发的每个程序或软件系统中。此外,数据结构属于计算机科学和软件工程的基本面。在软件工程面试问题方面,这是一个关键主题。因此,作为开发人员,我们必须对数据结构有很好的了解。
数组是固定大小的结构,可以容纳相同数据类型的项目。它可以是整数的数组,一系列浮点数,字符串或什至数组数组(例如二维数组)。数组是索引的,这意味着可以随机访问。
将元素插入数组并从数组中删除元素,因为数组的大小固定,因此无法立即完成。如果要将元素插入数组,首先,您必须创建一个具有增加尺寸的新数组(当前尺寸 + 1),复制现有元素并添加新元素。删除的尺寸较小的新数组也是如此。
链接列表是一个顺序结构,由线性顺序的一系列项目组成,彼此相互链接。因此,您必须顺序访问数据,并且不可能随机访问。链接列表提供了动态集的简单而灵活的表示。
堆栈是LIFO (最后一次 - 最终可以访问的元素)结构,通常可以在许多编程语言中找到。该结构被称为“堆栈”,因为它类似于现实世界中的堆栈 - 一堆板块。
用于表达评估(例如:用于解析和评估数学表达式的分流码算法)。用于在递归编程中实现功能调用。
队列是FIFO (首先是首先 - 首先可以访问该元素的结构)结构通常可以在许多编程语言中找到。该结构被称为“队列”,因为它类似于现实世界的队列 - 在队列中等待的人。
用于管理多线程中的线程。用于实施排队系统(例如:优先级排队)。
哈希表是一个数据结构,该数据结构存储具有与每个键关联的键的值。此外,如果我们知道与该值相关的密钥,它可以有效地支持查找。因此,无论数据大小如何,它都非常有效地插入和搜索。
直接地址在存储在表中时,使用值和键之间的一对一映射。但是,当有大量键值对时,这种方法存在问题。该表将有很多记录,并且鉴于在典型计算机上可用的内存,可能是不切实际的,甚至不可能被存储。为了避免此问题,我们使用哈希表。
一个名为Hash函数(H)的特殊函数用于克服直接寻址时上述问题。在直接访问中,具有键K的值存储在插槽k中。使用哈希函数,我们计算每个值所在的表(插槽)的索引。使用哈希函数计算的给定键计算的值称为哈希值,该值指示了该值映射的表的索引。
树是一个分层结构,其中数据由分层组织并链接在一起。该结构与链接列表不同,而在链接列表中,项目以线性顺序链接。在过去的几十年中,已经开发了各种各样的树木,以适应某些应用并满足某些限制。一些示例包括二进制搜索树,B树,Treap,红黑树,Splay Tree,Avl树和N- Ary树。
顾名思义,二进制搜索树(BST)是一个二进制树,其中数据以层次结构组织。该数据结构以排序顺序存储值。二进制搜索树中的每个节点都包含以下属性。
二进制搜索树展示了将其与其他树区分开的独特属性。该属性被称为** binary-search-Tree属性**。
堆是二进制树的特殊情况,在该二进制树上,将父节点与孩子的价值观进行比较,并得到相应的安排。
堆可有2种类型。
图由一组有限的顶点或节点组成,以及连接这些顶点的一组边缘。
图的顺序是图中的顶点数。图的大小是图中的边数。
如果两个节点通过相同的边缘相互连接,则据说它们相邻。
如果图形G的所有边缘都有一个指示启动顶点和端顶点是什么的方向,则据说图形是一个有向图。我们说(u,v)是来自或留下顶点u的事件,是事件发生的,或者进入或进入顶点诉自动弹:从顶点到自身的边缘。
如果图形G。它可以在两个顶点之间以两种方式进行。
如果顶点未连接到图中的任何其他节点,则据说它是隔离的。
Trie是一种类似树状的信息检索数据结构,该数据结构存储字母的字母。它也被称为数字树或radix树或前缀树。
Trie是一种有效的信息检索数据结构。使用Trie,搜索复杂性可以达到最佳限制(密钥长度)。如果我们将钥匙存储在二进制搜索树中,则平衡的BST需要与M * log N成比例的时间,其中M是最大的字符串长度,而N是树中的键数。使用Trie,我们可以在O(M)时间中搜索键。
1。标准Trie :这是一个像数据结构一样有序的树。
2。压缩的Trie :用于实现空间优化。压缩的Trie是标准Trie的高级版本。
3。后缀Trie :后缀Trie是压缩Trie的高级版本。
使用Trie,我们可以在O(L)时间中插入并找到字符串,其中L代表单个单词的长度。这显然比BST快。这也比哈希的速度快,因为它的实现方式。我们不需要计算任何哈希功能。 Trie的另一个优点是,我们可以轻松地按字母顺序打印所有单词,而Hashhing不容易就可以。
动态编程是一种将问题分解为子问题的技术,并为将来的目的保存结果,因此我们不需要再次计算结果。优化子问题以优化整体解决方案被称为最佳亚基属性。动态编程的主要用途是解决优化问题。在这里,优化问题意味着当我们试图找出问题的最小解决方案或最大解决方案时。动态编程确保如果存在解决方案,可以找到问题的最佳解决方案。
时间复杂性算法O(1)在数组中查找特定元素,例如:print(my_array [97]),无论数组的大小如何,都可以直接查找一个元素,只需一个操作即可。 (顺便说一句,这并不是真正的算法,但是它可以帮助我们了解时间复杂性的工作方式。)
o(n)找到最低值。该算法必须在具有n个值的数组中进行N操作以找到最低值,因为该算法必须一次比较每个值。
O(n 2)气泡排序,选择排序和插入排序是此时间复杂性的算法。在这些算法的页面上解释了其时间复杂性的原因。
大数据集大大减慢了这些算法。随着n仅从100个值增加到200个值,操作数量可以增加30000!
o(n log n)QuickSort算法平均比上述三种排序算法要快,而O(n log n)是平均值,而不是最差的情况。 QuickSort最糟糕的情况也是O(n 2),但这是使QuickSort变得如此有趣的平均时间。稍后我们将了解QuickSort。
参考来自此链接-Sourav Saini?