数据结构与算法--概述(一)

“数据结构”是“程序员”面试亘古不变的话题,很多人为了能拿到一个好的offer煞费心血,刷题提升自己。笔者也有过类似的经历。但是对数据结构的理解仍然是无序状态,为了更好的理解这一古老的话题,特对这一话题进行有序的梳理,以希望自己可以达到更深刻的理解或认识。

为什么程序员相关的岗位都要考察数据结构与算法呢?曾经以为图灵奖获得者Nicklaus Wirth提出过一个著名的公式:算法+数据结构=程序,所以如果想写出好的程序离不开数据结构。

当下很多人会说,我写的python什么的也没有用到这些,不是一样可以工作的好好的?那是因为当下很多底层的都被封装好了,对用户透明了,但是究其根本如果深知数据结构,则可以更好的理解程序。

闲言少叙,书归正传;
下面我们开始聊一下数据结构这一古老的话题。

首先粗略的画了一个导图,可以初步的了解一下,内容未列全,领会精神哈:
在这里插入图片描述

首先我们来看下概念:

什么是数据结构

数据结构(data structure)是带有结构特性的数据元素的集合,它研究的是数据的逻辑结构和数据的物理结构以及它们之间的相互关系,并对这种结构定义相适应的运算,设计出相应的算法,并确保经过这些运算以后所得到的新结构仍保持原来的结构类型。

通俗理解

通俗讲,数据结构就是为了解决实际应用而出现的各种数据组织结构或方式。

数据结构划分的根本原因

数据的逻辑结构和物理结构是数据结构的两个密切相关的方面,同一逻辑结构可以对应不同的存储结构。算法的设计取决于数据的逻辑结构,而算法的实现依赖于指定的存储结构。

通俗理解

因为数据组织内部的元素之间关系,或者存储的形式可以对数据结构进行类别划分,这正好也符合面向对象的思想哈

数据的逻辑结构:

指反映数据元素之间的逻辑关系的数据结构,其中的逻辑关系是指数据元素之间的前后间关系,而与他们在计算机中的存储位置无关。逻辑结构导图:

在这里插入图片描述

数据的物理结构(存储结构):

数据的逻辑结构在计算机存储空间中的存放形式称为数据的物理结构(也称为存储结构)。一般来说,一种数据结构的逻辑结构根据需要可以表示成多种存储结构,常用的存储结构有顺序存储、链式存储、索引存储和哈希存储等。
在这里插入图片描述

逻辑与物理的关系:

数据的逻辑结构和物理结构是数据结构的两个密切相关的方面,同一逻辑结构可以对应不同的存储结构。算法的设计取决于数据的逻辑结构,而算法的实现依赖于指定的存储结构。

常见数据结构:

1.数组(Array)
2.栈(Stack)
3.队列(Queue)
4.链表(Linked List)
5.树(Tree)
6.图(Graph)
7.堆(Heap)
8.散列表(Hash)

以上也是经常被提到的8大数据结构。这些常见的数据结构可以根据数据逻辑关系对应到对应的逻辑分类,也可以根据具体的底层实现方式对应到对应的物理分类或存储分类上。

常见算法的衍生

数据结构研究内容就是如何按一定的逻辑结构,把数据组织起来,并选择适当的存储表示方法把逻辑结构组织好的数据存储到计算机的存储器里。那么如何高效的使用数据?也衍生出来另一个话题“算法”。算法研究的目的是为了更有效的处理数据,提高数据运算效率。数据的运算是定义在数据的逻辑结构上,但运算的具体实现要在存储结构上进行。一般有以下2种常用运算:

(1)查找(搜索) 在数据结构中查找符合指定条件的数据,查找的作用,可能是取出、插入、删除、更新等操作;
(2)排序 在指定数据结构上,对所有元素进行既定顺序进行排列

具体查找算法或排序算法,因为不同的数据结构又衍生出很多具体算法,下图简单列出几条,供理解:
在这里插入图片描述
然后算法本身又有一些抽象的思想:如贪婪算法、分治算法、动态规划、回溯算法等等,这些无非是对某一类东西的归纳总结,具体这部分我们后边内容再分步骤梳理总结

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用,这篇博客是关于一位学生利用整个暑假的时间来学习《数据结构算法》课程并且持续更新的。而引用是一份关于Java数据结构算法的学习笔记,涵盖了数据结构算法概述、分类以及算法分析的内容。引用给出了数据结构的官方解释和大白话解释,以及数据结构的分类和物理结构的介绍。 所以,关于数据结构算法的笔记,你可以参考这些资源来了解数据结构的概念、分类和物理结构,以及算法的分析和时间复杂度等内容。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [数据结构算法——学习笔记汇总](https://blog.csdn.net/qq_42025798/article/details/118864568)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Java数据结构算法1-概述学习笔记](https://blog.csdn.net/qq_45498432/article/details/124067892)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值