程序员教程-4章-数据结构与算法

  目录结构

  4.1 线性结构

    4.1.1 线性表

      1 线性表的定义

      2 线性表的存储结构

      3 线性表的应用

    4.1.2 栈和队列

      1 栈

      2 队列

    4.1.3 串

      1 串的定义及基本运算

  4.2 数组

    1 数组

    2 矩阵

  4.3 树与二叉树

    4.3.1 树的基本概念

    4.3.2二叉树

      1 二叉树的性质

      2 满二叉树和完全二叉树

      3 二叉树的存储结构

      4 二叉树的遍历

    4.3.3 树和森林

      1 树和森林与二叉树的相互转换

      2 树和森林的遍历

    4.3.4 最优二叉树

    4.3.5 二叉查找树

  4.4图

    1 基本概念

    2 图的存储结构

  4.5 查找

    4.5.1 顺序查找与折半查找

      1 顺序查找

      2 折半查找

      3 索引顺序查找

    4.5.2 树表查找

      1 在二叉查找树中查找

      2 在二叉查找树中插入

    4.5.3 哈希表及哈希查找

  4.6 算法

    4.6.1 算法概述

      1 算法与数据结构

      2 算法效率

      3 算法的描述

    4.6.2 排序算法

      1 简单排序

      2 希尔排序

      3 快速排序

      4 堆排序

      5 归并排序

      6 内部排序方法小节

      7 外部排序

    4.6.3 递归算法

    4.6.4 字符串运算

      1 基本的字符串运算

      2 串的模式匹配

    4.6.5 图的相关算法

      1 图的遍历算法

      2 最小生成树求解算法

      3 拓扑排序

      4 求单源点的最短路径算法

  心情不好,时间不够,一切从简。。。

  数据结构描述数据元素的集合及元素间的关系和运算。在数据结构中,元素之间的相互关系称为数据的逻辑结构。按照逻辑关系的不同将数据结构分为线性结构和非线性结构,其中,线性结构包线括性表、栈、队列、串,非线性结构主要包括树和图。数据元素及元素之间关系的存储形式称为存储结构,有顺序存储和链接存储两种基本形式

  4.1 线性结构

    4.1.1 线性表:线性表是最基本的线性结构的一种抽象,主要的基本运算有插入、删除和查找,常采用顺序存储和链式存储两种存储方式来实现。链表分为双向链表,循环链表,静态链表

      3 线性表的应用:选首领

    4.1.2 栈和队列

    栈和队列是程序中常用的两种数据结构,它们的逻辑结构与线性表相同,其特点在于运算受到了限制:栈按“后进先出”的规则进行操作,队列按“先进先出”的规则进行操作,故称运算受限的线性表

      1 栈

      1)栈的定义及基本运算:基本运算:初始化栈,判空栈,入栈,出栈,读栈顶元素

      2)栈的存储结构:栈的顺序存储,栈的链式存储

      3)栈的应用:表达式求值,括号匹配,在计算机语言的实现以及将递归过程转变为非递归过程的处理

      2 队列

      1 允许插入元素的一端称为队尾,允许删除元素的一端称为队头

      基本运算:初始化队列,判队空,入队,出队,读队头元素

      2 队列的存储结构:顺序存储,链式存储

      3 队列的应用:需要排队的场合:如操作系统中处理打印任务的打印队列、离散事件的计算机模拟

    4.1.3 串

      1 串的定义及基本运算

      (1)基本术语:串长,空串,空格串,子串,串相等,串比较

      (2) 串的基本操作:赋值操作,连接操作,求串长,串比较

      2 串的存储结构:顺序存储和链式存储

  4.2 数组:这里介绍多维数组的逻辑结构和存储结构、特殊矩阵和矩阵的压缩存储

    2 矩阵

    (1)特殊矩阵:对称矩阵,三角矩阵,对角矩阵

  4.3 树与二叉树

  树结构是一种非常重要的非线性结构,该结构中一个数据元素可以有两个或两个以上的直接后继元素,可以用来描述客观世界中广泛存在的层次关系

    4.3.1 树的基本概念

    双亲、孩子和兄弟;结点的度;叶子结点;内部结点树的高度;有序(无序)树;森林

    4.3.2 二叉树:二叉树是n(n>=0)个结点的有限集合,它或者是空树(n=0),或者是由一个根结点及两棵不相交的、分别称为左子树和右子树的二叉树所组成

      1 二叉树的性质

      性质1:二叉树第i层(i>=1)上至多有2^(i-1)个结点

      性质2:深度为k的二叉树至多有2^k - 1个结点(k >=1)

      性质3:对任何一棵二叉树,若其终端结点(叶子)数为n0,度为2的结点数为n2,则n0=n2+1。对二叉树中结点的度求和即得到分支的数目,而二叉树中结点总数恰好比分支数目多1,由此可对性质3进行证明:总度数(n1+2n2)=总结点数(n0+n1+n2)-1

      2 满二叉树和完全二叉树

      3 二叉树的存储结构:顺序存储,链式存储

      4 二叉树的遍历:遍历是按某种策略访问树中的所有结点,且对每个结点仅访问一次的过程:先序,中序和后序3种遍历方法

    4.3.3 树和森林

    树的孩子兄弟表示法为实现树、森林与二叉树的相互转换奠定了基础

      2 树和森林的遍历:先根遍历和后根遍历

    4.3.4 最优二叉树:又称哈夫曼树,是一类带权路径长度最短的树

    4.3.5 二叉查找树:又称二叉排序树或二叉检索树

  4.4 图:在图中,任意两个结点之间都可能有直接的关系,所以图中一个结点的前驱和后继的数目是没有限制的

    1 基本概念:有向图;无向图;完全图;度,出度和入度;路径;子图;强连通图;网(带权图)

    2 图的存储结构:邻接矩阵,邻接链表

  4.5 查找

  对于含有n个记录的表,查找成功时的平均查找长度定义为

     

  解释:Pi为查找某元素的概率,Ci为找到表中其关键码与给定值相等的记录时,和给定值已进行过比较的关键码个数

    4.5.1 顺序查找与折半查找

      1 顺序查找

      2 折半查找

      3 索引顺序查找:又称分块查找

    4.5.2 树表查找

      1 在二查找树中查找

      2 在二叉查找树中插入

    4.5.3 哈希表及哈希查找

      (2)处理冲突:开放定址法,链地址法

  4.6 算法

    4.6.1 算法概述:算法是问题求解过程的精确描述,它为解决某一特定类型的问题规定了一个运算过程

    算法特性:有穷性,确定性,可行性,输入和输出

    一个算法的优劣可以从以下几个方面考查:正确性,可读性,健壮性,效率

      1 算法与数据结构:程序=数据结构+算法

      2 算法效率:时间复杂度,空间复杂度

      3 算法的描述:流程图,NS盒图,伪代码和决策表

    4.6.2 排序算法

    稳定排序,非稳定排序;内部排序,外部排序

    1 简单排序:

    1)直接插入排序

    2)冒泡排序

    3)希尔排序

    3 快速排序

    4 堆排序:大顶堆(大根堆),小顶堆(小根堆)

    5 归并排序

    6 内部排序方法小节

    选取排序方法时需要考虑的主要因素有:待排序的记录个数n;记录本身的大小;关键码的分布情况;对排序稳定性的要求;语言工具的条件;辅助空间的大小;依据这些因素,可以得到以下几点结论:

    (1)若待排序的记录数n较小时,可采用插入排序和简单选择排序

    (2)若待排序记录按关键码基本有序,则宜采用直接插入排序或冒泡排序

    (3)若n较大,则应采用时间复杂度为O(nlog2n)的排序方法,例如快速排序、堆排序或归并排序

    当待排序的关键码随机分布时,快速排序的平均时间最短;堆排序只需一个辅助存储空间,并且不会出现在快速排序中可能出现的最坏情况。

    7 外部排序

    4.6.3 递归算法

    这类问题具有的特点是:整个问题的解决可以分为两部分,第一部分是一些特殊或基本的情况,可直接解决,即始基;第二部分与原问题相似,可用类似的方法解决,但比原问题的规模小。由于第二部分比整个问题的规模小,所以每次递归时第二部分的规模都在缩小,如果最终缩小为第一部分的情况则结束递归。因此,通过递归不断地分解问题,将子问题的解进行综合,完成原问题的求解。

    4.6.4 字符串运算

    1 基本的字符串运算:求串长,串拷贝,串比较

    2 串的模式匹配:模式串(或子串)在主串中的定位操作通常称为串的模式匹配

    1)基本的模式匹配算法:

    2)改进的模式匹配算法:KMP算法

    4.6.5 图的相关算法

    1 图的遍历算法

    1)深度优先搜索

    2)广度优先搜索

    2 最小生成树求解算法

    1)生成树的概念:设图G=(V,E)是个连通图,如果其子图是一棵包含G的所有顶点的树,则该子图称为G的生成树

    2)最小生成树:对于连通网来说,边是带权值的,生成树的各边也带权值,于是就把生成树各边的权值总和称为生成树的权,把权值最小的生成树称为最小生成树。

    (1)普里姆算法思想(从顶点出发)

    (2)克鲁斯卡尔算法思想(从边出发)

    3 拓扑排序:

    1)AOV网

    2)拓扑排序

    4 求单源点的最短路径算法

    迪杰斯特拉算法:relax方法(修订最短路径)

