数据结构与算法

绪论

数据结构的基本概念

数据: 是信息的载体, 分整数型非整数型数据
数据项: 构成数据元素的最小不可分割单位, 如学生的成绩
数据元素: 数据的基本单位, 作为一个整体存储, 如每个学生的信息
数据类型: 具有相同性质的计算机数据的集合, 以及在这个集合上的一系列操作, 比如int、str、数组、类等, 分为简单类型(原子类型)构造类型(结构类型), int、float等为简单类型, 数组、类等为构造类型

数据结构的定义: 按照某种逻辑关系组织起来的一组数据, 按一定的存储方式存储在计算机的存储器中, 并在这些数据上定义了一组运算的集合
数据结构的组成:

  1. 逻辑关系
    1. 集合
    2. 线性关系
    3. 树结构
    4. 图结构
  2. 存储方式
    1. 顺序存储
    2. 链式存储
  3. 对数据的操作

算法的基本概念

算法分析

算法的五个要素:

  1. 输入
  2. 输出
  3. 有穷性
  4. 确定性
  5. 可行性

描述算法的方法:

  1. 自然语言
  2. 流程图
  3. 伪代码
  4. 程序设计语言

评价算法的方法:时间复杂度、空间复杂度、鲁棒性.....

时间复杂度

算法的频度:每条代码执行的次数
算法的时间耗费:各条代码执行的总次数
时间复杂度O( ): 括号中为对时间耗费影响最大的因子,可以为n2nklog2nn!.....

NP问题

P问题(多项式时间问题): 能找到一个能在多项式的时间里解决它的算法的问题, 这种算法叫多项式时间算法。另一类为指数时间算法, 其时间复杂度不能用多项式函数界定

NP问题: 不确定能否在多项式时间内找到一个解, 但能在多项式时间内验证一个解(也就是说不一定存在一个多项式解决算法, 但存在多项式检查算法)

NP完全问题(NPC问题): 每一个可能解都可以在多项式时间内验证的NP问题

线性表

概述

逻辑结构

定义

零个或多个相同类型的数据元素构成的有限序列

数学表示

L=(a1,a2,....,an)

逻辑表示

只有一个头结点与一个尾节点, 每一个中间节点有且只有一个直接前驱, 只有一个直接后继

操作

  • 插入
  • 删除
  • 求长度
  • 按位置取值
  • 按值搜索
  • 打印

存储结构

  • 顺序结构: 顺序表
  • 链式结构: 链表
    • 单链表
    • 循环链表
    • 双链表

顺序表

用一段连续的存储空间依次存储数据元素

实现

C++数组 + 模板类

二叉树的性质

  1. 一颗非空二叉树的第i层上最多2i1个结点
  2. 深度为h的二叉树最多有n=2h1个结点
  3. 一颗二叉树,若其叶结点数n0,度为2的结点数n2,则n0=n2+1
  4. 具有n个结点的完全二叉树的深度为[log2n]1
  5. 对n个结点的完全二叉树,如果按从上到下,从左到右的顺序(从1开始)编号,则
  • 若i>1,则其双亲结点序号为[i2]
  • 若2i>n,则结点i无左孩子,否则其左孩子为2i
  • 若2i+1>n,则结点i无右孩子,否则其右孩子为2i+1
posted @   没法要了  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示