Data Structure Summary

2018-02-28  本文已影响15人  RoseauHan

此篇博客为数据结构的学习笔记总结,主要整理了一些重点考察内容。掌握程度主要分为以下三部分 一:背诵理解概念 二:掌握原理及运用 三:掌握算法及其设计;
博客末尾提供了PDF版的下载地址。
date: 2018-01-05 00:00:00
©RoseauHan

掌握程度主要分为以下三部分

一:背诵理解概念

二:掌握原理及运用

三:掌握算法及其设计

( 博客末尾提供了PDF版的下载地址。)

第一章 绪论

一、数据结构等


第二章 算法概述

一、算法描述、有效算法等


第三章 线性表

一、链表、静态链表等

三、单链表的插入删除


第四章 栈和线性表

一、队列、假溢出等

三、循环队列的出入队

若空间编址范围 m…n

存储结构定义实际上就是一个一维数组:

VAR CQ: Array [m..n] OFdatatype;

​ front,rear: integer;

(1)入队过程:

PROC AddQ(CQ, x, front, rear)

​ {front, rear 分别为队列CQ的首尾指针,数据元素 x 入队}

BEGIN rear←rear+1;

​ IF rear=n+1 THEN rear←m;

​ IF rear=front THEN write(“queue full”)

​ ELSE CQ[rear]←x

END;

(2)出队过程:

PROC DelQ(CQ, x, front, rear)

​ {front, rear 分别为队列CQ的首尾指针,进行出队运算}

BEGIN

​ IF rear=front THEN write(“queue empty”)

​ ELSE 【 IF front=n THEN front←m

​ ELSE front←front+1;

​ x ←CQ[front] 】

END;


第五章 串

一、串及串的模式匹配


第六章 数组和广义表

一、稀疏数组、广义表

  1. 一维数组是个向量,它的每个元素是该结构中不可分割的最小单元;

  2. n维数组是个向量,它的每个元素是一个n-1维数组,且具有相同的下限和上限。

二、稀疏矩阵的存储表达


第七章 树形结构

一、二叉树、遍历、线索树、霍夫曼树等

  1. 树中有且只有一个称为根的结点

  2. 除根结点以外,其余结点分成m(m>0)个不相关的集合T1,T2,…,Tm ,其中每个Ti都是树,而且都称为T的子树。

  1. T是空集;

  2. 或者包含一个根结点,且其余结点分成两个不相交的集合,并分别被称为根结点的左子树和右子树。

  1. 层次策略(自上而下,从左到右)

  2. 深度策略(先中后/根 左右)

  1. 若是它的左子树非空,则左子树上所有结点的值均小于根结点的值;

  2. 若是它的右子树非空,则右子树上所有结点的值均大于根结点的值;

  3. 左右子树也分别是二叉排序树;

  4. 没有键值相等的结点;

二、转换、遍历方法、加线索、霍夫曼树、二叉排序树

三、二叉树遍历方法的应用

  1. 交换二叉树的左右子树

    PROC exchange ( VAR T :Birary Tree)

    BEGIN

    IF T ≠ nil THEN [ swap (T.lson , T.rson);

    ​ Call exchange ( T.lson )

    ​ Call exchange ( T.rson) ]

  2. 求二叉树的高度

    1. 采用一般过程进行设计

      PROC high ( VAR T:Binary Tree ; h: integer):

      BEGIN

      IF T = nil THEN h ← 0

      ELSE [ call high ( T.lson,nil ) ;

      ​ call high ( T.rson,nil ) ;

      ​ h ← H.max (h1, h2 ) ]

      END ;

    2. 采用函数过程进行设计(最恰当)

      FUNC high ( VAR T: Binary Tree )

      BEGIN

      IF T = nil THEN high ← 0

      ​ ELSE high ← H.max (high(T.lson) , high(T.rson) )

      END

    3. 统计二叉树的叶子结点个数

      1. 采用一般过程设计

        PROC leave (VAR T :Binary Tree); L:integer)

        BEGIN

        IF T = nil THEN L ← 0;

        ​ ELSE (IF T.lson)=nil AND T.rson= nil THEN ;

        ​ ELSE [ Call leave (T.lson,l1)

        ​ Call leave (T.ron,l2)

        ​ L ← L1 + L2 ;]


第八章 图结构

一、拓扑排序、关键路径、最小生成树

二、图的存储、构造最小生成树


第九章 排序

一、分类、稳定性、堆

二、对一趟的掌握、堆的构造

三、二分插入排序

也称折半插入排序。与直接插入排序的区别:在插入第i个时搜索采用二分策略。

仅对比较次数有改善,移动次数无影响。算法过程如下:

PROC DichSort(VARR:ARRAY[1..n] OF datatype);

BEGIN

​ FOR i←2 TO n DO

​ 【x←R[i]; l←1; h←i-1;

​ while l≤h DO

​ 【 m←(l+h) DIV 2;

​ IF x.key<R[m].key THEN h←m-1

​ ELSE l←m+1 】 ;

​ FOR j←i-1 DOWNTO l DO R[j+1]←R[j] ;

​ R[l]←x】

END;


第十章 数据检索

一、AVL树、散列表等

二、AVL树的构造

​ 选择离插入(或删除)结点最近的不平衡结点(其平衡因子为±2)开始调整。

LL型:

RR型:

LR型:

RL型:

三、二分检索

二分检索的基本作法:

​ 先取表的中间位置的记录关键字值与所给关键字值进行比较,如果给定值比该记录的关键字值大,则给定值必在表的后半部分;

​ 在这后半部分中再取中间位置的记录进行比较,又可舍去这部分中的一半;

​ 依次重复,直到找到或查完全表而查不到为止。

算法过程:

PROC dichotomize_search(VAR R:ARRAY[1..max] OF datatype;

​ n:integer;k:Ktype);

BEGIN low←1; high←n;

​ WHILE low≤high DO

​ 【 middle←(low+high) DIV 2;

​ CASE

​ k<R[middle].key : high←middle-1;

​ k=R[middle].key : 【write('success' , middle);exit; 】;

​ k>R[middle].key : low←middle+1;

​ ENDCASE】 ;

​ write('unsuccess')

END;


第十二章 文件

一、组织分类、静动态索引、外排序等

PDF版下载点此

©RoseauHan @2018 - Jan

本文首发地址 http://roseauhan.com/post/ea399710.html

上一篇 下一篇

猜你喜欢

热点阅读