计算机二级公共基础知识(一)——数据结构与算法

数据结构与算法

【1】算法的概念

  • 算法:指一组有穷的指令集,是解题方案的准确而完整的描述
  • 算法的特征:
  1. 确定性:每一个步骤都有明确的意义
  2. 有穷性:算法必须能在有限的时间内做完
  3. 可行性:精确性
  4. 拥有足够的情报
  • 算法的组成要素:算法 = 数据对象运算和操作 + 控制结构
  • 算法的基本运算和操作:算术运算、逻辑运算、关系运算、数据传输
  • 算法的基本控制结构:顺序、选择、循环
  • 算法的基本设计方法:引举法、归纳、递推、递归、减半递推技术

【2】算法的复杂度

  • 算法效率的质量——算法的复杂度:时间复杂度和空间复杂度
  1. 时间复杂度:执行算法所需的计算工作量(通常一个算法所用的时间包括编译时间和运行时间)
  2. 空间复杂度:执行算法所需要内存空间

时间复杂度和空间复杂度并不相关

【3】数据结构

  • 数据:客观事物的符号表示
  • 数据元素:数据元素是数据的基本单位
  • 数据对象:性质相同的数据元素的集合
  • 数据结构:某一数据对象中,所有数据或成员之间的关系组合的集合

【4】逻辑结构和存储结构

  • 数据的逻辑结构:数据元素之间的关系描述。与数据的存储无关、面向问题、独立于计算机
  • 数据的存储结构:也叫物理结构,计算机中的存储方式,面向计算机
  • 逻辑结构可对应多个存储结构
  • 常见的存储结构:顺序、链接、索引(不同的存储结构,处理的效率不同)

【5】线性结构和非线性结构

  • 线性结构:有且只有一个根节点;每一个节点最多一个前件和一个后件
  • 非线性结构
  • 线性结构:栈、队列、双向链表
  • 非线性结构:树、二叉树

【6】线性表及其顺序存储结构

  • 线性表是由一组数据元素构成、数据元素只取决于自己序号
  • 复杂线性表:
  1. 记录:若干数据元素组成的数据元素
  2. 文件:若干记录构成的线性表
  • 非线性表的结构特征:
  1. 有且只有一个根节点
  2. 有且只有一个终节点
  3. 其他节点,只有一个前件和一个后件
  • 线性表的顺序存储结构特特点:
  1. 所有元素占用空间连续
  2. 各元素的存储空间中是按逻辑顺序依次存放
  • 顺序表的运算:查找、删除、插入

【7】线性链表

  • 链表是线性表的链式存储结构
  • 每一个节点:
  1. 数据域:存储数据元素
  2. 指针域:存放指针
  • 链式存储结构的存储空间可以不连续
  • 链式存储结构可以用于线性结构也可以用于非线性结构
    在这里插入图片描述

【8】栈

  • 栈:一种特殊的线性表,只允许在表的一端插入和删除元素(栈顶)
  • 栈是一种后进先出线性表
  • 具有记忆功能
  • 栈的基础运算:

(1)入栈:栈顶插入元素
(2)退栈:栈顶删除元素
(3)读栈顶元素:将栈顶元素赋给一个指定的变量,此时指针无变化

【9】队列

  • 队列:特殊的线性表

(1)队尾rear:插入元素
(2)队头front:删除元素(front指向队头元素的前一个位置)
(3)先进先出

  • 队列的存储结构:

顺序存储:一维数组
链式存储:线性链表

  • 队列的顺序存储结构:一般采用循环队列

s=0:空队列
s=1且front=rear:队满

  • 循环队列的元素个数:rear - front(若为负,则加上容量)

【10】树

  • 树:非线性结构,n个节点的集合
  • 叶子节点:度为0,最后一层
  • 根节点在第一层

【11】二叉树的性质

  • 二叉树的第K层上:==2^(k-1)==个节点
  • 深度为m的二叉树最多有2^m - 1个节点
  • 叶子节点数 = 度为2的节点数 + 1
  • n个节点的二叉树:深度 >=[logn] + 1([logn]代表整数部分)

【12】满二叉树和完全二叉树

  • 满二叉树:满的
  • 完全二叉树:只有最后一层上缺少右边的节点
  • 满二叉树是完全二叉树,完全二叉树不是满二叉树

【13】完全二叉树的性质

  • n个节点的完全二叉树的深度为:等于[logn] + 1
  • 完全二叉树中度为1的节点数目:0或1

【14】二叉树的遍历

在这里插入图片描述

【15】顺序查找

以下的两种情况只能采用顺序查找

(1)如果线性表为无序表,则不管是顺序存储结构还是链式存储结构,只能用顺序查找
(2)链式存储结构,只能用顺序查找

【16】二分查找

  • 二分查找的条件:顺序存储结构+有序表
  • 长度为n有序线性表:最坏情况下二分查找需要logn次(最高效)

【17】排序

  • 交换排序
冒泡排序 最坏情况:n(n-1)/2
快速排序 最坏情况:==n(n-1)/2=
  • 插入排序
简单插入排序 最坏情况:n(n-1)/2
希尔排序 最坏情况:O(n^1.5)
  • 选择排序
简单选择排序 最坏情况:n(n-1)/2
堆排序 最坏情况:O(nlogn)

除了希尔排序外,堆排序时间复杂度最小

发布了234 篇原创文章 · 获赞 107 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_44478378/article/details/104727186