数据结构与算法学习笔记——基本概念篇

数据结构与算法学习笔记(C语言)

1.数据结构的基本概念

1.数据:数据是描述客观事物的符号,是能够输入计算机并且被计算机所处理的对象

比如数字、字母、汉字、图像、音频等等,所有的数据在计算机中都用二进制表示,0101010101…能够用来表示世间万物

2.数据元素:数据元素是组成数据的、有一定意义的基本单位,在计算机中通常被作为整体处理,也被称为记录

比如一个个人、一部部手机等等,作为一个整体处理

3.数据项:一个元素可以由若干个数据项组成,数据项是数据不可分割的最小单位。

一个“数据元素”人——可以由头、身体、四肢这些“数据项”组成,这里考虑它们不可再分割,因为再分割下去,它们不再具有作为组成部分应有的功能,如果非要较真,分成细胞、分子、原子、夸克、胶子…(说不定哪天物理学家又发现各种更小的微粒)

4.数据对象:数据对象是性质相同的数据元素的集合,是数据的子集

比如今天拿华为手机来作为一个数据对象,华为是性质相同的手机的集合,华为手机又是手机的一个子集,毕竟手机还有小米、苹果、三星等等

5.数据结构:是相互之间具有一种或多种特定关系的数据元素的集合

数据之间不是独立的,就像人,马克思给人下的经典定义:就其本质而言,人不是单个人所固有的抽象物,在其现实性上,它是一切社会关系的总和。关键词:“关系

6.逻辑结构:是指数据对象中元素之间的相互关系

我们把现在用来研究的东西叫做对象,把一个班级的学生全部叫出来,这个班级的学生就是一个数据对象,看一下他们之间有什么相互关系,这个关系就是逻辑上的,毕竟思想形成人的伟大,帕斯卡尔曾论述过,“人是一根能思想的苇草”,我们看待事物,看待它们的关系,自然是逻辑上的

6.1集合结构:集合结构中的数据元素之间除了同属于一个集合外,没有其他关系

比如叫出来的学生,是学校刚刚通过分班级组合起来的学生,它们除了同属于三年级二班这个集合外,没有其他关系
在www.processon.com上制作

6.2线性结构:线性结构中的数据元素是一对一的关系,除了第一个元素,每一个元素都有一个直接前驱,除了最后一个元素,每一个元素都有一个直接后继(通常可以直接简称为前驱、后继)

刚刚叫出来的三年级二班的同学们,现在班主任给你们编个学号,张三,你是1号,李四,你是2号,王二,你是3号,麻子,你是4号…小明,你是29号,小红,你是30号,好了,30个同学已经全部有了自己的学号,这样他们之间有了一种线性关系,1号同学的后继是2号,2号同学的后继是3号…30号同学的前驱是29号
在www.processon.com上制作

6.3树形结构:树形结构中的数据元素之间存在一种一对多的层次关系

过了三天,班主任决定竞选一下班级的管理职位,然后通过毛遂自荐以及同学们的举荐,最后投票决定,选出来了班长、4个组长,那么二班的同学之间就形成了树形结构,一个班长直接管理4个组长,4个组长分别管理自己的下属组员
在www.processon.com上制作

6.4图形结构:图形结构中的数据元素之间是多对多的关系

又过了几天,同学们之间相互开始认识了,那么他们之间谁认识了谁的关系就可以用图来描述
在www.processon.com上制作

7.物理结构:物理结构是指数据的逻辑结构在计算机中的存储形式

逻辑关系在我们人的思想和语言中很好表达,比如小明喜欢小红,麻子是张三的上级等等,但是计算机需要表达处理这些数据以及他们的关系时,需要以一种方式存储下来,数据的物理结构又叫存储结构,包括以下两种

7.1顺序存储结构:把数据元素放在地址连续的存储单元里,用物理地址的连续来表达逻辑上的有序

可以把计算机的存储单元看成火车的一节节车厢,然后取出来相邻的三十节,把张三、李四、王二、麻子…小明、小红依次放进去,那么就用存储单元的连续表达了现实中逻辑上的有序

7.2链式存储结构:是把数据元素放在任意的存储单元里,这组存储单元可以是连续的,也可以不连续

体育课上,同学们三三两两、散散落落的分布在操场上,但是,每个人都知道自己的前一号是谁,自己的后一号是谁,关系并不乱。在C语言中,可以用指针保存后继的地址来表示前一个人知道自己的下一号是谁

8.数据类型:是指一组性质相同的值的集合以及定义在此集合上的一些操作的总称

比如C语言中的整形int,最早正整数就是人们抽象出来计数的数字,后来添加0表示什么也没有,又延伸到负整数不仅没有反而欠别人的,int类型就是属于整数的范围,并且有界限,毕竟计算机存储传输数据的能力有限,不能像人那样抽象记忆数字,int类型的操作包括四则等一些其他运算

9.抽象数据类型:抽象数据类型是具有类似行为的特定类别的数据结构的数学模型,以及定义在该模型上的一组操作

