小白自学(1)——《数据结构(C语言)》

目录

​编辑

一、绪论

1.1 数据结构讨论的范畴

数据结构讨论什么?

程序设计:为计算机处理问题编制一组指令集

              1.怎么样进行处理?(策略是什么)  算法

              2.处理的信息怎么表示?(问题的数据模型是什么)数据结构

概括:

1.2 基本概念(名词和术语)

一、数据

二、数据元素

三、数据结构       

四、数据的存储结构

五、数据元素的映像方法

六、关系的映像方法(表示的方法),y>

七、数据类型

三、抽象数据类型(ADT)

ADT有两个重要特征:

        数据抽象 

        数据封装

        抽象数据类型的描述方法

        抽象数据类型的表示和实现

1.2 算法和算法的衡量

一、算法

1、有穷性

2、确定性

3、可行性

4、有输入

5、有输出

二、算法设计的原则

1、正确性

2、可读性

3、健壮性

4、高效率与低存储

三、算法的度量



本博客根据《数据结构》(C语言版)—严蔚敏 编写总结(仅供学习参考)

一、绪论

1.1 数据结构讨论的范畴

数据结构讨论什么?

N.Wirth教授提出:Algorithm(算法) + Data Structures(数据结构) = Programs(程序设计 )

程序设计:为计算机处理问题编制一组指令集

       计算机解题:计算机对某类信息进行某类处理

       那么对此就有两个问题:

              1.怎么样进行处理?(策略是什么)  算法
              2.处理的信息怎么表示?(问题的数据模型是什么)数据结构

那么在这里举出两个例子:(链接到的百度百科,可以不看,就是这么个意思)

        eg1:数值计算的程序设计问题:①结构静力分析计算——线性代数方程组

                                                             ②全球天气预报——环流模式方程

        eg2:非数值计算的程序设计问题:① 计算机对弈—算法:对弈的规则和策略

                                                                                           模型:棋盘、棋子怎么表示

                                                                ②某某数据库管理——算法:项目?页面?如何管理?等

                                                                                                    模型:表格和数据库

综合各种程序设计问题,抽取它具体的物理含义就可以得到数据模型

概括:

官方:数据结构描述现实世界实体的数学模型(非数值计算)及其上的操作在计算机中的表示和实现

1.2 基本概念(名词和术语)

一、数据

数据:所有能被输入到计算机中,而且可以被计算机处理的符号的集合

由此可以看出:数据是计算机操作对象的总称、也可以说是计算机处理信息的某种载体

        是不是可以理解为:数据就是计算机的灵魂,我们玩原神的时候无论是手机还是鼠标,都是通过数据来操作到你的角色的

二、数据元素

数据元素:数据中的一个“个体”,数据结构中的基本单位

eg:原神角色(数据元素)

姓名武器神之眼所属国度出生日期武器
月  

                                                                       (出生日期) 组合项

三、数据结构       

数据结构:带结构的数据元素集合

eg:一个含12位数的十进制数可以用三个4位数的十进制数表示

        5201,1120,1314 —— a1(5201), a2(1120), a3(1314) —— 大家可以猜一猜1120是谁呢

        这里:a1、a2、a3有“次序”关系  <a1,a2>、<a2,a3>

        5201,1120,1314  ≠ 5201,1314,1120

        这就好比在说:A接W接外圈刮,接无情铁手接A接A打出血怒,接一刀斩 完美单杀

        而换了个顺序就是:A接W接外圈刮,接一刀斩,接无情铁手接A接A打出血怒 被对面丝血反杀 很明显是不一样的吧

数据的逻辑结构线性结构、树形结构、图/网状结构、集合结构

数据结构的形式定义数据结构——二元组 Data_Structures = (D,S)

其中:D 数据元素的有限集    S是D上关系的有限集

四、数据的存储结构

存储结构:逻辑结构在存储器上的映像(表示)

五、数据元素的映像方法

用二进制位(bit)的位串表示数据元素

例如:

        (321)= (501)= (101000001)

      (十进制)(8进制)    (二进制)

六、关系的映像方法(表示<x,y>的方法)

顺序映象:以存储位置的相邻表示后继关系y的存储位置和x的存储位置之间差一个常量C

而C是一个隐含值,整个存储结构中只含元素本身的信息

