数据结构--初步了解(抽象分级)

2024-09-02 12:04

本文主要是介绍数据结构--初步了解(抽象分级),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 本文探讨了数据结构和算法在常规开发中的重要性。数据结构如ArrayList用于构建无穷级菜单,线性结构则常用于好友管理。理解数据的逻辑和存储结构、算法的正确性、鲁棒性、简单性、抽象分级和高效性是关键。算法的描述方式包括汉字、流程图、伪代码和实际实现,并通过时间复杂度和空间复杂度评估其效率。在实际应用中,应关注数据结构的合理使用和算法的设计优化。
摘要由CSDN通过智能技术生成
展开 
现状:现在毕业以及两年半了,感觉常规开发上面很少用过数据结构以及配套算法。
一般一个程序=数据结构+算法;
目前常规开发,也都是业务代码开发、以及框架自带的配置或者第三方插件直接使用,但是数据结构也是常用的,但是用的很low;

数据结构:可以理解为,对抽象数据定义为一个合理的结构体进行封装,存储在计算机中,方便后续算法使用或者业务代码使用。

例如:
1.实现无穷级菜单,
你能知道使用arraylist进行存储数据,但是呢,你想实现无穷级菜单,就要额外处理了,需要一点算法:
当然肯定又常规的递归,进行初始的无穷级菜单构建数据结构,后续在某个节点上,增加无穷级菜单、以及修改,肯定就涉及到一些基本功了(也可以吧这个理解为算法,就是怎么样合理的处理这个数据结构,让我们实现这个程序或者业务场景)
2.常规微信添加好友,
一般也就是直接备注姓名,不想使用搜索的话,是不是一个个进行查找呢,没加备注的话,是不是更加麻烦,一个个找;
另一种思路就是,将常规好友进行分组备注,例如按照公司分组、好友关系等分组,也是方便查找;
这两种方式是不是也是分别用了,线性和数的结构来存储好友信息,类似的概念;

关于数据
常规了解四点:
1.数据的逻辑结构,用什么样的结构来定义数据的关系;
2.数据的存储结构,这个结构体怎么存储到计算机中;
3.算法,基于这个机构的数据,例如如何实现插入、删除、查找等操作,核心就是怎么处理数据;
4.常规数据处理技术:查找、排序、索引等;
总之:
数据逻辑的四种结构:集合、线性表、树、图,每一种还可以细分,独立不开存储和遍历算法;
数据存储的两种结构:顺序存储、链接存储(会用到指针);索引存储;哈希存储

关于算法
一:也可以理解为程序,要有以下几个特点;
1.正确性:面对任何合法的输入都能给出,正确的结果;
2.鲁棒性:也称为健壮性,对于错误的输入,算法能够识别并处理,而不是产生错误动作或者陷入瘫痪,要有对非法输入的抵抗性;
3.简单性:简单容易理解和实现。
4.抽象分级:算法一旦创建,必须由人进行阅读、理解和修改。如果算法涉及太多,人就会糊涂,要采用抽象分级来组织算法表达的思想,可以理解为吧算法分解为多个模块,模块互调,做好备注、描述功能即可;
5.高效性;
时间效率:运行速度;
空间效率:存储空间大小,也要考虑到GC;
二:算法有四种描述方式:
1.汉字描述,写除步骤
2.流程图
3.伪代码
4.真实实现
三:评价算法的优劣
1.事先估算法:他是对算法所消耗资源的估算。
2.时间复杂度:判断算法的时间代价,o(1)最合适;
3.空间复杂度:算法执行过程中,需要的辅助空间的数量;
4.最好、最坏、平均情况:以平均为主,最坏为下限;知道其时间开销

这篇关于数据结构--初步了解(抽象分级)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1129896

相关文章

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

《数据结构(C语言版)第二版》第八章-排序(8.3-交换排序、8.4-选择排序)

8.3 交换排序 8.3.1 冒泡排序 【算法特点】 (1) 稳定排序。 (2) 可用于链式存储结构。 (3) 移动记录次数较多,算法平均时间性能比直接插入排序差。当初始记录无序,n较大时, 此算法不宜采用。 #include <stdio.h>#include <stdlib.h>#define MAXSIZE 26typedef int KeyType;typedef char In

速了解MySQL 数据库不同存储引擎

快速了解MySQL 数据库不同存储引擎 MySQL 提供了多种存储引擎,每种存储引擎都有其特定的特性和适用场景。了解这些存储引擎的特性,有助于在设计数据库时做出合理的选择。以下是 MySQL 中几种常用存储引擎的详细介绍。 1. InnoDB 特点: 事务支持:InnoDB 是一个支持 ACID(原子性、一致性、隔离性、持久性)事务的存储引擎。行级锁:使用行级锁来提高并发性,减少锁竞争

【408数据结构】散列 (哈希)知识点集合复习考点题目

苏泽  “弃工从研”的路上很孤独,于是我记下了些许笔记相伴,希望能够帮助到大家    知识点 1. 散列查找 散列查找是一种高效的查找方法,它通过散列函数将关键字映射到数组的一个位置,从而实现快速查找。这种方法的时间复杂度平均为(

PHP: 深入了解一致性哈希

前言 随着memcache、redis以及其它一些内存K/V数据库的流行,一致性哈希也越来越被开发者所了解。因为这些内存K/V数据库大多不提供分布式支持(本文以redis为例),所以如果要提供多台redis server来提供服务的话,就需要解决如何将数据分散到redis server,并且在增减redis server时如何最大化的不令数据重新分布,这将是本文讨论的范畴。 取模算法 取模运

浙大数据结构:树的定义与操作

四种遍历 #include<iostream>#include<queue>using namespace std;typedef struct treenode *BinTree;typedef BinTree position;typedef int ElementType;struct treenode{ElementType data;BinTree left;BinTre

Python 内置的一些数据结构

文章目录 1. 列表 (List)2. 元组 (Tuple)3. 字典 (Dictionary)4. 集合 (Set)5. 字符串 (String) Python 提供了几种内置的数据结构来存储和操作数据,每种都有其独特的特点和用途。下面是一些常用的数据结构及其简要说明: 1. 列表 (List) 列表是一种可变的有序集合,可以存放任意类型的数据。列表中的元素可以通过索

初步学习Android的感想

之前在学习java语言的时候就经常听说过Android这门语言,那时候感觉Android有些神秘感,再加上Android是用来开发移动设备的一门语言,所以一直对Android抱有一种兴奋的心情。 在我开始接触 Android之后,感觉超好玩,因为可以在自己的手机设备上开发一些我喜欢的小应用,再想想之前说学习Android应该会很难,但是如果你真的接触了,而且有JAVA的功底,我想学习Androi