NCRE公共基础——数据结构

数据结构

  • 对长度为n的线性表排序,最坏情况下,比较次数不是n(n-1)/2的排序方法是堆排序
    • 直接插入排序、快速排序、冒泡排序都是。
    • 堆排序最坏情况下比较次数为n*log2n。
  • 栈,先进后出、后进先出。
    • 只能在栈顶这一端插入和删除数据。
  • 算法的空间复杂度指执行算法所需要的存储空间,包括算法程序所占的空间、输入的初始数据所占的空间以及算法执行过程中所需要的额外空间(包括临时工作单元)。
  • 二叉树的重要性质:度为0的结点总是比度为2的结点多一个。
    • 若有5个度为二的结点,则有六个叶子结点(度为零)。
  • 算法的有穷性是指算法程序的运行时间是有限的。
    • 有穷性指算法在有限的步骤一定会结束。算法与程序的区别在于:程序可以陷入“死循环”,算法必须在有限时间内结束。而数据量有限、长度有限均不能保证程序可以结束,例如死循环“在屏幕上不停的输出一”仅一条语句一个数据,也会陷入死循环,无法结束。
  • 算法的复杂度包括时间复杂度和空间复杂度。时间复杂度是算法执行过程中所需要的基本运算次数,空间复杂度是执行程序所需要的存储空间。
  • 树有明显的层次特性,是一对多的关系,属于非线性结构
    • 二叉树是树的一种。
  • 栈、队列都是线性结构。
    • 带链栈是用链表存储的堆栈。
    • 带链队列是用链表存储的队列,循环队列是用数组存储的队列并空间首尾相接,允许当使用完最后一个空间后又回过头来使用第一个空间,它是队列的一种顺序存储结构。需要通过rear和front两个指针来反映队列的状态。循环队列运行起来后循环队列目前的元素个数用rear-front求得,若结果为负,加数组总容量即可。
      • 循环队列中元素的个数是由队头指针和队尾指针共同决定的。
  • 顺序存储(数组)、链式存储(链表)是数据结构的两种存储方式,无论线性结构还是非线性结构,都既可用数组存储,也可用来链表存储
    • 例如二叉树是非线性结构,如果是完全二叉树也可用数组来存储。
    • 顺序结构的存储由于是数组,各空间只能是连续的;链式结构的存储空间既可以是连续的也可以是不连续的
    • 顺序结构和链式结构都可以存储有序表(即排序后的数据)。
    • 链式结构除要保存数据外,还要保存指针;而顺序结构只保存数据即可,故顺序结构更节省存储空间

套题

  • 最坏情况下时间复杂度:冒泡排序、选择排序、插入排序、快速排序均相同,为n(n-1)/2。
    • 希尔排序为nr(n<2,所以小于n2),堆排序为n*log2n。
  • 最坏情况下排序速度最快的的是希尔排序
  • 顺序查找有几个元素就要找几次,最坏情况下需要比较的次数为n。
    • 在长度为n的有序列表中进行查找,最坏情况下需要比较的次数是n。
  • 若二叉树的前序序列与中序序列相同,则说明二叉树各结点(除叶子结点)都只有右分支,没有左分支
    • 前序序列ABCDEF,根结点为A,依次分支为B、C、D、E、F为叶子结点,则后序序列为FEDCBA。
  • 数中结点数=所有结点的度数+1。
    • 某树的度为3,且度为3的结点数为5,度为2的结点数为4,没有度为1的结点。设叶子结点为x个,则5+4+0+x=3乘5+2乘4+1乘0+0乘x+1,所以x=15。
  • 数据流图是需求分析的工具,表达数据在软件中的流动和处理,反映软件的功能。
  • 软件详细设计的工具:
    • PAD图
    • 程序流程图
    • N-S图
  • 总体设计的工具:
    • 系统结构图
  • 在面向对象程序设计中,将任何一个对象都看做由两部分组成:属性(数据)+方法(操作)。
    • 类是对对象的抽象,对象是类的实例。
    • 对象间的通信是靠消息传递。
    • 类和对象的特点有:
      • 唯一标识性:对象是可区分的,且由对象的内在本质来区分,而不通过描述区分;
      • 分类性:可以将具有相同或类似属性、方法的对象抽象成类(模板),类是对对象的抽象,对象是类的实例;
      • 封装性:
      • 继承性:
      • 多态性:
      • 模块独立性好。
    • 类中包含对数据的操作(方法)。
    • 类中包含数据(属性)和方法(或操作)。
    • 类具有抽象性。
  • 概念设计不涉及具体的数据库管理系统,更不涉及具体的数据库文件。可以简单地认为概念设计就是把要管理的现实世界中的数据抽象为E-R模型,并画出E-R图。
    • 概念模型是数据库的数据模型的一部分,面向客观世界和用户,并与数据库管理系统无关。
  • 数据库字段间的联系:
    • 1:N
    • 1:1
    • M:N
    • N:1
  • 不是多个列的组合,满足2NF。
  • 存在传递依赖,不满足3NF。

文件

  • 文件指针是程序中用FILE定义的指针变量。
    • 文件指针不是文件位置指针,不表示当前读写数据的位置。
    • 把文件传给fscanf函数,就可以向文本文件中写入任意的字符。【错】
    • 文件指针指向文件在计算机中的存储位置。【错】
  • 读取二进制文件的函数调用形式为:
    • fread(buffer,size,count,fp);
      • buffer一个内存块的首地址,代表读入数据存放的地址。
      • size一个内存块的字节数
      • count一个整型变量,代表待读取的数据的字节数
      • fp一个文件指针,指向待读取的文件
  • “r”、“w”只能写不能读、“wb+”
  • fwrite函数用于以二进制形式输出数据到文件
  • getchar函数用于
  • gets函数用于从终端读入字符串
  • fputs函数用于把字符串输出到文件
  • *pf?
  • fwrite函数的参数意义?四个?(输出的字符串,数字,数字,指针位置)
  • rewind函数(指针名)文件指针回到文件开头。
  • 文件由数据序列组成,可以构成二进制文件或文本文件。
  • EOF是在库函数文件中定义的符号常量。
    • 值不为零。
    • fgets函数读入最后一个字符时,返回值不是EOF。!
    • 文本文件和二进制文件都可以用EOF作为文件结束标志。【错】
      • EOF只能作为文本文件的结束标志,其值为-1。
      • 不能作为二进制文件的结束标志。
  • fp一定义为指向某文件的指针,且没有读到该文件的末尾,则C语言函数feof(fp)的函数返回值是0;读到末尾返回值为非零值。
  • 标准库函数fgets(s,n,f)的功能是从文件f中读取长度不超过n-1的字符串存入指针s所指的内存
  • 在C语言中调用fopen函数就可把程序中要读、写的文件与磁盘上实际的数据文件联系起来。
    • fopen函数的参数是指针名!
    • fopen函数的返回值赋给?
    • fopen函数的返回值为null时?
  • fread是对文件进行输入(以二进制方式读文件)的库函数。
    • fwrite、fprintf、fputc都可以对文件进行输出,是库函数。
  • 文件指针是指针类型的变量。
    • 调用scamf函数向文本文件写入?
    • 文件指针不能同时指向不同文件。
    • 文件指针的值是文件?

编写于2021/3/22日。

猜你喜欢

转载自blog.csdn.net/weixin_52777510/article/details/115255005
今日推荐