学习数据结构有什么用?_学数据结构是干嘛的-程序员宅基地

技术标签: 算法  数据结构  

当我们遇到一个实际问题时,首先需要解决两件事:

(1)如何将数据存储在计算机中;

(2)用什么方法和策略解决问题。

前者是数据结构,后者是算法。只有数据结构没有算法,相当于只把数据存储到计算机中,而没有有效的方法去处理,就像一幢只有框架的烂尾楼;若只有算法,没有数据结构,就像沙漠里的海市蜃楼,只不过是空中楼阁罢了。

数据是一切能输入计算机中的信息的总和,结构是指数据之间的关系。数据结构就是将数据及其之间的关系有效地存储在计算机中并进行基本操作。算法是对特定问题求解步骤的一种描述,通俗讲就是解决问题的方法和策略。

在遇到一个实际问题时,要充分利用自己所学的数据结构,将数据及其之间的关系有效地存储在计算机中,然后选择合适的算法策略,并用程序高效地实现。这就是Niklaus Wirth教授所说的:“数据结构+算法=程序”。

高校的计算机专业为本科生都开设了数据结构课程,它是计算机学科知识结构的核心和技术体系的基石,在研究生考试中也是必考科目。随着科学技术的飞速发展,数据结构的基础性地位不仅没有动摇,反而因近年来算法工程师的高薪形势,而得到了业内空前的重视。很多人认为基本的数据结构及操作已经在高级语言(如C++、Java语言)中封装,栈、队列、排序、优先队列等都可以直接调用库函数,学会怎么调用就好了,为什么要重复“造轮子”?那么到底有没有必要好好学习数据结构呢?

学习数据结构有什么用

(1)学习有效存储数据的方法。很多学生在学习数据结构时,问我要不要把单链表插入、删除背下来?要不合上书就不会写了。我非常诧异,为什么要背?理工科技术知识很少需要记忆的,是用的,用的!学习知识不能只靠死记硬背,更重要的是学习处理问题的方法。如何有效地存储数据,不同的数据结构产生什么样的算法复杂性,有没有更好的存储方法提高算法的效率?

(2)处理具有复杂关系的数据。现实中很多具有复杂关系的数据无法通过简单的库函数调用实现。如同现在很多芯片高度集成,完全不需要知道芯片内部如何,直接使用就行了。但是,如果在现实中遇到一个复杂问题,现有的芯片根本无法解决,或者一个芯片只能完成其中一个功能,而我们需要的是完成该复杂问题的一个集成芯片,这时就需要运用所学的数据结构知识来高效处理具有复杂关系的数据。

(3)提高算法效率。很多问题的基础数据结构运行效率较低,需要借助高级数据结构或通过改进数据结构来提高算法效率。

通过学习数据结构,更加准确和深刻地理解不同数据结构之间的共性和联系,学会选择和改进数据结构,高效地设计并实现各种算法,这才是数据结构的精髓。

数据结构为什么那么难

网络上太多的同学吐槽被“虐”,如“滔滔江水连绵不绝”,数据结构太难了!真的很难吗?其实数据结构只是讲了3部分内容:线性结构、树和图。到底难在哪里呢?我通过调查,了解到数据结构难学大概有以下4个原因。

(1)无法接受它的描述方式。数据结构的描述大多是抽象的形式,我们习惯了使用自然语言表达,难以接受数据结构的抽象表达。不止一个学生问我,书上的“ElemType”到底是什么类型?运行时怎么经常提示错误。它的意思就是“元素类型”,只是这样来描述,你需要什么类型就写什么类型,例如int。这样的表达方式会让不少人感到崩溃。

(2)不知道它有什么用处。尽管很多人学习数据结构,但目的各不相同。有的人是应付考试,有的人是参加算法竞赛需要,而很多人不太清楚学习数据结构有什么用处,迷迷糊糊看书、做题、考试。

(3)体会不到其中的妙处。由于教材、教师等各种因素影响,很多学生没有体会到数据结构处理数据的妙处,经常为学不会而焦头烂额,学习重在体会其中的乐趣,有乐趣才有兴趣,兴趣是最好的驱动力。

