数据结构的基本知识(一)

1.数据结构的基本概念

数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科。

数据是人们利用文字符号、数字符号以及其他规定的符号对现实世界的事物及其活动所做的抽象描述。换言之,数据是信息的载体,是客观事物的符号表示。数据能够被计算机识别、存取和处理的“原料”。

数据元素是数据的基本单位。一个数据元素由若干个数据项组成。

数据项是数据不可分割的最小单位。

数据结构分为逻辑结构和物理结构。

数据的逻辑结构指数据元素之间的逻辑关系(数据元素之间的前后关系)的数据结构,而与它们在计算机中的存储位置无关。

数据的逻辑结构主要可分为集合结构、线性结构、树型结构和图型结构四种,如下图:
数据的逻辑结构

集合结构的数据元素同属于一个集合,它们之间是并列关系,除此之外没有其他关系。

线性结构是除第一个和最后一个数据元素之外,每个数据元素只有一个唯一的前驱数据元素和一个唯一的后继数据元素。线性结构中的数据元素之间存在一个一对一的关系。

树形结构是除根结点外,每个数据元素只有一个唯一的前驱数据元素,可有零个或若干个后继数据元素。树形结构中的数据元素之间存在一个一对多的关系。

图形结构是每个数据元素有零个或若干个前驱数据元素和零个或若干个后继数据元素。图形结构中的数据元素存在多个多对多的关系。

数据的存储结构(物理结构)是指数据的逻辑结构在计算机存储空间的存放形式,即数据在计算机中的存储表示,它包括数据元素的表示和关系的表示。通俗的讲,物理结构研究的是数据在存储器中存放的形式。

数据的存储结构的基本形式有四种:顺序存储结构、链式存储结构和索引存储结构和散列存储结构。如下图:

数据的存储结构

顺序存储机构是指把数据元素存储在一块连续地址空间的内存中。其特点是逻辑上相邻的数据元素在物理上也相邻,数据的逻辑关系表现在数据元素的存储位置关系上。

链式存储结构是使用指针把相互直接关联的结点(即直接前驱结点或直接后继结点)链接起来。其特点是逻辑上相邻的数据元素在物理上(即内存存储位置上)不一定相邻,数据间的逻辑关系表现在结点的链接关系上。

索引存储是通常在存储节点信息的同时,还要建立附加索引表,而索引表由若干索引项组成。若每个节点在索引表都有一个索引项,则该索引表称为稠密索引。若一组节点在索引表中只对应一个索引项,则该索引表称为稀疏索引。索引项的形式一般是(关键字,地址),关键字是能唯一标识一个结点的那些数据项。稠密索引中索引项的地址指示结点所在的存储位置,稀疏索引中索引项的地址指示一组结点的起始存储位置。

散列存储结构是根据节点的关键字直接计算出该节点的存储地址。

数据的运算是对数据施加的操作。数据的运算定义在数据的逻辑结构上,每种逻辑结构都有一个运算的集合。在数据结构中,运算不仅仅是加、减、乘、除等运算,大多数的运算都设计算法的实现问题,算法的实现与数据的存储结构是密切相关的。

一种数据类型数据允许进行的某种操作称为数据的操作。一种数据类型数据所有的操作称为数据的操作集合

类型是一组值的集合。

数据类型是指一个值的集合和定义在这个值的集合上的一组操作的总称,通常它可看做是高级程序设计语言中的已经实现的数据结构。

抽象数据类型(ADT)是指一个逻辑概念上的类型和这个类型上的操作集合。抽象数据类型是指一个数学模型以及定义在该模型上的一组操作。抽象数据类型可表示为一个三元组式(D,R,P),其中,D是数据对象,R是D上的关系集,P是对D的基本操作集合。

当软件设计问题具体确定时,抽象数据元素的数据类型将被具体数据元素的数据类型取代。

2.算法

2.1 算法的描述

算法是对特定问题求解步骤的一种描述。它是指令的有限序列,其中每一条指令表示一个或多个操作。描述求解问题方法的操作步骤集合。

算法具有五个基本特征:输入,输出有穷性,确定性和可行性。
1)有穷性:有限步骤必须结束。
2)确定性:算法中每一个操作必须有确切的含义,无二义性,并在任何条件下,算法都只有一条执行路径。
3)可行性:算法中的所有操作都可通过已经实现的基本运算有限次地实现。每条指令必须可以执行并有正确的结果。
4)输入:算法具有零个或多个输入,它们是在算法开始前对算法给定的量。这些输入取自于特定对象的集合。
5)输出:算法具有一个或多个输出,它们与输入有某种特定关系。

算法要用某种语言来描述。描述算法的语言主要有三种形式:文字形式,伪代码形式和程序设计语言形式。

文字形式是指用中文或英文这样的文字来描述算法。

伪码形式是指用一种仿程序设计语言的语言来描述算法。

程序设计语言形式是指用某种高级程序设计语言来描述算法,优点是这样的算法描述既简洁易读,又可以直接输入计算机调用或运行。

2.2 算法的设计与分析

算法设计应满足正确性,可读性,健壮性,高时间效率和高空间效率。

算法的可读性有利于人们对算法的理解,这既有利于程序的调试和维护,也有利于算法的交流和移植。算法的可读性主要体现在两个方面:一是变量名、常量名、函数名等的命名要见名知意,二是要有足够多的注释。

算法的健壮性在于当输入不合法的数据时,算法能够做出适当的反应或处理,不至于产生莫名其妙的结果。同时,处理出错的方法应该是返回一个表示错误或错误性的值,并终止程序的执行,以便在更高的抽象层次上进行处理。

算法的时空效率是在算法执行的时间应该尽可能短、算法执行过程中占用的存储空间应该尽可能少。

算法分析的两个主要方面是分析算法的时间复杂度和空间复杂度,主要考察算法的时间效率和空间效率,以便比较和改进算法。

算法的时间效率是指运行算法需要花费时间的多少。

算法的空间效率是指运行算法需要占用的额外内存空间的多少。

算法的耗时与算法所处理数据个数n的函数关系的分析称作算法的时间效率分析,也称作算法的时间复杂度分析。它通常采用O(f(n))表示。

一般而言,算法中基本操作频度是问题规模n的某个函数f(n),算法的时间量度记作T(n) = O(f(n))。它表示随问题规模n的增大,算法执行时间增长率与f(n)的增长率相同,称为算法的渐进时间复杂度,简称时间复杂度

若是对一个算法在运行过程中临时占用存储空间大小的量度,记做S(n)=O(f(n)),并称为空间复杂度

每天进步一点点,数据结构的基本知识小结如下:

数据结构的基本概念


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值