数据结构(一)数据结构基础

数据结构的基础概念

数据是表征客观事物的可记录可识别的符号集合。

数据:

描述客观事物的数值、字符以及一切能输入到计算机且能被处理的符号集合。

数据元素:

数据元素是组成数据的基本单位,是数据集合的个体。

数据对象:

数据对象是性质相同的数据元素的集合,是数据集的一个子集。

数据结构:

数据结构,是相互之间存在一种或多种特定关系的数据元素集合。强调是带有结构的数据元素的集合,数据元素之间的相互关系,即数据的组织形式,即数据的组织形式。

数据类型:

一组性质相同的值集合以及定义其上的一组操作的集合。

抽象:

抽象是计算机技术的本质技术。抽象数据类型ADT:就是定义在一个模型上的一组操作的集合。其特点是抽象和隐蔽。包括定义和实现两大方面。

数据结构的内容:

数据结构的内容,即数据结构的研究范围;数据结构注重的是数据元素之间的相互关系。数据结构的内容包括逻辑结构和数据结构的存储结构及运算集合。

【数据结构的逻辑结构】

数据元素之间存在四种基本的逻辑结构:

(1) 集合结构:集合是属于与不属于简单的关系;
(2) 线性结构:结构中的数据元素之间存在着一对一的线性关系:如线性表(学籍表);
(3) 树形结构:结构中的数据元素之间存在着一对多的层次关系:如树(学校组织结构图);
(4) 图形结构:结构中的数据元素之间存在着多对多的任意关系:如图(网络节点图);
综上所述,数据的逻辑结构可概括为:
? 线性结构-----线性表、栈、队、字符串、数组、广义表
? 非线性结构----树、图
【数据结构的存储结构】:是逻辑结构在计算机中的存储映象,也是在计算机中的实现。

逻辑结构和存储结构之间的关系:

存储结构是逻辑关系的映象。逻辑结构是数据结构的抽象,存储结构是数据结构的实现,两者综合起来建立了数据元素之间的结构关系。

数据元素之间关系在计算机中的存储映像分为:

? 顺序映象(顺序存储结构,如数组,就是一组连续配置的单元) ;
? 非顺序映象(非顺序存储结构,如链表,是一组任意配置的单元,通过指针连接起来,维持逻辑关系)

运算集合:

定义在数据集及数据元素关系集上的运算操作集合;
数据结构的内容:按照一定的逻辑关系组织起来的一批数据,按一定的映像方式存放在计算机中,并在其上定义运算集合,就构成数据结构内容的三要素。

算法性能评价:

【性能评价】应是问题规模的函数,以刻画表征问题规模的大小。
【问题规模】对于不同的问题其含义不同:
如矩阵的阶、多项式的项数、图的顶点数、集合的个数等,是反映问题大小的本质数目。

【时间数量关系的计算方法】

算法实际执行时间与机器硬件和软件环境相关(比如两个机器的性能指标不同,就不便比较算法执行的快慢),舍弃机器环境差异影响,语句执行时间本质就是语句执行次数,与机器环境无关。 因此算法的执行时间就是算法所有语句的执行次数之和。

【算法的时间复杂度T(n)】

一个算法的时间复杂度T(n)是该算法的时间度量, 计作: T(n)=O(f(n)) 它表示随问题规模 n 的增大,算法的执行时间的增长率和 f(n)的增长率相同,称图 1.8 多种数量级的时间复杂度图示
作算法的渐进时间复杂度,简称时间复杂度。
【常用算法时间复杂度】
数据结构中常用的时间复杂度频率计数有 7 个: O(1) 常数型 O(n)线性型 O(n2)平方型 O(n3)立方型 O(2n)指数型 O(log2n)对数型 O(nlog2n)二维型 按时间复杂度由小到大递增排列成表 1-3(当 n 充分大时)。 不同数量级的时间复杂度的形状如图 1.6 所示,表 1-3 与图 1.6 是同一问题的不 同表示形式。一般情况下,随 n 的增大,T(n)的增长较慢的算法为最优的法。 从中我们应该选择使用多项式阶 O(nk)的算法,而避免使用指数阶的算法。