这个概念可能不好理解,让人迷惑,不知道和数据类型有什么区别,我的理解是,区别在于定义抽象数据类型的时候超脱具体实现,但是抽象数据类型又必须借助已经存在的数据类型加以实现。比如考虑兜里的人民币,以元为计量单位,反正是在0-10000(谁没毛病的话不在兜里放很多现金)之间的整数,而且可以增减,买东西啊,路上又捡钱了等等情况,用计算机具体实现的时候,可以用C语言的int类型表示,int douli_money

2.算法的基本概念

1.算法定义:算法是解决具体问题求解步骤的描述,在计算机中表示为指令的有限序列其中每一条指令表示一个或多个操作

比如麻子从家到学校的第一种算法:
1.向东走50米
2.向北走50米
第二种算法:
也可以描述为向东北走71米

2.算法的特性:输入输出、有穷性、确定性、可行性

2.1输入输出:算法具有零个或多个输入,具有至少一个输出

计算1+2就需要输入数字1、2,输出是3
麻子上学算法就没有输入,输出是通过两个步骤,麻子到达学校这个事实

2.2有穷性:算法在执行有限的步骤后,自动结束而不会出现无限循环,并且每一个步骤在可接受的时间内完成

比如为麻子上学提供一个新的思路:
1、往西南方向一直走,绕着地球走一圈
只需要一个步骤,步骤有限,但是完成这个步骤的时间是不可接受的

2.3确定性:算法的每一个步骤都有确定的含义,不会出现二义性

还是麻子上学的事儿,不能描述为
1.向东走
2.向北走
因为每一个步骤都描述的不确定,麻子也不知道向东走多远又向北走多远

2.4可行性:一个算法的每一步都是现实可行的,每一步都可以执行有限步骤完成

还是麻子上学,比如你告诉麻子
1.走去美国
2.走到空军基地偷一架飞机
3.驾驶飞机飞到学校
这你可以在头脑中规划好路线,甚至精确到米,设想1亿种偷走飞机的方法,跟麻子比一根手指表示有一种能偷走,还跟麻子查询开飞机的方法,麻子看你一眼,觉得你是个神经病,这不可行

3.算法的设计要求
3.1正确性:算法的正确性指算法至少应该具有输入、输出和加工处理无歧义性,能够正确的描述问题,得到问题的正确答案

这个反例很好举,考试的时候遇到证明题,东扯西拉拼凑一堆,最后所以得出某某结论,显然有违正确性

3.2可读性:算法是给人看的,算法应该便于阅读、理解和交流

比如我们写代码的时候一个良好的习惯是变量的命名有意义
必要的注释要写上
还有做人说话不能太抽象,不然会没朋友

3.3健壮性:当输入数据不合法时要能够做出相关处理,比如打印提示,而不是直接抛出异常或给出错误的结果

这就要求我们设计算法要考虑全面,比如写一个登录程序,密码由字母数字和下划线组成,用户不小心输入特殊符号,不能因此程序就崩溃,应该向用户给出提示

3.4时间效率高、存储量低:算法在满足上述需求后,应该尽量追求高效率、低存储

我们会讨厌那些运行起来慢如蜗牛的程序,也会讨厌那些占据大量存储空间的程序,提升算法效率、降低算法的存储量是我们对好的体验的不懈追求

4.算法效率的度量:对算法效率的评估应该抛开计算机的cpu、存储器这些硬件,抛开将算法写成程序所用的计算机语言,程序员的经验等等影响,从数学上将算法单拎出来进行比较,计算机科学家们发明了大O记法

大O记法忽略幂次前的常数项,忽略低次项,只保留随着输入规模的扩大,对算法的效率有最大影响的部分,衡量时间渐进复杂性

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
cda备考学习学习笔记——基础知识(二)主要涉及了计算机科学与技术领域的基本概念和知识。 首先,它介绍了计算机网络的基础知识。网络是将多台计算机通过通信链路连接起来,使它们能够相互通信和共享资源的系统。笔记中详细介绍了网络的组成、拓扑结构和通信协议等重要内容。 其次,笔记还解释了计算机系统的基本组成。计算机系统由硬件和软件两部分组成,其中硬件包括中央处理器、存储器、输入输出设备等,而软件则分为系统软件和应用软件。笔记详细介绍了各种硬件和软件的功能和作用。 此外,笔记还对数据库管理系统进行了介绍。数据库管理系统是一种用于管理和组织数据的软件系统,它能够实现数据的存储、检索和更新等操作。笔记中详细介绍了数据库的概念、结构和操作等内容。 最后,笔记还包括了算法数据结构的基础知识。算法是解决问题的一系列步骤和规则,而数据结构则是组织和存储数据的方式。笔记中介绍了常用的算法数据结构,如排序算法、树和图等。 总之,通过学习CDA备考学习笔记中的基础知识(二),我们能够更好地理解计算机网络、计算机系统、数据库管理系统以及算法数据结构等相关概念和知识。这些基础知识对于我们深入研究计算机科学与技术领域是非常重要的,也为我们日后的学习和工作奠定了坚实的基础。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值