学习数据结构(1)
基本概念和术语
数据:
数据是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号介质的总称,是具有一定意义的数字、字母、模拟量等的通称。
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的值越来越大,那么它们在时间利用率的差异也会越来越大。
(这次只是简单的提了一下关于时间复杂度的计算,具体如何计算会卸载下一篇中。本文中的概念皆学自《大话数据结构》,因是自学,多有一些浅显,用自自学的学习笔记)
- 数据结构学习笔记8--n个元素进栈,共有多少种出栈顺序?
- 数据结构经典算法学习之河内之塔(汉诺塔)
- 数据结构学习之单链表
- 文件关键字学习 严蔚敏讲数据结构笔记28
- 数据结构理论学习
- 数据结构学习之路-第三章:栈的应用
- 【学习点滴-数据结构-字符串】 字符串的堆分配方式实现和基本函数
- c++学习笔记8,数据结构
- 数据结构学习笔记3
- 数据结构学习笔记:串
- 算法与数据结构学习 10 链表操作
- (9) 数据结构入门概念小结--每天五分钟学习数据结构
- 爱喝酒的程序员如何学习数据结构
- (2) 数据结构的起源--每天五分钟学习数据结构
- 在学习PHP的过程中,什么时候才可以学数据结构和算法?
- 【数据结构学习1】关于数据结构的栈的理解
- 学习数据结构 -> 线性表 -> 线性表的介绍
- pandas学习--基础篇(文件读写、基本数据结构、常用函数、排序)
- 【深度学习】【Caffe源代码解读1】笔记19 Caffe的基本数据结构之Blob
- 数据结构学习——线索二叉树的遍历