常用的时间复杂度频率表

【最坏时间复杂度】 :是指执行基本操作的最大次数。基本操作时指算法中基本运算的操作。

【算法的空间性能分析】 类似于时间复杂度的讨论,一个算法的空间复杂度 S(n)定义为该算法所耗费的存 储空间的数量级,它也是问题规模 n 的函数。记做: S(n)=O(f(n)) 一般情况下,一个程序在机器上执行时,除了需要寄存本身所用的指令、常数、 变量和输入数据以外,还需要一些对数据进行操作的辅助存储空间。其中对于输 入数据所占的具体存储量只取决于问题本身,与算法无关,这样我们只需要分析 该算法在实现时所需要的辅助空间单元个数就可以了。若算法执行时所需要的辅 助空间相对于输入数据量而言是个常数,则称这个算法为原地工作,辅助空间为 O(1)。

算法的时间复杂度和空间复杂度合称为算法的复杂度。

算法和算法描述

【算法的定义】算法是规则的有限集合,是为解决特定问题而规定的一系列操作。也就是说算法是处理步骤的序列集合。
【算法的特性】 :有限性、确定性、可行性和输入输出特性。
【算法设计的要求】 算法需要保证正确性、可读性、健壮性和高效率低存储量等问题。

算法的正确性是不言而喻的,正确可分为三个层次:1、一般数据能得出要求结果;2、精心选择的边界数据也能得到要求结果;3、所有合法数据都能得到要求结果。一层比一层要求更高。

可读性就是便于理解和交流,有助于合作开发。
? 健壮性就是耐折腾,非法操作时也不至于瘫痪。
? 高效率和低存储即:执行效率高,存储容量少,但往往需要折中。

原文地址:https://www.cnblogs.com/ST-2017/p/10462286.html

时间: 2024-11-10 07:46:09

数据结构(一)数据结构基础的相关文章

数据结构与算法基础学习笔记

*********************************************            ---算法与数据机结构--- 数据结构:由于计算机技术的发展,需要处理的对象不再是纯粹的数值,还有像字符,表,图像等具有一定结构的数据,需要用好的算法来处理这些数据. 我们把现实中大量而又复杂的问题以特定的数据类型的特定的存储结构保存到主存储器中,以及在此基础上为实现某个功能而执行的相应操作(查找排序),这个相应的操作也叫算法. 数据结构 = 个体 +个体的关系算法 =对存储数据的操

数据结构:图论基础

图概述 图(Graph)是一种比线性结构和树形结构都要复杂的数据结构.简单讲,图是由表示数据元素的的集合V和表示数据之间关系的集合E组成.其中,数据元素常称作顶点(vertex),数据之间的关系常称作边(edge).故图可记为G=<V,E>,其中V是顶点的有穷非空集合,E是边的集合.在图中顶点的前驱和后继是不设限制的,因此图描述的是一种网状关系. 无向图 若边是无序的或者说是无向的,则称此图是无向图.若无向图中有边(v1,v2)(无向图中边用圆括号表示),则显然(v2,v1)和(v1,v2)是

数据结构与算法基础 模块一