原文地址:https://www.cnblogs.com/liunianfeiyu/p/9867710.html

时间: 2024-08-25 18:49:27

程序员教程-4章-数据结构与算法的相关文章

程序员的进阶课-数据结构与算法

现在市面上的数据结构与算法的教程也都不少,但有两个问题,第一是泛泛而谈,第二是基本都是c语言实现,而java作为第一主流语言,理应有它自己的独到之处.这也是我写这些博客的初衷,我会讲解java实现的数据结构和算法. 至于说为什么要学习数据结构和算法,我相信大家都应该清楚.大家平时的工作,敲的业务代码,都属于外功,可以帮你轻松地完成老板交待的工作,每个月能挣到属于自己的那份钱.但我不知道小伙伴们有没有这样的困境,工作三到五年,项目做了很多,但自己的能力始终处于二流水平,写业务代码,没点问题:想跳槽

程序员书单_数据结构和算法篇

大话数据结构 程杰 著 http://download.csdn.net/detail/shenzhq1980/9145645Java数据结构和算法.(第二版) http://download.csdn.net/detail/shenzhq1980/9145633

程序员教程-9章-C程序设计

目录结构: 9.1 C语言基础 9.1.1 数据类型 1 基本数据类型 2 数组.字符数组与字符串 3 枚举类型 4 结构体.共用体和typedef 9.1.2 运算符与表达式 9.1.3 输入/输出 9.2 控制语句 1 选择语句 2 循环语句 3 break语句 4 continue语句 5 return语句 9.3 函数 1 函数定义 2 函数声明 3 函数调用 4 递归函数 9.4 指针 9.4.1 指针的定义 1 空指针 2 "&"和"*" 3 指

