学习数据结构(1)

    技术2023-07-12  92

    基本概念和术语 数据: 数据是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号介质的总称,是具有一定意义的数字、字母、模拟量等的通称。 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的值越来越大,那么它们在时间利用率的差异也会越来越大。

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

    Processed: 0.016, SQL: 9