计算机公共基础知识

1. 计算机系统组成

  • 计算机系统分为

    1. 硬件系统
      实实在在的硬件,是计算机工作的基础。
    2. 软件系统(核心)
      指挥计算机工作的各种程序的集合。

– 计算机硬件系统

硬件是机械装置和电子线路组成,计算机工作的物质基础,计算机的运算速度、存储容量、计算精度、可靠性很大程度上取决于硬件配置。

- 计算机5个基本部分

运算器控制器 合称为中央处理器 CPU (central Processing Unit)

  1. 运算器
    …主要功能:算术、逻辑运算。
    …由算术逻辑单元ALU(Arithmetic And Logic Unit)、累加器AC、数据缓冲寄存器DR、状态寄存器SR、通用寄存器GR组成。

  2. 控制器
    …主要功能:取出指令、翻译指令、分析指令、发出控制信号。
    …由程序计数器PC、指令寄存器IR、指令译码器ID、时序产生器、操作控制器。

  3. 存储器
    …要功能:读写程序和数据。
    …分为程序存储区、数据存储区和栈。

         1. 内存储器/内存/主存...是计算机信息交流中心。... 通过输入输出的程序和数据最初送入内存,CPU要处理的数据间接取自内存(大部分路过寄存器传输)。关机自动断电,无法保存数据。2. 外存储器/外存/辅存...长期存放暂时不用的程序和数据。...外存不和计算机其他部件直接交换数据,只和内存交换(成批)。...类型:半导体器件(内存),磁性材料(磁盘),光介质(光盘)。
    
  4. 输入设备
    …用来接受用户输入的原始数据和程序,并转变为计算机可识别的形式丰放到内存中。
    …常用:键盘、鼠标、扫描仪、光笔、数字化仪、麦克风…

  5. 输出设备
    …用于将存放在内存中由计算机处理的结果转变为人们所能接受的形式。
    …常用:显示器、打印机、绘图仪、音响…

– 计算机软件系统

程序、数据及其有关技术文档资料等称为计算机软件

  1. 祼机
    只有硬件没有软件支持的计算机。
  2. 软件分类1…
    1. 系统软件
      管理、监控和维护计算机资源的软件。
      用来扩大计算机的功能、提高计算机工作效率、方便用户使用计算机的软件。
      eg:操作系统、程序设计语言、语言处理程序、数据库管理程序、系统辅助处理程序
(1)操作系统(Operating System,简称OS)计算机软件基本,最底层的软件,控制所有在计算机上运行的程序并管理整个计算机的资源。eg:Windows、UNIX、Linux、DOS等
(2)程序设计语言a.机器语言二进制代码表示的指令集合,由计算机直接识别和执行的计算机语言。优点:执行效率高、速度快。缺点:直观性差、可读性不强。b.汇编语言符号化的机器语言。它用助记符来表示指令中的操作码和操作数的指令系统。优点:容易记忆、可读性好。缺点:编制效率不高、难度较大、维护困难。c.高级语言与计算机的指令系统无关,接近人类的自然语言。优点:易学易记、便于书写和维护缺点:需要转换。eg:Fortran、C、Visual Basic、Delphi、Java等(3)语言处理程序是将计算机不能直接执行的非机器语言编写的程序翻译成能直接执行的机器语言的翻译程序。【1.】源程序用程序设计语言编写的程序。(计算机不能直接识别和执行)【2.】翻译方式a.编译方式把源程序用受益人编译程序翻译成机器语言的目标程序,然后再链接成可执行程序,运行可执行程序后得到结果。目标程序和可执行程序都是以文件方式存在磁盘上。再次运行时不必重新解释执行。b.解释方式用解释程序将其逐条解释,逐条执行,执行完后只能得到结果,不会保存解释后的机器代码,再次运行时还要重新解释执行。
(4)数据库管理系统组成:数据库(Data Base,DB)、数据库管理系统(DBS)eg:Visual Fox Pro、Oracle、Access、SQL Server等
(5)系统辅助处理程序/软件研制开发工具/支持软件/工具软件主要有编辑程序、调试程序、装配和连接程序、测试程序等

编译方式解释方式

  1. 软件分类2…
    2. 应用软件
    为解决实际问题所开发的软件的总称。

    1. 分类
      a.通用软件
      …文字处理软件(Word)、表格处理软件(Excel)等
      b.专用软件
      …财务管理系统、计算机辅助设计软件(CAD)、应用数据库管理系统等

2. 数据结构与算法

程 序 = 数据结构 + 算 法 ——沃思(Nikiklaus Wirth)

– 算 法

算法(Algorithm):解题方案的准确而完事的描述。(对操作的描述,即操作步骤。)