程序员教程-11章-Java程序设计

自己是学java的,先看第十一章java吧. 列出章节目录,便于自己回忆内容. 11.1 Java语言概述 1 Java语言的特点 2 Java开发环境 11.2 Java语言基础 11.2.1 基本数据类型 1 整数类型及整数的运算 2 浮点数据类型及运算 3 字符数据类型 4 位运算 5 布尔数据类型 11.2.2 控制结构 1 if语句 2 switch语句 3 循环语句 4 跳转语句 11.2.3 Java核心类 1 Object类 2 String类 3 StringBuild字符串

程序员教程-5章-软件工程基础知识

先给出目录结构 5.1 软件工程概述 5.1.1 软件生存周期 1 问题定义 2 可行性分析 3 需求分析 4 总体设计 5 详细设计 6 编码和单元测试 7 综合测试 8 维护 5.1.2 软件生存周期模型 1 瀑布模型 2 增量模型 3 演化模型 4 螺旋模型 5 喷泉模型 6 统一过程 7 敏捷方法 5.1.3 软件过程评估 1 软件能力成熟度模型 2 能力成熟度模型集成 5.1.4 软件工具 1 软件开发工具 2 软件维护工具 3 软件管理和软件支持工具 5.1.5 软件开发环境 5.2

程序员教程-3章-程序设计语言基础知识

这一章难度颇大,好好学也学不到什么,随便写点东西吧 目录结构 3.1 程序设计语言概述 3.1.1 程序设计语言的基本概念 1 低级语言和高级语言 2 编译程序和解释程序 3 程序设计语言的定义 3.1.2 程序设计语言的分类和特点 1 程序设计语言发展概述 2 程序设计范型 3.1.3 程序设计语言的基本成分 1 程序设计语言的数据成分 2 程序设计语言的运算成分 3 程序设计语言的控制成分 4 函数 3.2 语言处理程序基础 3.2.1 汇编程序基础 1 汇编语言 2 汇编程序 3.2.2

程序员如何快速准备面试中的算法 - 结构之法

准备面试.学习算法,特别推荐最新出版的我的新书<编程之法:面试和算法心得>,已经上架京东等各大网店 前言 我决定写篇短文,即为此文.之所以要写这篇文章,缘于微博上常有朋友询问,要毕业找工作了,如何备战算法.尽管在微博上简单梳理过,如下图所示: 但因字数限制,许多问题无法一次性说清楚,故特撰此文着重阐述下:程序员如何快速准备面试中的算法,继而推荐一些相关的书籍或资料.顺便也供节后跳槽.3月春季招聘小高潮.及6月毕业找工作的朋友参考. 备战面试中算法的五个步骤 对于立志进一线互联网公司,同时不满足

程序员如何快速准备面试中的算法

前言 我决定写篇短文,即为此文.之所以要写这篇文章,缘于微博上常有朋友询问,要毕业找工作了,如何备战算法.尽管在微博上简单梳理过,如下图所示: 但因字数限制,特撰此文着重阐述下:程序员如何快速准备面试中的算法,顺便推荐一些相关的书籍或资料. 备战面试中算法的五个步骤 总体来说,备战面试中的算法,分为五个步骤,如下: 1.首选你得确保自己已经掌握好一门编程语言 如果是C的话,推荐Dennis M. Ritchie & Brian W. Kernighan著的<C程序设计语言>,和<

黑马程序员——C学习总结之数组排序算法实现

发表试试 黑马程序员--C学习总结之数组排序算法实现,布布扣,bubuko.com