数据结构之基:从根儿上了解数据结构的特性

2023-11-05

学好数据结构,就等于成功了一半。

程序是对现实的模拟,现实是由时间和空间组成的,高效的人都是用最少的时间、最少的空间来做最伟大的事,程序亦是如此。我们要选择最合理的算法和最合理的数据结构,来写最好的代码,这也正是时间复杂度和空间复杂度的要求。

所以,学好数据结构,选择合理的数据结构,降低时空复杂度,就等于成功了一半

我们可以将数据结构分为两大部分:线性数据结构和非线性数据结构。

  • 线性数据结构:数据元素之间的关系是一对一的。
  • 非线性数据结构:数据元素之间的关系不是一对一的。

线性数据结构

数据元素之间的关系是一对一的。可以简单地记忆为:一根绳子不分叉

这是嘛意思呢?

可以这么理解:我有一根绳子,上面打了好多结,我随便找到一个结点,不管往哪一端捋,都只能找到一个点,除非到头了导致没结点了。说白了就是:这根绳子没有分叉。

比如我们生活中的排队,就是这个模型。你前后最多都只有一个人,也就是:一对一的。

这个模型有很多衍生物,我们来逐个看下。

1. 顺序表

顺序表是紧密相邻的线性数据结构。便于查找元素,不便于插入和删除元素。

也就是说:顺序表的所有元素都是一个挨一个的。