- 基本特征

  1. 有穷性(Finiteness)
    一个算法应包含有限的操作步骤而不能是无限的。
    eg:算法不可以的无限循环的。设x=0,循环x=x+1,结束条件是 x<0。
  2. 确定性(Definiteness)
    算法中的操作都应是确定的,而不是含糊,模棱两可的。
    每个步骤要有每个步骤的含义,要是十分明确无误的。
  3. 可行性(Effectiveness)
    一个算法要可以有效地执行,即算法描述的每一步都可通过已实现的基本运算执行有限次来完成。
  4. 输入(Input)
    在执行算法时需要从外界(用户)取得必要的信息。
  5. 输出 (Output)
    算法的目地是为了求解,“解”就是输出。一个算法可以有一个或多个输出。没有输出的算法是没有意义的。

- 复杂度

设计一个算法时,要考虑到算法的 执行速度慢快(时间复杂度大小)存储空间大小(空间复杂度大小)

  1. 时间复杂度
    指执行算法所需要的计算工作量。
    …与所用的计算机、程序设计语言无关,而且与算法实现过程中的细结无关。算法的工作量用算法在执行过程中所需要的基本运算作为基本运算。
  2. 空间复杂度
    指执行算法所需要的内存空间。
    …一个算法所占用的存储空间包括 算法程序所占用的空间、输入的初始数据占用的存储空间、算法执行过程中所需要的额外空间(算法程序执行过程中的工作单元、某种数据结构所需要的附加存储空间)。

– 数据结构

数据结构(Data Structure):对数据的描述,即在程序中要指定数据的类型和数据的组织形式。

  • 数据(Data)
    计算机可以保存和处理的数据、字母和符号。

  • 数据元素(Data Element)\结点\记录
    数据的基本单位,即数据集合中的个体。数据元素与数据元素之间总是相互关联的

  • 数据处理
    对数据集合中的各元素以各种方式进行运算(插入、删除、统计、查找、更改)。

  • 数据结构(Data Structure)
    相互有关联的数据元素的集合(向量、矩阵)。

  • 数据结构要解决的问题

    1. 数据的逻辑结构(Logical Structure)
      数据集合中各数据元素之间所固有的逻辑关系。与它们的物理位置(存储位置)无关。

      1. 基本要素: B = ( D , R )
        B:数据结构。
        D:数据元素的信息。
        R:各数据元素之间的前后件关系。
        常见种类:
        …a.集合:元素之间只同属一个集合,无其他关系。
        …b. 线性结构
        …c.树形结构
        …d.图形结构/网络结构
    2. 数据的存储结构(Storage Structure)
      在对数据进行处理时,各数据元素在计算机中的存储关系。

      1. 顺序存储方式
      2. 链接存储方式
      3. 索引存储方式
      4. 散列存储方式
    3. 对各种数据结构进行的运算。

- 线性结构与非线性结构

  • 非空的数据结构要满足两个条件则为线性结构/线性表 ,反之为非线性结构

    1. 有且只有一个根结点。
    2. 每个结点最多只有一个前件,也最多只有一个后件。
  • 数据结构分为两大类:
  1. 线性结构
    元素之间存在一对一的相互关系。结点要按逻辑关系顺序排列成一个“锁链”。

     例1: 书《我最帅》的数据结构可以表示成:B=(D,R)D={《我最帅》,第六六六六页,内容}R={(《我最帅》,第六六六六页),(第六六六六页,内容)}该为线性结构。其中结点”《我最帅》“为根结点(没有前件),结点”第六六六六页"为内部结点(除根结点和终端结点外的结点),结点”内容“为终端结点/叶子结点(没有后件)。
    
  2. 非线性结构

    1. 树形结构
      元素之间存在一对多的相互关系。具有分支、层次等特性,形态像你家门口的大树。

      例2: 计算机硬件系统的数据结构可以表示成:
      B=(D,R)
      D={外围设备,输入设备,输出设备}
      R={(外围设备,输入设备),(外围设备,输出设备)}
      该为树形结构。其中结点”外围设备“为根结点,结点"输入设备"和”输出设备“为终端结点/叶子结点。
      
    2. 图形结构/网络结构
      元素存在多对多的相互关系。图形结构广泛采用的是国际标准化组织(ISO)在1979年提出的开放系统互连(OSI-Open System Interconnection)的参考模型。

- 线性表 / 顺序存储结构

  • 线性表(Linear List)
    由一组数据元素组成。

    1. 线性表的长度是由数据元素的个数决定的。
      eg:一年的月份号(1,2,3,…,12)是一个长度为12的线性表。
    2. 根结点没有前件。
    3. 内部结点有且只有一个前件和一个后件。
    4. 叶子结点/终端结点没有后件。
    5. 空表:表中没有结点,长度为0。
  • 顺序存储结构
    顺序表:用顺序存储结构存储的线性表

    1. 顺序表中所有元素所占的存储空间是连续的(存储空间中按逻辑顺序进行存放)。
      假设长度为n的顺序表(a1,a2,···,ai,···,an)中每个数据元素所占的存储空间相同(假设都为k个字结),假设第i个数据元素 a i 的存储地址用ADR(ai)表示,则求出各元素的存储地址为:
      ADR(ai)=ADR(a1)+(i-1)k

    顺序表的基本运算:

    1. 插入
      在顺序表中指定位置处插入一个新的元素。
    2. 删除
      在顺序表中删除指定的元素。
    3. 查找
      在顺序表中查找满足给定条件的元素。
    4. 排序
      按要求重排顺序表中各元素的顺序。
    5. 分解
      按要求将一个顺序表分解成多个顺序表。
    6. 合并
      按要求将多个顺序表合并成一个顺序表。
    7. 复制
      复制一个顺序表。
    8. 逆转
      逆转一个顺序表。