(4)语言基础不好。我一直强调先看图解,理清思路,再上机。可还是有很多同学已经理解了思路后,因为缺少main函数,输入/输出格式不对,缺少括号等各种语言问题卡壳,而这一切都被戴上了“数据结构太难了”的大帽子。

数据结构学习秘籍

在讲学习秘籍之前,我们首先了解一下数据结构学习的3种境界。

(1)会数据结构的基本操作。学会各种数据结构的基本操作,即取值、查找、插入、删除等,是最基础的要求。先看图解,理解各种数据结构的定义,操作方法,然后看代码,尝试自己动手上机运行,逐渐掌握基本操作。在初学时,要想理解数据结构,一定要学会画图。通过画图形象表达,能更好地体会其中的数据结构关系。因此,初学阶段学习利器是:画图、理解、画图。

(2)会利用数据结构解决实际问题。在掌握了书中的基本操作之后,就可以尝试利用数据结构解决一些实际问题了。先学经典应用问题的解决方法,体会数据结构的使用方法,再做题,独立设计数据结构解决问题。要想熟练应用就必须做大量的题,在做题的过程中体会其中的方法。最好进行专项练习,比如线性表问题、二叉树问题、图问题。这一阶段的学习利器是:做题、反思、做题。

(3)熟练使用和改进数据结构,优化算法。这是最高境界了,也是学习数据结构的精髓所在,单独学习数据结构是无法达到这种境界的。数据结构与算法相辅相成,需要在学习算法的过程中慢慢修炼。在学习算法的同时,逐步熟练应用、改进数据结构,慢慢体会不同数据结构和算法策略的算法复杂性,最终学会利用数据结构改进和优化算法。这一阶段已经在数据结构之上,可以通过在ACM测试系统上刷各种算法题,体会数据结构在算法设计中的应用。这一阶段的学习利器是:刷题、总结、刷题。

数据结构与算法书籍推荐

数据结构与算法之美(全彩印刷)

一些经典的数据结构和算法图书,偏重理论,读者学起来可能感觉比较枯燥。一些趣谈类的数据结构和算法图书,虽然容易读懂,但往往内容不够全面。另外,很多数据结构和算法图书缺少真实的开发场景,读者很难将理论和实践相结合。

为了解决上述问题,本书全面、系统地讲解了常用、常考的数据结构和算法,并结合 300多幅图和上百段代码,让内容变得更加通俗易懂。同时,对于每个知识点,本书结合真实的应用场景进行讲解,采用一问一答的讲解模式,让读者不仅可以掌握理论知识,还可以掌握如何将数据结构和算法应用到实际的开发工作中。

本书分为11章。第1章介绍复杂度分析方法。第2章介绍数组、链表、栈和队列这些基础的线性表数据结构。第3章介绍递归编程技巧、8种经典排序、二分查找及二分查找的变体问题。第4章介绍哈希表、位图、哈希算法和布隆过滤器。第5章介绍树相关的数据结构,包括二叉树、二叉查找树、平衡二叉查找树、递归树和B+树。第6章介绍堆,以及堆的各种应用,包括堆排序、优先级队列、求Top K、求中位数和求百分位数。第7章介绍跳表、并查集、线段树和树状数组这些比较高级的数据结构。第8章介绍字符串匹配算法,包括BF算法、RK算法、BM算法、KMP算法、Trie树和AC自动机。第9章介绍图及相关算法,包括深度优先搜索、广度优先搜索、拓扑排序、Dijkstra算法、Floyd算法、A*算法、Z小生成树算法、Z大流算法和Z大二分匹配等。第10章介绍4种算法思想,包括贪心、分治、回溯和动态规划。第11章介绍4个经典项目中的数据结构和算法的应用,包括Redis、搜索引擎、鉴权限流和短网址服务。另外,附录A为书中的思考题的解答。

数据结构 Python语言描述 第2版