a1Ca2Ca3C

链式映象:以附加信息(指针)表示后继关系

需要用一个和x在一起的附加信息指示y的存储位置

        

 PS:在不同编程环境中,存储结构可能有不同描述方法

        当用高级程序设计语言进行编程时,通常可用高级编程语言中提供的数据类型描述

例如:以3个带有次序关系的整数表示一个长整数时,可利用C语言中提供的整数数组类型,定义长整数为: 

typedef int Long_int[3]

七、数据类型

        当用高级程序设计语言进行编写中,必须对程序中出现的每个变量、常量或表达式,明确说明它们所属的数据类型。

        数据类型是一个值的集合和定义在此集合上的一组操作总称

三、抽象数据类型(ADT)

        数学模型以及定义在此数学模型上的一组操作操作

ADT有两个重要特征:
        数据抽象 

        用ADT描述实体时,强调本身特征,以及其所能完成的功能、以及它的外部用户接口(外界使用它的方法)

没错,这就是抽象(都能看出来这是王手小姐吧),甚至还有技能,其实还可以更简单

--------------------------------------------------------------------------------------------------------------------------

抽象数据类型复数:

        数据对象:D = { e1,e2 | e1,e3∈RealSet }

        数据关系:R1  = { <e1,e2> | e1是复数的实数部分,

                                                | e2是复数的虚数部分 }

        基本操作:InitCOmplex(&Z,v1,v2)、DestroyComplex(&Z)、GetReal(Z,&realPart)等

        在使用时可以直接调用这些接口

        数据封装

        将实体的外部特征和内部实现细节分离,并且对外部用户隐藏内部实现的细节

        抽象数据类型的描述方法

        抽象数据可以用(D,S,P)三元组表示

                D:数据对象  S是D上的关系集  P是对D的基本操作集

        抽象数据类型的表示和实现

        抽象数据类型需要通过固有数据类型(高级编程语言中已实现的数据类型)来实现

1.2 算法和算法的衡量

一、算法

算法是为了解决某类问题而规定的一个有限长的操作序列

算法是对特定问题求解步骤的一种描述,算法具有如下特性:有穷性、确定性、可行性、输入、输出 

1、有穷性

        对于任意一组合法输入,在执行有穷步骤之后一定能结束,也就是:算法中每个步骤都能在有限时间内完成                

2、确定性

        对于每种情况下所有执行操作,在算法中都有确切的规定,使算法的执行者或阅读者都能明确其含义及如何执行。并且在任何条件下,算法都只有一条执行路径

3、可行性

        算法中的所有操作都必须足够基本,都可以通过已经实现的基本操作运算有限次实现它

4、有输入

        作为算法加工对象的量值,通常体现为算法中一组变量。有些输入量需要在算法执行过程中输入,而有的算法表面没有输入,实际上被嵌入算法中

5、有输出

        它是一组与“输入”有确定关系的量,是算法进行信息加工后得到的结果,这种确定关系就是算法的功能

二、算法设计的原则

设计算法通常考虑一下目标:正确性,可读性,健壮性,高效率与低存储量需求

1、正确性

        首先,算法应满足特定“规格说明”方式给出的需求。

        其次,对算法是否“正确”理解分四个层次

                a. 程序中不含语法错误

                b. 程序对于几组输入数据能够得到满足要求的结果

                c. 程序对于精心选择的、典型、苛刻切带有刁难性的几组输入数据都能得到要求的结果

比如在提瓦特,如何用一支队伍同时满足:伤害、大世界体验、深渊都满足的队伍?

这时候要是有:拐 奶 主c 协同(以这个为模板可以理解为上面的东西)

                d. 程序对一切合法的输入数据都能满足说明要求的结果

2、可读性

        算法主要是为了人的阅读和交流,其次才是机器执行

        晦涩难懂的程序容易隐藏较多的错误

3、健壮性

        当输入数据非法时,算法也能适当做出反应或进行处理,而不会是产生莫名其妙的结果

4、高效率与低存储

三、算法的度量

  • 时间复杂度

  • 空间复杂度

  • 衡量一个算法是否优秀,则主要从以下几点考虑:正确性,可读性,健壮性,时间复杂度,空间复杂度

***********************************************    未完待续     ***********************************************

  • 9
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值