比如

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据结构之基:从根儿上了解数据结构的特性 的相关文章

  • 算法设计与实现--贪心篇

    贪心算法 贪心算法是一种在每一步选择中都采取当前状态下最优决策的算法 以期望能够通过一系列局部最优的选择达到全局最优 贪心算法的关键是定义好局部最优的选择 并且不回退 即一旦做出了选择 就不能撤销 一般来说 贪心算法适用于满足以下两个条件的
  • 算法设计与实现--动态规划篇

    什么是动态规划算法 动态规划算法是一种求解复杂问题的方法 通过将原问题分解为相对简单的子问题来求解 其基本思想是将待求解的问题分解为若干个子问题 阶段 按顺序求解子阶段 前一子问题的解 为后一子问题的求解提供了有用的信息 在求解任一子问题时
  • C语言,求取数组的序亏:已知一个整数数组,求出个数组中每个元素在整个 数组的排序。

    要求获取整数数组中每个元素的排序 可以使用以下方法 1 定义一个结构体数组 其中每个结构体包含数组元素的值和索引 2 遍历整数数组 将每个元素与其索引一起存储到结构体数组中 3 对结构体数组进行排序 按照元素的值进行升序排序 4 遍历排序后
  • 不会做的题汇总

    摘苹果 题目描述 小红来到苹果园 帮园长摘苹果 园长请小红把摘完的苹果的最小的那个去掉 如果有 多个最小的苹果 那么都要去掉 剩余的苹果算一下平均一个苹果有多重 平均重 量请保留1位小数 输入 输入有2行 第一行 一个整数n代表小红摘的n个
  • 牛客网(二叉树)

    这个题目和leetcode比起来就是有一些不一样 需要我们自己来写接口函数 所以有一些麻烦 我们得写一个中序遍历的函数做最后的输出 也得写一个函数来存储字符进去 还得写一个接口函数来创造节点 这个题目就和二叉树如何创造节点很相似 我们一个一
  • C/C++查找算法-----------------------二分查找详解

    二分查找 定义 实例 定义 二分查找也称折半查找 搜索过程从数组的中间元素开始 如果中间元素正好是要查找的元素 则搜索过程结束 如果某一特定元素大于或者小于中间元素 则在数组大于或小于中间元素的那一半中查找 而且跟开始一样从中间元素开始比较
  • 二叉树(接口函数的实现)

    今天继续来分享的是二叉树 我们废话不多说 直接来看下面的几个接口函数 然后我们把他们实现 我们就掌握二叉树的二分之一 今天粉丝破千了 属实有点高兴了 typedef char BTDataType typedef struct Binary
  • 【C++】手撕string思路梳理

    目录 基本思路 代码实现 1 构建框架 2 构建函数重载 3 迭代器 4 遍历string 5 resetve 开空间 insert任意位置插入push back append 按顺序依次实现 6 erase删除 clear清除 resiz
  • 华为OD机试 C++【最大载货量】

    描述 在火车站旁的货运站 小明负责调度2K辆中转车 其中K辆用于干货 K辆用于湿货 每批到站的货物来自不同的供货商 需要按照顺序装入中转车 注意 一个供货商的货物只能装在一辆车上 不能分开 但是 一辆车可以放多个供货商的货物 问题是 要让所
  • 回溯算法第零篇【递归、搜索与回溯】【回溯算法入门必看】

    本篇文章的目的 1 给小伙伴们对回溯算法中的名词进行解释 2 消除递归的恐惧 回溯是递归的一个分支 给小伙伴们一个建议 整篇文章都要看完 一字不漏 全是干货 注意 分析回溯的思想之前 我们得知道一个关系 递归包含搜索 搜索包含回溯 所以我们
  • 【数据结构和算法】 K 和数对的最大数目

    其他系列文章导航 Java基础合集 数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一 题目描述 二 题解 2 1 方法一 双指针排序 三 代码 3 1 方法一 双指针排序 3
  • 面试150-13(Leetcode238除自身以外数组的乘积)

    代码 class Solution public int productExceptSelf int nums int n nums length int res new int n int product 1 int zerocnt 0
  • 【数据结构和算法】 K 和数对的最大数目

    其他系列文章导航 Java基础合集 数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一 题目描述 二 题解 2 1 方法一 双指针排序 三 代码 3 1 方法一 双指针排序 3
  • 面试150-13(Leetcode238除自身以外数组的乘积)

    代码 class Solution public int productExceptSelf int nums int n nums length int res new int n int product 1 int zerocnt 0
  • Leetcode 45 跳跃游戏 II

    题意理解 给定一个长度为 n 的 0 索引 整数数组 nums 初始位置为 nums 0 每个元素 nums i 表示从索引 i 向前跳转的最大长度 还是从初始坐标i 0的位置到达最后一个元素 但是问题不是能不能跳到 而是 最少几步能跳到最
  • 《LeetCode力扣练习》代码随想录——双指针法(反转链表---Java)

    LeetCode力扣练习 代码随想录 双指针法 反转链表 Java 刷题思路来源于 代码随想录 206 反转链表 双指针 Definition for singly linked list public class ListNode int
  • 冒泡排序/选择排序/插入排序/快速排序/归并排序/桶排序/堆排序/希尔排序/计数排序/基数排序/二分查找/广度优先搜索/深度优先搜索

    排序算法 冒泡排序 Bubble Sort 通过重复地比较相邻的元素并交换它们 使得最大 或最小 的元素逐渐移动到列表的一端 从而实现排序 选择排序 Selection Sort 在未排序的部分中 选择最小 或最大 的元素 并将其放置在已排
  • 【每日一题】2397. 被列覆盖的最多行数-2024.1.4

    题目 2397 被列覆盖的最多行数 给你一个下标从 0 开始 大小为 m x n 的二进制矩阵 matrix 另给你一个整数 numSelect 表示你必须从 matrix 中选择的 不同 列的数量 如果一行中所有的 1 都被你选中的列所覆
  • 排序:计数排序

    一 概念 计数排序是非比较排序 是对哈希直接定址法的变形应用 二 思想 利用数组统计相同数据出现的次数 例如整型数据m出现n次 就在数组m位置记录数据为n 最后从头遍历数组打印数据即可 通俗来讲就是 数组下标即为数据 下标所指位置的值即为数
  • 链表的中间节点

    链表的中间节点 力扣 LeetCode 官网 全球极客挚爱的技术成长平台 备战技术面试 力扣提供海量技术面试资源 帮助你高效提升编程技能 轻松拿下世界 IT 名企 Dream Offer https leetcode cn problems

