数据结构基本概念

本文详细介绍了数据结构的基础概念,包括数据、数据元素、数据对象、数据项、数据结构的四种基本类型以及逻辑结构和存储结构。此外,讨论了数据类型,特别是抽象数据类型的概念,以及算法的基本特征、设计要求和效率度量。算法的时间复杂度和空间复杂度也被提及,是理解计算机科学中数据处理和问题解决的关键要素。
摘要由CSDN通过智能技术生成

@[TOC]数据结构第一章(绪论)

概念与术语

1.数据:所有能被输入到计算机中并被计算机程序加工、处理的所有符号的总称。(整数,字符,声音,图像,图形等)
2.数据元素:数据的基本单位。(元素,节点,记录,顶点)在计算机程序中通常作为一个整体考虑。
3.数据项:一个数据元素可以由若干个数据项组成,数据项是数据不可分割的最小单位。
4.数据对象:由性质相同(类型相同)的数据元素组成的集合,数据对象是数据的一个子集。

数据>数据对象>数据元素>数据项

请添加图片描述
数据:图中的所有数据。
数据项:表中的一个特性,例如“姓名”、“性别”等。数据项是不可分割的最小单位。
数据元素:就是这些数据项组合成的一条数据,比如说小明这一条数据是由姓名、性别、身高、课程代号等数据项组成的。
数据对象:数据对象是性质相同的数据元素的组成,例如小明和小红这两条数据就是性质相同的数据元素,他们加起来统称为数据对象。

5.数据结构:相互之间存在一种或多种特定关系的数据元素的集合。数据元素之间的关系称为结构。
四类基本结构
1.集合结构:集合是确定的,不能有相同的元素(互异性),还具有无序性。该结构的数据元素之间的关系是“属于同一个集合”,任何两个元素之间都没有逻辑关系。
2.线性结构:该结构的数据元素之间存在着一对一的关系。
3.树形结构:该结构的数据元素之间存在着一对多的关系。
4.图状结构:该结构的数据元素之间存在着多对多的关系。
请添加图片描述
6.数据的逻辑结构:各数据元素之间的逻辑关系。
请添加图片描述
7.数据的存储结构:数据结构在计算机存储中的映象(表示)(mapping)。
存储结构也称为:存储表示、物理结构、物理表示。
常用的存储结构有顺序存储、链式存储、索引存储和哈希存储(散列存储)等。
请添加图片描述
请添加图片描述

8.数据类型:是一个值的集合和定义在这个值上的一组操作的总称。
1.原子类型(int char float等):“值的集合”是基本的原子类型,再加在该值集合上的操作就是原子类型。
2.结构类型(数组、结构、联合体等):“值的集合”是数据结构,“数据结构”的集合和在该集合上的一组操作叫做结构类型。

数据类型和数据结构是所属关系。
数据结构是一种“值的集合”,这种值的集合+值集合上的操作=结构类型,而结构类型是数据类型中的一种。

请添加图片描述

9.抽象数据类型:与计算机的实现无关的数据类型。是指一个数学模型以及定义在此数学模型上的一组操作。
三大特征:
1.信息隐蔽
2.数据封装
3.使用与实现相分离
形式定义:
ADT<抽象数据类型名>
{
数据对象:<数据对象的定义>
数据关系:<数据关系的定义>(一个或者多个关系)
基本操作:<基本操作的定义>
}
抽象数据类型=逻辑结构+抽象运算
也就是说抽象数据类型是建立在逻辑结构上的一些抽象的运算
数据对象数据关系逻辑结构要关注的问题,基本操作就是抽象运算关注的。
请添加图片描述

算法与算法分析

1.算法定义
求解一个特定任务的指令的有限序列。
算法是解决特定问题求解决步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。
2.算法的五个特征(基本特性)
(1)有穷性:在有限步(或有限时间)之后算法终止。
(2)确定性:算法的每一个步骤都具有确定的意义,不会出现二义性。
(3)可行性:算法中的操作都是已经实现的基本运算执行有限次来实现的。
(4)输入:有0个或多个输入量。
(5)输出:至少有一个输出量。
3.算法设计的要求
(1)正确性:
a.无语法错误
b.对n组输入产生正确结果
c.对特殊输入产生正确结果
d.对所有输入产生正确结果
(2)可读性:算法主要是为了人的阅读与交流
(3)健壮性:当输入数据不合法时,算法也能做出相关处理,而不是产生异常或莫名其妙的结果。
(4)高效与低储存量
算法设计的基本方法:
1.穷举型:逐一枚举和检验
2.迭代法:由一个量的原值求出新值,不断利用新值求出它的下一个新值,直到得到满意的解。
3.递推法:由已知至i-1规模的解,通过递推,获得规模为i的解。
4.递归法:把规模为N的问题分解成一些规模较小的问题,然后从这些小问题的解构出大问题的解。
5.动态规划法:用表来记录所有已解决子问题的解,在需要时再找出来已求得的解可以避免大量的重复运算,从而得到时间复杂度为多项式的算法。
4.算法的描述工具
1.自然语言
2.程序设计语言
3.流程图(框图)
4.伪码语言:是一种包括高级程序设计语言的三种基本结构(顺序,选择,循环)和自然语言成分的“面向读者”的语言。
5.类C:介于伪码语言与程序设计语言的一种表现形式。保留了c语言的精华,不拘泥于c语言语法细节,同时也增加了一些c++的成分。
5.算法效率的度量方法
1.事后统计方法:通过设计好的测试程序和数据,利用计算机计时器对不同算法编制的程序的运行时间进行比较,从而确定算法效率的高低。
缺陷:
必须依据算法事先编制好程序,这会花费大量时间。
时间的比较有计算机硬件和软件等环境因素,有时会掩盖算法本身的优劣。
算法的测试数据设计困难,并且程序的运行时间往往还与测试数据的规模有很大关系,效率高的算法在小的测试数据面前往往得不到体现。
2.事前分析估算算法:在计算机程序编制前,依据统计方法对算法进行估算。
3.函数的渐进增长:给定两个函数g和f,如果存在一个整数N,使得对于所有n>N,f总是比g大,那么就说f的增长渐进快于g。
6.算法的时间复杂度
·算法(程序)中基本操作(语句)重复执行的次数的总和。
·设n为求解的问题的规模,基本操作(语句)执行次数的总和称为语句频度,计为f(n)。
·时间复杂度称为T(n),T(n)=O(f(n))。
O(1)<O(log2n)<O(n)<O(nlog2n)<O(n^2)
<O(n^3)
<O(2^n)
<O(3^n)<O(n!)
7.算法的空间复杂度
·执行算法所需要的存储空间的大小
·记做,s(n)=O(f(n))),n为问题规模
·存储空间:寄存指令,常数,变量和输入数据,对数据进行操作的工作单元,实现计算所需用的空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值