本书主要介绍计算机编程中如下4个主要方面的内容。

(1)编程基础——数据类型、控制结构、算法开发以及通过函数进行程序设计,是解决计算机问题所需要掌握的基本思想。本书用Python编程语言介绍这些核心主题,旨在帮助你通过理解这些主题解决更广泛的问题。

(2)面向对象编程——面向对象编程是用于开发大型软件系统的主要编程范式。本书介绍OOP的基本原理,旨在让你能够熟练地应用它们。和其他教科书不同,本书会引导你开发一个专业的多项集类的框架,以说明这些原理。

(3)数据结构——大多数程序会依赖数据结构解决问题。在最具体的层级,数据结构包含数组以及各种类型的链接结构。本书介绍如何使用这些数据结构来实现各种类型的多项集结构(如栈、队列、列表、树、包、集合、字典和图),还会介绍如何使用复杂度分析来评估这些多项集的不同,进而实现在时间与空间上的权衡。

(4)软件开发生命周期——本书不会设单独的一两章去介绍软件开发技术,而是通过大量的案例全面概述这方面的内容。本书还会强调,编写程序通常并不是解决问题或软件开发里最困难或最具挑战性的部分。

趣学数据结构

本书包括10章。

  • 第1章是基础知识,介绍数据结构基础和算法复杂性的计算方法。
  • 第2~5章是线性结构,讲解线性表、栈和队列、字符串、数组等的基本操作和应用。
  • 第6章是树形结构,讲解树、二叉树、线索二叉树、树和森林以及树的经典应用。
  • 第7章是图形结构,讲解图的存储、遍历以及图的经典应用。
  • 第8~9章是数据结构的基本应用,讲解查找、排序的方法和算法复杂性比较。
  • 第10章是高级数据结构及其应用,讲解优先队列、并查集、B-树、B+树、红黑树等。

本书的每一章中都有大量图解,并给出数据结构的基本操作,最后结合实例帮助读者巩固相关知识点,力求学以致用、举一反三。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/epubit17/article/details/122524745

智能推荐

Shiro实现用户授权(Authorization)_@hasauthority shiro-程序员宅基地

文章浏览阅读716次。Shiro实现用户授权_@hasauthority shiro

基于深度学习的人脸识别与管理系统(UI界面增强版,Python代码)_python管理系统深度学习-程序员宅基地

文章浏览阅读7.1w次,点赞121次,收藏1.2k次。摘要:人脸检测与识别是机器视觉领域最热门的研究方向之一,本文详细介绍博主自主设计的一款基于深度学习的人脸识别与管理系统。博文给出人脸识别实现原理的同时,给出Python的人脸识别实现代码以及PyQt设计的UI界面。系统实现了集识别人脸、录入人脸、管理人脸在内的多项功能:包括通过选择人脸图片、视频、摄像头进行已录入人脸的实时识别;可通过图片和摄像头检测人脸并录入新的人脸;通过系统管理和更新人脸数据等功能,检测速度快、识别精度较高。博文提供了完整的Python代码和使用教程与完整代码资源。_python管理系统深度学习

Filter Listener-程序员宅基地

文章浏览阅读42次。ShowServlet.javapackage it.ytu.servlet;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servl

php 实现 word 转为 图片_php word转图片-程序员宅基地

文章浏览阅读2.4k次,点赞3次,收藏8次。项目需求是这样的:用户签订合同,并读取用户信息生成合同,将合同保存为png图片保存环境:windows(2012,linux要配置java环境,偷懒)+ apache(2.4.48) + php(7.1) + mysql(5.5.62)框架:tp5.0.24,网站目录在public下面,环境直接用宝塔塔建的,phpenv 本地测试了也可以,其他的没有测试第一步:向word写入用户信息1. 将 PhpOffice 整个文件夹复制到 extend 文件夹下(如下图)2. 接下来就是代码了,直接上:_php word转图片

oracle redo备份,Oracle备份,redo丢失和恢复的实操-程序员宅基地