随机推荐

  • 图的遍历方法——DFS和BFS

    DFS类似于树的先序遍历 因此可以用递归实现 BFS类似于树的层次遍历 因此可以用队列实现 说明 下面代码中图的存储方式是邻接表 关于邻接表和邻接矩阵可看邻接表和邻接矩阵 1 深度优先遍历 Depth First Search 思想 从图中
  • 微信小程序实现单/多图片上传(预览删除)

    wxml结构 上传图片
  • Linux中Vim文件夹路径,一些有用的Linux命令和Vim使用总结

    常见Linux命令 文件复制 移动 删除 创建 复制 cp v 源文件路径 目标文件路径 移动 mv v 源文件路径 目标文件路径 删除 rm v 文件路径 rmdir v 文件夹路径 文件夹要为空 rm rv 文件夹路径 递归删除文件夹及
  • Qt界面开发(一)(各种控件以及图表)

    注 资源主要来源 http www qtcn org bbs u 110085 刘大神 如若侵权 请联系删除 本文只是将作品集合到起来 方便大家一起学习 资源集合已经放到 链接 https pan baidu com s 1sVvQE8uD
  • ts 因为在此系统上禁止运行脚本(win10系统)

    今天弄了一下Ts 有点晚了 但是确实是才开始尝试 以前只是看了看 1 先安装 npm install g typescript 2 安装成功 typescript 4 0 3 added 1 package from 1 contribut
  • Goby的使用 漏洞扫描工具

    获取自己虚拟机的ip 打开Goby 点击扫描 输入虚拟机的IP地址 开始扫描 扫描结束这里没有扫到漏洞 点击报告查看报告 右上角下载生成报告 漏洞举例
  • C++学习笔记之浅拷贝&深拷贝的理解

    一 浅拷贝 浅拷贝就是把类中的成员属性简单的复制 如果有指针成员变量 也只是拷贝指针的地址 下面案例就是先创建teacher1对象 再把它初始化给teacher2对象 在初始化时需要调用复制构造函数 因为Teacher类没有重写复制构造函数
  • 使用docker搭建一个完全分布式的hadoop集群

    项目地址 https github com czfshine docker hadoop docker hadoop A dockerfile for setting up a full Hadoop cluster server 一套在u
  • C++ fopen、CFile如何以UTF-8编码格式读写文件

    How to write UTF 8 file with fprintf in C http stackoverflow com questions 10028750 how to write utf 8 file with fprintf
  • 从零搭建分布式文件系统MinIO比FastDFS要更合适

    前两天跟大家分享了一篇关于如何利用FastDFS组件来自建分布式文件系统的文章 有兴趣的朋友可以阅读下 用asp net core结合fastdfs打造分布式文件存储系统 通过留言发现大家虽然感兴趣 但是都觉得部署比较麻烦 的确 fastd
  • Java项目使用jib打包docker镜像的简单记录

    jib主要用来在没有docker环境下将项目打包成docker镜像 主要有一下四种方式 maven gradle core cli 本文主要介绍cli和maven两种打包方式 github地址 https github com Google
  • sap生产工单报工_一图看懂SAP 生产订单报工

    经典面试问题之一 请问生产订单报工有什么影响 答 记录了工序完成情况 记录产出和报废数量 记录人工工时和机器工时等 评 新顾问吧 再多讲两句 来个一览图 一图看懂报工业务概览 该图充分体现了SAP ERP系统的集成性 一个小小的工人报工动作
  • 狼 羊 渔夫过河问题

    这几天碰到一个有意思的程序 讲的是狼 羊 白菜船夫要过河 从南岸到北岸 结果每次船只能载船夫和一个东西 而且如果船夫不在场的话 狼会偷偷吃掉羊 羊会偷偷吃掉白菜 自己写一个算法求出可行的方案 首先我的想法是 用四个位表示这四个 然后位为0表
  • Kubernetes 集群部署 ------ UI界面(三)

    官方文件 https github com kubernetes kubernetes tree master cluster addons dashboard 五 UI界面部署 在master01上操作 创建dashborad工作目录 r
  • springboot集成定时任务框架quartz

    springboot集成定时任务框架quartz quartz框架可以很方便的执行定时任务 任务可以持久化到数据库中 这里使用的数据库为postgres 集成步骤 1 quartz和数据库驱动maven依赖
  • 关于写代码的习惯

    写代码 是一项复杂的工作 但是 代码的质量不仅在于代码的功能 还在于它是否条理清晰 简略易懂 以下内容是希望大家写代码时有好习惯 在正确的前提下 长循环放在内层 可以减少cpu跨切循环的次数 代码一定要简略易懂 不要做无效操作 这样做只会浪
  • matlab 提取图片ARGB8888数据,输出到TXT

    image imread ss png 读入图片 A rgb2gray image 提取A值的矩阵 R image 1 提取R值的矩阵 G image 2 提取G值的矩阵 B image 3 提取B值的矩阵 ranks R size R 提
  • 移植外设后可以跳转但显示未定义

    提示例如 GPC S axf Error L6218E Undefined symbol FLASH EraseSector int referred from protocolalarm o 原因就是C跟C 公用 c 引用了C的文件 C的
  • matlab内存管理

    转自 http my donews com deng 2006 09 24 vijgqxehmkxiruywdauvxyiafogtskeymhyw 用 Matlab 进行大规模科学计算或仿真时 内存是一个需要时常注意的问题 当你写的 Ma
  • 数据结构之基:从根儿上了解数据结构的特性

    学好数据结构 就等于成功了一半 程序是对现实的模拟 现实是由时间和空间组成的 高效的人都是用最少的时间 最少的空间来做最伟大的事 程序亦是如此 我们要选择最合理的算法和最合理的数据结构 来写最好的代码 这也正是时间复杂度和空间复杂度的要求