<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>数据结构 on Leanku 的博客</title><link>https://www.leanku.com/tags/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/</link><description>Recent content in 数据结构 on Leanku 的博客</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Sun, 12 Mar 2023 22:46:01 +0800</lastBuildDate><atom:link href="https://www.leanku.com/tags/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/index.xml" rel="self" type="application/rss+xml"/><item><title>数据结构</title><link>https://www.leanku.com/post/computerscience/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/</link><pubDate>Sun, 12 Mar 2023 22:46:01 +0800</pubDate><guid>https://www.leanku.com/post/computerscience/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/</guid><description>&lt;h1 id="数据结构"&gt;数据结构&lt;/h1&gt;&#10;&lt;h2 id="一说明"&gt;一、说明&lt;/h2&gt;&#10;&lt;p&gt;数据结构是计算机科学中一个非常基础和核心的概念，它对于编程、算法设计和软件工程都至关重要。&lt;/p&gt;&#10;&lt;p&gt;简单来说，&lt;strong&gt;数据结构是一种在计算机中组织、管理和存储数据的方式，目的是为了实现高效地访问和修改。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;可以把它想象成一个&lt;strong&gt;储物系统&lt;/strong&gt;：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;把一堆书随便堆在地上，这是一种“存储”，但找起来非常困难。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;使用一个带标签的书架，把书分门别类地放好，找书、放书就高效得多。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;这个“书架”以及“如何给书分类、摆放”的规则，就是一种“数据结构”。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="为什么数据结构如此重要"&gt;为什么数据结构如此重要？&lt;/h3&gt;&#10;&lt;p&gt;选择合适的数据结构可以极大地影响程序的性能和效率。一个精心选择的数据结构可以让操作（如搜索、插入、删除）变得非常快；而错误的选择则可能导致程序运行缓慢甚至崩溃。&lt;/p&gt;&#10;&lt;h2 id="二-常见的数据结构分类和类型"&gt;二、 常见的数据结构分类和类型&lt;/h2&gt;&#10;&lt;p&gt;数据结构主要可以分为两大类：&lt;strong&gt;线性结构&lt;/strong&gt;和&lt;strong&gt;非线性结构&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h3 id="一-线性数据结构"&gt;一、 线性数据结构&lt;/h3&gt;&#10;&lt;p&gt;元素按顺序排列，形成一条“线”。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;数组&lt;/strong&gt;：在内存中连续存储相同类型的元素。通过索引可以快速访问任意元素。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;em&gt;优点&lt;/em&gt;：随机访问速度快。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;em&gt;缺点&lt;/em&gt;：大小固定（在某些语言中），插入和删除元素效率低。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;链表&lt;/strong&gt;：由一系列节点组成，每个节点包含数据和指向下一个节点的指针。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;em&gt;优点&lt;/em&gt;：大小动态，插入和删除元素效率高。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;em&gt;缺点&lt;/em&gt;：不能随机访问，必须从头开始遍历。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;栈&lt;/strong&gt;：一种后进先出的结构，像一摞盘子。只能在顶部进行添加（压栈）和移除（弹栈）操作。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;em&gt;应用&lt;/em&gt;：函数调用栈、撤销操作、表达式求值。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;队列&lt;/strong&gt;：一种先进先出的结构，像排队一样。从队尾添加元素，从队首移除元素。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;em&gt;应用&lt;/em&gt;：任务调度、消息队列、广度优先搜索。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;em&gt;变种&lt;/em&gt;：双端队列、优先队列。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="二-非线性数据结构"&gt;二、 非线性数据结构&lt;/h3&gt;&#10;&lt;p&gt;元素之间不是简单的前后关系，可能存在多个连接。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;树&lt;/strong&gt;：一种分层结构，由节点和边组成。最顶端的节点叫根节点。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;二叉树&lt;/strong&gt;：每个节点最多有两个子节点。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;二叉搜索树&lt;/strong&gt;：左子树所有节点的值小于根节点，右子树所有节点的值大于根节点。这使得搜索非常高效。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;em&gt;应用&lt;/em&gt;：文件系统、数据库索引、决策树。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;图&lt;/strong&gt;：由顶点和连接顶点的边组成。可以表示任意复杂的关系网络。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;em&gt;应用&lt;/em&gt;：社交网络、地图导航、网络路由。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;哈希表&lt;/strong&gt;：通过一个哈希函数将键映射到一个位置来访问记录，以实现极快的查找速度。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;em&gt;优点&lt;/em&gt;：在平均情况下，插入、删除和查找的时间复杂度都是 O(1)。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;em&gt;应用&lt;/em&gt;：字典、集合、缓存。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="三核心操作与算法"&gt;三、核心操作与算法&lt;/h2&gt;&#10;&lt;p&gt;对于每种数据结构，我们通常关心以下几个核心操作的效率：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;访问&lt;/strong&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;搜索&lt;/strong&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;插入&lt;/strong&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;删除&lt;/strong&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;这些操作的效率通常用 &lt;strong&gt;大O表示法&lt;/strong&gt; 来衡量，它描述了算法时间或空间复杂度随数据规模增长的趋势。&lt;/p&gt;&#10;&lt;h2 id="四作用"&gt;四、作用&lt;/h2&gt;&#10;&lt;p&gt;数据结构是构建高效算法的基石。学习数据结构能帮助你：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;写出更高效的代码&lt;/strong&gt;：理解不同操作的代价。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;解决复杂问题&lt;/strong&gt;：很多复杂问题本质上就是数据组织和处理的问题。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;更好地理解计算机系统&lt;/strong&gt;：从内存管理到数据库，底层都离不开数据结构。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item></channel></rss>