文章浏览阅读391次。我们今天要和大家一起讨论的是Oracle备份,redo丢失和恢复的实际操作方案的实际应用,如果你对Oracle备份,redo丢失和恢复的实操感兴趣的话,以下的文章就会给你提供相关的知识,望你会有所收获。一、先阐述下测试环境系统数据库环境:window+Oracle10g R2+archive模式;模拟Redo文件丢失,数据库在正常关闭的情况发现Redo丢失了;二、测试(1)、倘若丢了一个或多个re..._oracle redolog 备份

原创 (C++)Leetcode狂刷200题——标签“哈希表篇--简单难度10道 #204. 计数质数_计数质数 哈希表leetcode c++-程序员宅基地

文章浏览阅读93次。第九道、#204. 计数质数统计所有小于非负整数 n 的质数的数量。示例:输入: 10输出: 4解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。1、暴力解法class Solution {public: int countPrimes(int n) { if (n<3) return 0; //当n小于三时,没有质数 int ans =1; //2是质数 ,所以初始化为1 for(int ._计数质数 哈希表leetcode c++

随便推点

Windows蓝屏案例分析_ox000021a-程序员宅基地

文章浏览阅读491次。1.故障检查信息***STOP 0x0000001E(0xC0000005,0xFDE38AF9,0x0000001,0x7E8B0EB4)KMODE_EXCEPTION_NOT_HANDLED ***其中错误的第一部分是停机码(Stop Code)也就是STOP 0x0000001E, 用于识别已发生错误的类型, 错误第二部分是被括号括起来的四个数字集, 表示随机的开发人员定义的参数(这_ox000021a

SpringBoot默认包扫描机制及@ComponentScan指定扫描路径详解_springboot scan-程序员宅基地

文章浏览阅读7.2k次,点赞5次,收藏20次。springboot注解@ComponentScan_springboot scan

NLP 学习笔记 02 (Tagging Problems, and Hidden Markov Models)_hidden markov models nlp-程序员宅基地

文章浏览阅读4.7k次。(all content based on the coursera course nlp)--------------------------------------------------------------------------------------------------------这一周的主要课程是tagging problems首先是简单介绍了一下supervise_hidden markov models nlp

muui身份证验证代码_mui input 身份证号码-程序员宅基地

文章浏览阅读518次。&lt;script src="js/mui.min.js"&gt;&lt;/script&gt; &lt;script type="text/javascript" src="js/mui.enterfocus.js" &gt;&lt;/script&gt; &lt;script src="js/app.js"&gt_mui input 身份证号码

HDC2021技术分论坛:HarmonyOS内核技术大公开_hyperhold-程序员宅基地

文章浏览阅读1.7k次。作者:jikecheng,miaoxie,HarmonyOS内核技术专家HarmonyOS整体框架分为四个层级,如图1所示。从上到下,依次为:第一层是应用层,主要涵盖系统应用、Launcher、设置,以及三方应用。第二层是框架层,提供基础UI框架、用户程序框架以及能力模块框架。第三层是系统服务层,让HarmonyOS具有分布式流转负载的能力。大家看到的高速多设备协同能力就是由该层级提供。而承载整个操作系统,同时发挥芯片算力的基石就沉淀在第四层——内核层。宏观来说,内核的主要工作包含芯片资源管_hyperhold

计算机组成原理知识总结蒋本珊,计算机组成原理习题答案(蒋本珊)-程序员宅基地

文章浏览阅读584次。资源描述:第一章1 .电子数字计算机和电子模拟计算机的区别在哪里解电子数字计算机中处理的信息是在时间上离散的数字量,运算的过程是不连续的;电子模拟计算机中处理的信息是连续变化的物理量,运算的过程是连续的。2 .冯· 诺依曼计算机的特点是什么 其中最主要的一点是什么解冯· 诺依曼计算机的特点如下① 计算机(指硬件)应由运算器、存储器、控制器、输入设备和输出设备五大基本部件组成;② 计算机内部采用二进..._数字计算机处理的是在时间上和数值上

推荐文章

热门文章

相关标签