在软件水平考试中,数据结构与算法基础的相关内容是考试上午进行的,那么,接下来将对有关数据结构的内容进行整理和归纳,以便于在整个的软考准备阶段能够更加清楚和有效率的进行学习和回忆. 以下均为个人针对于数据结构的相关内容的整理,后期根据深入的程度不断地完善和改进,如果有什么错误或者不足,希望可以提出来,一起进步. 常用的数据结构:      数组(静态数组,动态数组),线性表,链表(单向链表,双向链表,循环链表),队列,栈,树(平衡数,二叉树,查找树,堆,线索树),图等的定义,存储和操作,HASH(

数据结构与算法基础

数据结构与算法基础: 顺序存储结构 链式存储结构 什么是树结构?为什么使用树结构?树的基本概念 二叉树: 任何一个节点的子节点数量不超过2 二叉树的子节点分左节点和右节点 满二叉树:所有的叶子节点都在最后一层,而且节点总数为2的n次方-1[n是树的高度]完全二叉树:所有叶子节点都在最后一层或者倒数第二层,且最后一层的叶子节点在左边连续,倒数第二节的叶子节点在右边连续 数组在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来.这些按序排列的同类数据元素的集合称为数组.在C语言

Python新手学习基础之数据结构-对数据结构的认知

什么是数据结构? 数据结构是指:相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成. 举个列子来理解这个数据结构: 数据可以比作是书本, 数据结构相当于书架,书存放在书架上,要拿书,我们就得到书架上面去取.为了更快的拿到想要的书,可以把书按照某个方式来排列.比如将书架分成N层,(卡通书在第一层,文学书在第二层......)不同种类的书放在书架的不同层里. 这就是对数据结构通俗的一种理解. Python的数据结构分类 Python中的数据结构可以统称为容器(contain

泛函编程(6)-数据结构-List基础

List是一种最普通的泛函数据结构,比较直观,有良好的示范基础.List就像一个管子,里面可以装载一长条任何类型的东西.如需要对管子里的东西进行处理,则必须在管子内按直线顺序一个一个的来,这符合泛函编程的风格.与其它的泛函数据结构设计思路一样,设计List时先考虑List的两种状态:空或不为空两种类型.这两种类型可以用case class 来表现: 1 trait List[+A] {} 2 case class Cons[+A](head: A, tail: List[A]) extends

数据结构与算法基础之概述、指针与内存

数据结构的定义 我们如何把现实中大量而复杂的问题以特定的数据类型和特定的存储结构保存到主存储器(内存)中,以及在此基础上为实现某个功能(比如查找某个元素,删除某个元素,对所有元素进行排序而执行的相应操作,这个操作也叫算法) 数据结构 = 个体 + 个体的关系 算法 = 对存储数据的操作 衡量算法的标准: 时间复杂度:大概程序要执行的次数,而非执行的时间 空间复杂度:算法执行过程中大概所占用的最大内存 难易程度 健壮性 内存的基本概念: 1.内存是用来存储数据的设备.它的存储速度介于寄存器和硬盘之

玩转数据结构——二分搜索树基础

一.树结构本身是一种天然的组织结构 将数据使用树结构后,出奇的高效. 二.二叉树 和链表一样,动态数据结构 class Node{ E e; Node left; Node right; } 二叉树(多叉树) 二叉树具有唯一根节点 class Node{ E e; Node left; <-- 左孩子 Node right; <-- 右孩子 } 二叉树每个节点最多有两个孩子节点 二叉树每个节点最多有一个父节点 二叉树具有天然递归结构 每个节点的左子树也是二叉树 每个节点的右子树也是二叉树 二叉

数据结构 - 树(基础)

1.无根树转有根树 #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define LL long long #define INF 0x7fffffff #include <vector> using namespace std; const int maxn = 1000005; int p[maxn]; int n; int root

[数据结构] 九大基础排序总结与对比

1.对比分析图 均按从小到大排列 k代表数值中的"数位"个数 n代表数据规模 m代表数据的最大值减最小值 稳定性:稳定排序算法会让原本有相等键值的纪录维持相对次序.也就是如果一个排序算法是稳定的,当有两个相等键值的纪录R和S,且在原本的列表中R出现在S之前,在排序过的列表中R也将会是在S之前. 由于九个排序算法写在一篇博客里太多了,所以我把它们分开进行了详细的阐述,分别是:冒泡排序.选择排序.插入排序.希尔排序.归并排序.快速排序.堆排序.桶排序.基数排序 2.补充 2.1 快排的pa