我想计算机或相关专业都学过数据结构的课程吧,反正当时我是听的懵懵懂懂,而且压根不知道是干嘛用的,为什么要有这个东西,你们呢?欢迎评论区交流!
什么是数据结构
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
软件开发人员主要关心的是如何为当前的问题来选择最优的数据结构。
为什么需要数据结构?
数据是程序的核心要素,无论你在写什么程序,都需要和数据打交道,来决定数据该以什么方式存储、不同结构对性能的影响以及是否可以满足当前的需求。
比如订单详情,要确定订单的数据结构,该用什么数据结构存储,如何通过优化数据结构来提高检索性能
数据结构具有哪些能力?
- 建立数据模型
地图坐标x、y数据信息;二维矩阵、三维矩阵,通过数据结构来建立这些模型 - 提高特定运算性能
在部分情况下可以优化性能,但不总是这样;有时通过牺牲一部分性能来提高另一部分性能,比如空间换时间 - 实现特定算法
通过某些数据结构来支撑特定的算法,比如FIFO的特性,队列数据结构来支撑实现;栈来实现先入后出 - …
如何学习数据结构?
思考如下几个问题:
- why:为什么需要这个数据结构?
- when:什么时候使用这个数据结构?
- how:使用很简单,但如何保持这个数据结构?
8种常用数据结构
- 数组:
Array
,最简单、常用的数据结构 - 栈:
LIFO (Last In First Out)
,先入后出的特点,比如我们CTRL+Z,就是利用了栈的LIFO特性 - 队列:
FIFO (First In First Out)
,先入先出,比如分布式种的消息队列 - 链表:看起来与数组非常像,但它们的内存分配方式、内部结构、插入删除操作方式都不一样。常见的有单向链表、双向链表
- 图:通过多个节点(vertex)构成,节点之间可以相互连接形成一个网络。常见的有无向图、有向图。常见的遍历图的算法有广度优先搜索、深度优先搜索
- 树:一个分层的数据结构。常见的有红黑树、二叉树
- 前缀树:用于处理字符串相关的问题时非常高效。它可以实现快速检索,常用于字典中的单词查询,搜索引擎的自动补全甚至 IP 路由。
- 哈希表:将一个对象进行Hash,得到一个此对象的唯一标识符,就比如
Object.hashCode()
思考
链表和递归的区别
- 链表:一种链表的数据结构,链表具有天然的递归性,当前节点处理完成后,可以获取next节点为入参继续调用同样的方法处理
- 递归:一种递归算法,可以通过不同的数据结构来实现递归算法。本质上,就是将原来的问题,转化为更小的同一问题
扩展
LISP(源码本身就是数据结构)
LISP是一种通用高级计算机程序语言,长期以来垄断人工智能领域的应用。LISP作为应用人工智能而设计的语言,是第一个声明式系内函数式程序设计语言,有别于命令式系内过程式的C、Fortran和面向对象的Java、C#等结构化程序设计语言。
参考
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/17828.html