目录

一、什么是数据结构

二、常用数据结构有哪些

2.1 基本数据结构

2.2 常用数据结构 (逻辑结构)

2.2.1 数组(静态数组、动态数组)

2.2.2 线性表

2.2.3 队列

2.2.4 栈

2.2.5 树(二叉树、查找树、平衡树、线索、堆)

2.2.6 图(Graph)

2.2.7 堆 (Heap)

2.2.8 散列表(哈希表) (Hash)

2.3 数据存储结构比较

2.4 数据结构的操作

2.5 算法的空间复杂度与时间复杂度


数据结构可以从两个方面分析:逻辑结构与物理结构(存储结构)。

其中逻辑结构指的是数据的组织方式,物理结构指的是数据在内存上的存储方式

逻辑结构分为四种类型:集合结构,线性结构,树形结构,图形结构。

物理结构又叫存储结构,分为四种种,顺序存储结构、链式存储结构、索引结构、散列结构。

一、什么是数据结构

数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。

数据结构与算法的关系:

数据结构指的是“一组数据的存储结构”,算法指的是“操作数据的一组方法”。
数据结构是为算法服务的,算法是要作用再特定的数据结构上的。

二、常用数据结构有哪些

2.1 基本数据结构

数据元素相互之间的关系称为结构。有四类基本结构:集合、线性结构、树形结构、图状结构。 集合结构:除了同属于一种类型外,别无其它关系 ;

线性结构:元素之间存在一对一关系常见类型有: 数组,链表,队列,栈,它们之间在操作上有所区别。例如:链表可在任意位置插入或删除元素, 而队列在队尾插入元素,队头删除元素,栈只能在栈顶进行插入,删除操作;

树形结构:元素之间存在一对多的关系,常见类型有:树(有许多特例:二叉树、平衡二叉树、查找树等) 图形结构:元素之间存在多对多的关系,图形结构中每个结点的前驱结点数和后续结点多个数可以任意。

2.2 常用数据结构 (逻辑结构)

本文作者:https://www.zhihu.com/people/san-hao-bai-du-ren-79

(由于文章总是被三无号到处复制发布,选择这种方式插入原文链接影响阅读实在抱歉!)

本文原文链接:https://blog.csdn.net/qq_41687938/article/details/118227614

2.2.1 数组(静态数组、动态数组)

在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在C语言中, 数组属于构造数据类型。
 一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。

2.2.2 线性表

线性表并不是一种具体的存储结构,它包含顺序存储结构和链式存储结构,是顺序表和链表的统称。顺序表、链表(单向链表、双向链表、循环链表)

2.2.3 队列

栈隶属于线性表,是特殊的线性表,因为它对线性表中元素的进出做了明确的要求只能从线性表的一端进,从另一端出,且要遵循“先入先出”的特点,即先进队列的元素也要先出队列。即只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素 时,称为队空。

2.2.4 栈

栈隶属于线性表,是特殊的线性表,因为它对线性表中元素的进出做了明确的要求。栈中的元素只能从线性表的一端进出(另一端封死),且要遵循“先入后出”的原则,即先进栈的元素后出栈。即先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据,最后一 个数据被第一个读出来

2.2.5 树(二叉树、查找树、平衡树、线索、堆)

树是包含n(n>0)个结点的有穷集合K,且在K中定义了一个关系N,N满足以下条件:
1)有且仅有一个结点K0,他对于关系N来说没有前驱,称K0为树的根结点。简称为根(root)。
2)除K0外,K中的每个结点,对于关系N来说有且仅有一个前驱。
3)K中各结点,对关系N来说可以有m个后继(m>=0)。

2.2.6 图(Graph)

图是由结点的有穷集合V和边的集合E组成。其中,为了与树形结构加以区别,在图结构中常常将结点称为顶点,边是顶点的有序偶对,若两个顶点之间存在一条边,就表示这两个顶点具有相邻关系。

2.2.7 堆 (Heap)

在计算机科学中,堆是一种特殊的树形数据结构,每个结点都有一个值。通常我们所说的堆的数据结构,是指二叉堆。堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。

2.2.8 散列表(哈希表) (Hash)

若结构中存在关键字和K相等的记录,则该记录必定在f(K)的存储位置上。由此,不需比较便可直接取得所查记录。称这个对应关系f为散列函数(Hash function),按这个思想建立的表为散列表。

2.3 数据存储结构比较

顺序结构:一段连续的内存空间。
    优点:随机访问
    缺点:插入删除效率低,大小固定
链式结构:不连续的内存空间
    优点:大小动态扩展,插入删除效率高
    缺点:不能随机访问。
索引结构:为了方便查找,整体无序,但索引块之间有序,需要额外空间,存储索引表。
    优点:对顺序查找的一种改进,查找效率高
    缺点:需额外空间存储索引表
散列结构:选取某个函数,数据元素根据函数计算存储位置。可能存在多个数据元素存储在同一位置,引起地址冲突。
    优点:查找基于数据本身即可找到,查找效率高。存取效率高
    缺点:存取随机,不便于顺序查找。

2.4 数据结构的操作

查询、删除、插入等

2.5 算法的空间复杂度与时间复杂度

大O复杂度表示法