- 线性链表 /单链表 / 链式存储结构

  1. 链表不限制数据的物理存储状态,物理位置是随机的。

  2. 链表的构成:

    • 头指针:永远指向链表第一个结点的位置,用于指出链表的位置,便于找到链表。
    • 存储结点

      - 头结点:链表的第一个结点。不 存任何数据的空结点,为了方便解决某些实际问题。
      - 首元结点:链表中第一个存有数据的结点。
      - 其他结点:链表中其他的结点。
    • 指针域:指出后件的结点(常见)。
      双向链表:每个结点设有两个指针域,一个指向前件,一个指向后件。

- 索引存储方式

  1. 采用附加索引表的方式来存储结点信息。

  2. 索引表由若干索引项(关键字、地址)组成。

    • 关键字能唯一标识一个结点的数据项。
  3. 索引存储方式分为:
    1. 稠密索引:
    每个结点在索引表中都有一个索引项。其中,索引项的地址指示出结点所在的存储位置。
    3. 稀疏索引:
    一组结点在索引表中只对应一个索引项。其中,索引项的地址指示出一组结点的起始存储位置。

- 散列存储方式 / Hash存储方式

根据结点的关键字直接计算出该结点的存储地址。

– 栈和队列

  • 栈(Stack):限定仅在一端进行插入和删除运算的线性表。形态像水杯,数据像水杯中的水。
    操作方式:“先进后出(First In Last Out)” 或 “后进先出(Last In First Out)”。

    1. 栈顶(Top):允许插入与删除的一端。
    2. 栈底(Bottom):不允许插入与删除的一端。

  • 队列(Queue):限定仅能在表的一端进行插入、而在表的另一端进行删除的线性表。形态像自来水管。
    操作方式:“先进先出(First In First Out)” 或 "后进后出(Last In Last Out)”。

    1. 队头:允许删除的一端。用指针front指向队头。
    2. 队尾:允行插入的一端。用指针rear指向队尾。

- 带链的栈

链栈:用链式存储结构来存储的栈。

- 顺序栈的基本运算

顺序栈:用顺序存储结构来存储的栈。

  • 基本运算:

    1. 入栈运算
      在栈顶位置插入一个新元素。
      步骤:

      1. 修改指针,将栈顶指针加1(Top加1)。
      2. 在当前栈顶指针所指位置将新元素插入。
    2. 出栈运算
      取出栈顶元素并赋给某个变量。
      步骤:

      1. 将栈顶指针所指向的栈顶元素读取后赋给一个变量。
      2. 将栈顶指针减1(Top减1)。

      当栈顶指针为0(Top=0)时,说明栈空,这时将不能进行出栈运算。

    3. 读栈运算
      将栈顶元素赋给一个指定的变量。栈顶指针不变。
      当栈顶指针为0(Top=0)时,说明栈空,读不到栈顶的元素。

- 带链的队列

链队列:用链式存储方式来存储的队列。

- 循环队列的基本运算

顺序队列:用顺序存储结构来存储的队列。
循环队列:把顺序队列第一个存储位置(front)与下一个存储位置(rear)相连,从而使顺序队列形成逻辑上的环状空间。

  • 基本运算:
  1. 入队运算
    在循环队列的队尾位置插入一个新元素。
  2. 出队运算
    在循环队列的队头位置退出一个新元素斌赋给指定的变量。

– 树与二叉树

- 树

  • 树(tree):一种非线性结构。
  • 树形数据结构特征:所有数据元素之间的关系有非常明显的层次关系(层次结构)。非常像大自然的树枝结构。
  • 根结点(简称 ):有且仅有一个没有前件的结点。
    eg:图中,A为根结点。
  • 叶子结点:没有后件的结点。
    eg:图中,E、F、G、H、I、J为叶子结点。
  • 父结点:每个结点只有一个前件。
    eg:图中,因为A没有前件,所以A没有父结点;A为B、C、D的父结点;C为G的父结点。
  • 子结点:每个结点有多个后件。
    eg:图中,B、C、D为A的子结点;G为C的子结点。
  • 结点的度:在树中所拥有后件的个数。
    eg:图中,根结点A的度为3;结点B的度为2;结点C的度为1;叶子结点的度为0。
  • 树的度:所有结点中度数最大的结点的度。
    eg:图中,树的度为3。
  • 树的深度:树的最大层数。
    eg:图中,树的深度为3。
  • 子树:树中以某个结点的一个子结点为根构成的树。
    eg:图中,A有3颗子树,分别为B、C、D为根结点;结点C有1颗子树,为G为根结点。
    ⚠️:叶子结点没有子树。

- 二叉树