12.12章总结

对数据结构理解:
为什么数据结构很重要

    首先为什么要开发各种各样的软件,目的只有一个:就是利用计算机来为人们处理各种数据并以一定的形式展现出来供用户使用。随着计算机的应用范围的不断扩大,计算机所需要处理的数据越来越复杂,并且规模越来越大,计算机所处理的数据已不再是单纯的数值数据,而更多的是非数值数据。

    另一方面,现实中需要处理的数据并不是杂乱无章的,它们一定有内在的各种联系,但这需要算法设计人员去总结、归纳、建模、然后抽象出一个具体的模型来表示—,我们将这个模型成为数据的逻辑结构。然后聪明的设计师再围绕这个创建的逻辑结构总结设计出一套处理方法,这样,数据有了,模型有了,算法有了,在理论上问题就可以解决了。剩下的就应该交给计算机去做了,但以上都是基于逻辑上的设计,计算机才不懂这些。所以接下来还需要对应的存储结构来将要处理的数据先存储到计算机中,再将那些处理逻辑(算法)用相应的代码实现,计算机才能对数据进行有效的处理。 

数据结构研究的主要对象是数据的结构(不研究数据,因为数据在系统中的存储都是二进制)

数据结构分为两种:逻辑结构和物理结构

逻辑结构:
    是指元素和元素之间逻辑关系的结构,也就是元素前后之间的联系,与数据储存的位置无关

物理结构:存储结构

数据元素之间相互联系的方式称之为逻辑结构,数据元素的逻辑结构通过相互之间的关系分为:

2.1、集合,元素之间没有关系,单独存在;

2.2、线性结构,数组或链表表示的是1对1的关系;

2.3、树,二叉树是1对2的关系,普通树是1对多的关系;

2.4、图,图是多对多关系,节点表示元素,边表示节点之间的关系,有向边可以表示有向图。

5.计算机中的数据
数据
数据就是用文字、数字、图形、图像、声音等方式对人、事件、事物等进行的描述。在计算机科学中,数据是指所有能输入计算机并能被计算机程序处理的符号的总称,数字、文本、音频、图像、和视频等统称为数据。
数据结构
   数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或者多种特定关系的数据元素集合。通常情况下,精心选择的数据结构可以带来更高效的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
   数据结构是ADT(抽象数据类型)的物理实现。
   程序 = 数据结构 + 算法
   算法是为了解决问题而设计的,数据结构是算法需要处理问题的载体。
   1.顺序表:顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。
   将表中元素一个接一个的存入一组连续的存储单元中,这种存储结构是顺序结构。
   2.链表:链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,操作复杂。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是O(logn)和O(1)。
   使用链表结构可以克服数组链表需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。但是链表失去了数组随机读取的优点,同时链表由于增加了结点的指针域,空间开销比较大。链表最明显的好处就是,常规数组排列关联项目的方式可能不同于这些数据项目在记忆体或磁盘上顺序,数据的存取往往要在不同的排列顺序中转换。链表允许插入和移除表上任意位置上的节点,但是不允许随机存取。链表有很多种不同的类型:单向链表,双向链表以及循环链表。链表可以在多种编程语言中实现。像Lisp和Scheme这样的语言的内建数据类型中就包含了链表的存取和操作。程序语言或面向对象语言,如C,C++和Java依靠易变工具来生成链表。
   3.栈:栈是限定仅在表头进行插入和删除操作的线性表。要搞清楚这个概念,首先要明白”栈“原来的意思,如此才能把握本质。"栈“者,存储货物或供旅客住宿的地方,可引申为仓库、中转站,所以引入到计算机领域里,就是指数据暂时存储的地方,所以才有进栈、出栈的说法。 
   首先系统或者数据结构栈中数据内容的读取与插入(压入push和 弹出pop)是两回事!插入是增加数据,弹出是删除数据 ,这些操作只能从栈顶即最低地址作为约束的接口界面入手操作 ,但读取栈中的数据是随便的没有接口约束之说。很多人都误解这个理念从而对栈产生困惑。 [1] 而系统栈在计算机体系结构中又起到一个跨部件交互的媒介区域的作用 即 cpu 与内存的交流通道 ,cpu只从系统给我们自己编写的应用程序所规定的栈入口线性地读取执行指令, 用一个形象的词来形容它就是pipeline(管道线、流水线)。cpu内部交互具体参见 EU与BIU的概念介绍。  
   栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。
   栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。插入一般称为进栈(PUSH),删除则称为退栈(POP)。栈也称为后进先出表。栈可以用来在函数调用的时候存储断点,做递归时要用到栈!

计算机常用的编码方式
1.ASCⅡ
在这里插入图片描述
2.扩展ASCⅡ
在这里插入图片描述
3.Unicode
在这里插入图片描述
4.UTF-8
在这里插入图片描述

5.3算法
算法是一切程序设计的灵魂和基础。
很多开发者都知道“程序=数据结构+算法”这个著名的公式,简单点来说,我更喜欢表单成为“后台程序=数据+逻辑”。

1 什么是算法?
字面含义:
算法是用于计算的方法,通过这种方法可以达到预期的计算结果。
其它专家说:
算法是解决实际问题的一种精确描述方法、算法是对特定问题的求解步骤的一种精确描述方法。
广泛定义:
算法是模型分析的一组可行的、确定的和有穷的规则。
通俗的讲:
算法可以理解为一个完整的解题步骤,由一些基本运算和规定的运算顺序构成。

再简单的讲:
算法:解决问题 的方法。

特点:有穷性 确切性 输入 输出 可行性
2 算法分类
2.1 按照应用来分类
基本算法、数据结构算法、几何算法、图论算法、规划算法、数值分析算法、加密算法、排序算法、查找算法
2.2 按照确

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值