您的位置:首页 > 理论基础 > 数据结构算法

学习数据结构(1)

2020-07-04 18:44 52 查看

基本概念和术语
数据:
数据是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号介质的总称,是具有一定意义的数字、字母、模拟量等的通称。
1.可以被计算机操作(处理)
2.可以输入到计算机中
(数据不仅仅包含整型、浮点型等数值类型,还包含了视频、声音、图像等非数值类型)

数据元素:(基本单位)
是组成数据的、有一定意义的基本单位,一般当做一个整体来处理。(也可称为节点和记录)

数据项:(最小单位)
一个数据元素可以由多个数据项组成,数据项是数据不可分割的最小单位。

数据对象:(数据的子集)
是性质相同的数据元素的集合;在不产生混淆的情况下,我们将数据对象简称为数据。
数据结构:
是相互之间存在一种或多种特定关系的数据元素的集合。
而数据结构又分为两种:1.逻辑结构 2.物理结构

逻辑结构:(数据对象中数据元素之间的相互关系)

  • 集合结构:在同一个集合中,除此之外没有别的关系。
  • 线性结构:数据元素之间一对一的关系(除了第一个元素外,每个元素都有且只有一个直接前驱元素;除了最后一个元素外,每个元素都有且只有一个直接后驱元素)。
  • 树形结构:数据元素之间一对多的关系。
  • 图形结构:数据元素之间多对多的关系。

物理结构:(逻辑结构在计算机中的存储形式)

  • 顺序存储结构:在内存中开辟一段连续的存储单元,如何将数据元素的地址存储在这些连续的存储单元里,这个时候数据间的逻辑关系和物理关系是一致的。
  • 链式存储结构:把元素放在任意的存储单元里,这些存储单元可以是连续的也可以是不连续的;这样的存储关系不能反映数据元素之间的逻辑关系。

为什么会出现数据类型:
因为在计算机中,内存的大小不是无限的,而不同数据所需要占用的内存也是不同的,所以分出了多种数据类型。
书中是这样描述抽象数据类型的:它是指一个数学模型及定义在该模型上的一组操作。

什么是抽象数据类型:
按照我对Java抽象类的理解,抽象数据类型就是将一个数据元素其中的数据项抽出来,如:
生物需要吃饭,而抽象就是抽出吃这一概念,但具体怎么吃,吃什么,就不是抽象考虑的范围了。

学习数据结构肯定离不了算法,就像你去电影院看梁山伯与祝英台,怎么可以只有梁山伯呢?
算法:
算法是用来解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。
算法的特性:输入、输出、有穷性、确定性和可行性。
算法设计的要求:正确性、可读性、时间效率高和存储量低。
算法效率的度量方法:事后统计法(不科学、不准确)和事前分析估算法。
所以我们这里介绍事前分析估算法,如:

//第一种算法
int sum = 0 ;n = 100;                           /*执行一次*/
for(int i = 1 ; i<= n; i++){			/*执行n+1次*/
sum+=i;					/*执行n次*/
}
System.out.println(sum);			/*执行一次*/

//第二种算法
int sum = 0 ,n = 100;				/*执行一次*/
sum = (1+n)/2;					/*执行一次*/
System.out.println(sum);			/*执行一次*/

如果让大家去选,大家一定会去选择第二种算法,都知道他的时间效率高,那么它为什么高呢?
我们可以去看一下他们执行的次数。
从上到下,第一种算法一共执行了1+(n+1)+n+1=2n+3次;而第二种算法一共执行了1+1+1=3次。
如果我们把循环看做一个整体,忽略掉头和尾的执行次数,那么这两个算法其实就是n次与1次。
再来一个例子:

int x = 0 ,sum = 0 , n = 0;
for(int i = 1 ; i < n ; i++){
for(int j = 0 ; j < n ; j++){
x++;
sum+=i;
}
}
System.out.println(sum);

这个时候我们可以清楚的知道,声明变量时执行了一次,第一个for循环的方法体执行了n次,而第二个for循环的方法体也执行了n次,所以就是n的平方,最后一个打印语句执行一次;如果我们忽略头尾,那么这个代码就需要执行n²次。
所以我们可以认为,随着n的值越来越大,那么它们在时间利用率的差异也会越来越大。

(这次只是简单的提了一下关于时间复杂度的计算,具体如何计算会卸载下一篇中。本文中的概念皆学自《大话数据结构》,因是自学,多有一些浅显,用自自学的学习笔记)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: