zoukankan      html  css  js  c++  java
  • 数据结构复习笔记

    • 数据结构

    数组

    数组是一种顺序式的存储同一类型数据的数据结构。

        声明格式:<数据类型> <变量名称> [ ] = new <数据类型>[ <数组大小>]

    链表

    1. 链表是一种有序的列表,串连的方式有两种
      1. 一种是利用数组结构串连的有序列表;如利用含有两个元素的结点构成的数组,一个元素存放数据、另一个元素存放链接关系。
      2. 另一种是以动态内存分配的链表;

        class Node

    {

        int Data[ ]=new int[ArraySize];    //用于存储链表的数据

        int Next[ ]=new int[ArraySize];    //用于存储下一个节点的位置

    }

    Node 变量名称=new Node();

    1. 单链表的基本操作
      1. 插入在链表开头:新的节点插入在链表的开头,需要将新节点的指针指向链表的首节点,并将链表的首节点设为新节点。
      2. 插入在链表中间:新的节点插入在链表的中间,如果我们找到Pointer节点,则需要将新节点的指针指向Pointer节点的指针(即下一个节点),但不能让链表断裂。所以第1步必须将新节点的指针指向Pointer节点的指针、第2步再将Pointer节点的指针指向新节点。
      3. 插入在链表尾端:新的节点插入在链表的尾端(Point节点),所以第1步必须将新节点的指针指向Pointer节点的指针(NULL)、第2步再将Pointer节点的指针指向新节点。
      4. 删除链表首节点:删除的节点在链表的开头,需要将首节点指向首节点的指针(即下一个节点),并将原来的节点从内在中释放。
      5. 删除链表中间节点:删除的节点在链表的中间,如果我们找到Pointer节点,则将前一个节点的指针指向Pointer节点的指针(即下一个节点)。并将原来的节点从内存中释放。
      6. 删除链表尾端的节点:删除的节点在链表的尾端(Pointer节点),如果我们Pointer节点,则需要将前一个节点的指针指向Pointer节点指针(NULL)。并将原来的节点从内存中释放。
      7. 单链表的反转、单链表的反转、双链表、循环链表。
      8. LinkedList类的使用方法,构造方法,类的方法。

    堆栈

    堆栈数据结构只允许数据自有序列列表的固定端(前端)做输入、输出操作,先进后出。堆栈是一种有序列表。

    用数组模拟堆栈,堆栈数组声明:

    int stack[MaxSize]; int top=-1;

    1. Stack类的使用、Stack类的方法
    2. 前序、中序、后序表达示的表示法及计算、以及表达式的转换

    队列

    规定在序列表中的数据的输入、输出是分别由不同端进行处理,具有先进先出的特性。

    用数组模拟队列,队列数组声明:

    int queue=new int[Maxsize];

    int front=-1;    //front会随数据输出而变动

    int rear=-1;        //rear会随数据输入而改变

    1. 环状队列

    环状队列中的头指针所指向的数组位置并没有内容值存在,,输出的值为front的下一个元素,故环状队列实际上所能使用的空间为MaxSize-1。当尾指针rear等于MaxSize-1时需要回到队列的最前端,故当输入数据时,rear所指的数组元素下标采用这样的计算方法:

    ( rear + 1 ) mod MaxSize

    若尾指针rear不断前进直到等于头指针front时,则表示队列已满,但当队列为空时rear也等于front,为区分这两种状况,必须使用不同的条件来加以判断。

    当队列为满:( rear + 1 ) mod MaxSize=front

    当队列为空:front = rear

    1. 双向队列
      1. 输入限制性双向队列:是限制只能在队列 的一端(后端)进行输入,而数据的输出则可在队列的两端(前后端)操作
      2. 输出限制性双向队列:是限制只能在队列 的一端(后端)进行输出,而数据的输入则可在队列的两端(前后端)操作

    递归

    是指函数/过程/子程序在运行过程中直接或间接调用自身而产生的重入现象

    1. 数学问题

    阶乘问题,最大公因子问题,费氏级数问题,组合公式,汉诺塔问题,N皇后问题,迷宫问题

    树状结构

    是由一个或多个节点所构成的有限集合。

    1. 二叉树

    二叉树中的节点至多只能有两个子节点。

    1. 二叉树的数组表示法
    2. 二叉树的前序、中序、后序遍历
    3. 二叉树的查找、二叉树的节点删除
    4. 一般树转换为二叉树、线索二叉树
    5. 二叉树的应用(表达示)

    内部排序

    1. 交换式排序
      1. 冒泡排序:将相邻的两个数据加以比较,若左边的值大于右边的值,则将此两个值互相交换;若左边的值小于等于右边的值,则此两个值的位置不变。右边的值继续和下一个值做比较,重复此操作,直到比较到最后一个值。
      2. 快速排序,步骤为:

      1.从数列中挑出一个元素,称为 "基准"(pivot),

      2.重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。

      3.递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

    2. 选择式排序
      1. 选择排序法:从欲排序的n个数据中,以线性查找的方法找出最小的元素和第一个元素交换,再从剩下的 ( n-1 )个数据中,找出最小的元素和第二个元素交换,以此类推,直到所有元素均已排序完成。
      2. 堆的外观为完全二叉树的最小或最大树,而堆排序(Heap Sort)所用的堆是"最大堆"。
    3. 插入式排序
    • 插入排序法:假设欲排序的数组元素V1,V2,V3,V4且V3>V2>V4>V1。依序进行插入元素的操作,在每次插入时该元素会放在适当的排序位置,直到最后一个元素插入后,则所有元素排序完成。
    • 希尔排序:将欲排序的数值依某个间隔长度分成数个数列集合,再针对各个数列集合进行"插入法排序",重复进行数列分割,每次分割的间隔长度缩小为上一次分割间隔长度的二分之一,直到分割间隔为零停止。
    • 二叉树排序法:
      • 将欲排序的元素一一以建立二叉树的方式插入,建立二叉树需满足二个条件:
        • 每一个节点最多只有两个子节点( 左节点、右节点 )
        • 若一个节点有子节点,则该节点的数据比左节点的数据大,且比右节点的数据小( 左节点<parent<右节点 )
      • 使用二叉树中序遍历的方式将二叉树的节点打印出来,即可得到元素的排序结果。

    外部排序

    合并排序法:将欲排序的数据分别存在数个文件大小可加载内存的文件中,再针对各个文件分别使用"内部排序法"将文件中的数据排序好写回文件。再对所有已排序好的文件两两合并,直到所有文件合并成一个文件后,则数据排序完成。

    查找

    1. 线性查找
      1. 线性查找又称为顺序查找,在一列给定的值中进行搜索,从一端开始逐一检查每个元素,直到找到所需元素的过程。
    2. 折半查找
    • 若KeyValue小于Data[middle]:表示KeyValue可能出现在Data[middle]之前,所以查找Data[0]到Data[middle–1]之间的数据。这时left=left,right=middle-1,而middle=( left + right )/2
    • 若KeyValue大于Data[middle]:表示KeyValue可能出现在Data[middle]之后,所以查找Data[middle+1]到Data[n]之间的数据。这时left=middle+1,right=right,而middle=(left + right)/2
    • 若KeyValue等于Data[middle]:表示已查找到数据。
    1. 费氏查找、插补查找、杂凑查找、二叉树查找

    复杂链表

    1. 循环链表
    2. 双向链表

    图形结构

    1. 概念
    • 无向图形
    • 有向图形
    • 完全图形
    • 了图形
    • 路径
    • 简单路径
    • 回路
    • 连通顶点
    • 连通图形
    • 连通单元
    • 强连通顶点
    • 强连通图形
    • 强连通单元
    1. 图形的表示法
    • 邻接数组表示法
    • 邻接表表示法
    • 多重邻接表表示法
    • 加权边的图形
    1. 图形的搜索
    • 深度优先法
    • 广度优先法
    • 连通组件
    1. 生成树问题
    • 生成树
    • 最小生成树
    • Kruskal算法
    • Prims算法
    1. 最短路径问题

     

     

  • 相关阅读:
    CODE[VS] 3026 恶心的扑克
    CODE[VS] 2951 打字比赛
    CODE[VS] 2774 火烧赤壁
    CODE[VS] 1860 最大数 1998年NOIP全国联赛提高组
    matplotlib学习笔记(一)
    LUNA16数据集(二)肺结节可视化
    [转载]pytorch自定义数据集
    [转载]什么情况下应该设置 cudnn.benchmark = True?
    pytorch构建优化器
    pytorch批训练数据构造
  • 原文地址:https://www.cnblogs.com/luowei010101/p/2220802.html
Copyright © 2011-2022 走看看