数据结构有哪些?数据结构的特点?算法与数据结构相关推荐

  1. GitHub上分享的常用算法和数据结构实现原理可视化系统

    一门编程语言入门之后,要想进阶,必须学习算法和数据结构,但是对于初学者来讲算法和数据结构和数据结构的实现原理和机制过于枯涩.抽象难懂. 这里为小伙伴们分享一个名为Algorithm Visualize ...

  2. 算法与数据结构(part3)--数据结构概述

    学习笔记,仅供参考,有错必纠 文章目录 算法与数据结构--基于python 数据结构 什么是数据结构 数据结构的概念 抽象数据类型(ADT) 算法与数据结构–基于python 数据结构 什么是数据结构 ...

  3. 算法与数据结构c语言版PPT,C语言算法与数据结构.ppt

    C语言算法与数据结构.ppt 第十二章 算法与数据结构12.1 算法的基本概念,该节知识点所占试题比重为12,属于重点考查对象,基本上每次必考,主要考查算法的定义和对算法复杂度的理解.历次试题分值在0 ...

  4. 有问有答 | 算法和数据结构精华问答

    戳蓝字"CSDN云计算"关注我们哦! 所有的算法,乃至数学在实际运用中都是要根据不同的数据来选择不同的方法,所以一般学习过算法和数据结构的人都会越发的认识到,数据才是程序的中心,只 ...

  5. Caché 算法与数据结构

    第一章 Caché 算法与数据结构 基础和概念 ☆☆☆☆☆ 第二章 Caché 算法与数据结构 数组原理 ☆☆☆☆☆ 第三章 Caché 算法与数据结构 链表原理 ☆☆☆☆☆ 第四章 Caché 算法 ...

  6. 维基百科上的算法和数据结构链接很强大

    突然发现维基百科上的算法和数据结构比百度百科强多啦,图文并茂. 其实这个网站不错:http://www.sorting-algorithms.com 冒泡排序: bubble冒泡的意思 http:// ...

  7. GitHub标星3w+的项目,全面了解算法和数据结构知识

    作者 | 程序员小吴 来源 | 五分钟学算法(ID: CXYxiaowu) 导语:今天分享一个开源项目,里面汇总了程序员技术面试时需要了解的算法和数据结构知识,并且还提供了相应的代码,目前 GitHu ...

  8. noj数据结构稀疏矩阵的加法十字链表_一个算法毁了一款好游戏?算法和数据结构到底有多重要?...

    来源 | 异步 | 文末赠书 前段时间大火的国产游戏--<太吾绘卷>,由于创新的玩法和精良的制作一度广受好评,然而随着玩家游戏的深入和时长的积累,发现该游戏在玩的过程中游戏外的问题很多很多 ...

  9. 浅谈算法和数据结构: 五 优先级队列与堆排序

    原文:浅谈算法和数据结构: 五 优先级队列与堆排序 在很多应用中,我们通常需要按照优先级情况对待处理对象进行处理,比如首先处理优先级最高的对象,然后处理次高的对象.最简单的一个例子就是,在手机上玩游戏 ...

  10. java优先队列的入队函数,算法与数据结构番外(1):优先队列

    这是算法与数据结构番外系列的第一篇,这个系列未来的主要内容是补充一些与算法与数据结构相关的知识,这些知识比较零碎,同时也与正传关系密切,往往需要阅读了正传的相关内容以后,才能较好的理解这部分内容.如果 ...

最新文章

  1. ethereumjs/ethereumjs-util
  2. Python中将dict转换为kwargs
  3. 0050算法笔记——【线性规划】单纯形算法(未完全实现)
  4. IT项目管理总结:第十二章 项目采购管理
  5. 华为芯片设计面试题_未来想去华为海思做芯片设计,应该做哪些努力?
  6. (精华)转:RDD:创建的几种方式(scala和java)
  7. 例3.5 二叉排序树 - 九度教程第35题(二叉排序树)
  8. 将mysql服务从C盘(原),安装到新路径D盘下(其中的数据一并迁移)
  9. 求方程ax^2+bx+c=0的根,用3个函数分别求当b^2-4ac大于0、等于0和小于0时的根,并输出结果。 从主函数输入a, b, c的值。
  10. python刷网易云_GitHub - a744451680/python_wangyiyun: python 网易云打卡自动刷300
  11. 黎想首谈微信公众号搜索排名的规则?怎样提高排名?
  12. Day02-HTML基础
  13. Java方法:方法解释,方法的定义及调用
  14. 【Python自动化办公】批量将Excel表格数据导出为PDF文件
  15. Python和人工智能的那些事
  16. GCM Google官方示例的简单介绍和使用
  17. 初中英语知识水平测试软件,初中英语学科知识与能力模拟测试七
  18. python二级公共基础知识
  19. Ansible-事实管理与控制<六>
  20. ESP32S蓝牙03

热门文章

  1. 【转】 DOTA2中的伪随机及其lua实现
  2. C# 与 LUA 的经验对比
  3. [BZOJ] 1084 [SCOI2005]最大子矩阵
  4. 《Windows 系列》- 右击添加管理员权限
  5. [翻译练习] #selector() 和响应者链
  6. 《DevOps实战:VMware管理员运维方法、工具及最佳实践》——2.3 配置管理
  7. 树莓派搭建minecraft服务器
  8. ajax callback 在什么时候运行
  9. find server/ -type d|xargs -I {} echo mkdir /root/{}
  10. 倒数秒跳转页面实现代码。