好! 我告诉你。 我毕业两年了,都是做c/c++开发方面的~
首先说一下数据结构和vc/mfc以及数据结构的应用,vc/mfc主要是开发上位机软件,即pc机上的软件的。一般情况下做vc一般开发不需要掌握太多的数据结构知识。开发中不会用太多,了解就够了。数据结构一般常用在嵌入式开发,譬如路由器开发里常用到树结构。
第二数据结构和数学,数据结构里用的最多的是离散数学,尤其是树和图,基本就是离散数学的知识,其次是线性代数里的矩阵也用的比较多。所以学习数据结构也不一定要把所有的数学都学好。不过要想学得好必须先学好我指的那几点。否则学起来比较吃力。
第三c++、数据结构、vc++。的顺序问题,数据结构是不分语种的,但你要想学c++版的数据结构,你首先得了解c++的一般语法吧,至少得看懂伪代码,常用的c++结构,指针、类的使用等。要知道c++是计算机语言、vc是开发工具、数据结构是程序的思路,数学是基础。好了,不啰嗦了,相信你都已经明白了
第一章 什么是数据结构1.1 基本概念和术语1.2 数据的逻辑结构和物理结构 1.1 基本概念和术语1.数据(data): 是对客观事物的符号的表示,是所有能输入到计算机中并被计算机程序处理的符号的总称。
2.数据元素(data element): 是数据的基本单位,在计算机程序中通常作为一个整体来处理。一个数据元素由多个 数据项(data item)组成,数据 项是数据不可分割的最小单位。
3.数据结构(data structure): 是相互之间存在一种或多种特定关系的数据元素的集合。数据结构是一个二元组,记为: data_structure=(D,S).其中D为数据元素的集合,S是D上关系的集合。
数据元素相互之间的关系称为结构(structure)。根据数据元素之间关系的不同特性,通常由下列四类基本结构: (1)集合:数据元素间的关系是同属一个集合。
(图1) (2)线性结构:数据元素间存在一对一的关系。(图2) (3)树形结构:结构中的元素间的关系是一对多的关系。
(图3) (4)图(网)状结构:结构中的元素间的关系是多对多的关系。(图4) 1.2 数据的逻辑结构和物理结构逻辑结构:数据元素之间存在的关系(逻辑关系)叫数据的逻辑结构。
物理结构:数据结构在计算机中的表示(映象)叫数据的物理结构。 一种逻辑结构可映象成不同的存储结构:顺序存储结构和非顺序存储结构(链式存储结构和散列结构)。
第一章:数据结构概述一、什么是数据结构1、作者开篇谈到: 一般来说解决一个具体的问题时,大致需要经过下列几个步骤:首先要从具体的问题抽象出一个适当的数学模型,然后设计一个解此数学模型的算法,最后编写出程序代码,进行测试、调整直至得到最终的解决方案。
总结为:现实中具体的问题—>数学模型—>算法程序—>解决方案动作为:抽象提取、设计编码、测试调整2、数学角度阐述: 寻求数学模型的实质是分析问题,从中提取操作的对象,并找出这些操作对象之间含有的关系,然后用数学的语言加以描述。3、定义数据结构: 描述这类非数值计算问题的数学模型不再是数学方程,而是诸如表、树和图之类的数据结构,因此,简单来说,数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间关系和操作等的学科,用一句话来说就是,数据结构是相互之间存在一种或多种特定关系的数据元素的集合。
研究对象:1、集合2、线性结构3、树形结构4、图状结构(网状结构) 结构分类:1、数据的逻辑结构2、数据的物理结构(存储结构) 关系表示:1、顺序映像2、非顺序映像,两者分别对应为顺序存储结构、链式存储结构二、算法和算法分析 1、算法的五个特性:有穷性、确定性、可行性、输入和输出 2、算法设计的要求:正确性、可读性、健壮性以及效率与低存储量需求 3、算法的度量:时间复杂度和空间复杂度 总结:编写代码设计算法时候首先先考虑算法的正确性,确保程序能够满足要求,在正确性的前提下再进一步考虑算法的可读性、健壮性、拓展性以及算法的效率等。第二章:线性表一、线性表的定义 线性结构的特点是:在数据元素的非空有限集中(1)存在唯一的一个被称做“第一个”的数据元素;(2)存在唯一的一个被称做“最后一个”的数据元素;(3)除第一个之外,集合中每个数据元素均只有一个前驱;(4)除最后一个元素之外,集合中每个数据元素均只有一个后继。
线性表是最常用并且最简单的一种数据结构,简单来说,一个线性表是n个数据元素的有限序列。至于每个数据元素的具体含义,在不同的情况下各不相同,既可以是一个数也可以是一个符号等等。
二、线性表的操作 线性表是一个相当灵活的数据结构,它的长度可根据需要增长或者缩短,即对线性表的数据元素不但可以进行访问,还可以进行插入和删除等操作。线性表存储方式有两种,顺序存储和链式存储,下面通过代码进行简单模拟操作。
第三章:栈和队列 栈和队列是两种重要的线性结构,从数据结构的角度看,栈和队列也是线性表,其特殊性在于栈和队列的基本操作是线性表操作的子集,它们是操作受限制的线性表,因此可以称为限定性的数据结构。一、栈的定义 栈是限定在表尾进行插入或删除操作的线性表,栈的特定是先进后出。
栈的存储方式有两种,一种是顺序栈另外一种是链式栈,下面只通过代码简单模拟栈的操作。二、栈的应用 栈的应用主要有数制转换、括号匹配的检验、迷宫问题求解以及表达式求值。
另外栈递归实现的经典例子有八皇后问题、汉诺塔问题等。三、队列的定义 队列和栈有点不同,队列是一种先进先出得线性表,它只能够在表的一端进行插入另外一头进行删除操作。
队列在程序设计中比较常见的例子是操作系统中的作业排队。双端队列、循环队列有时间再进一步演进,暂时先了解些基本概念。
第四章:串一、串的定义 计算机上的非数值处理的对象基本上都是字符串数据。串是由零个或多个字符组成的有限序列。
串中字符的数目成为字符串的长度,零个字符的串成为空串。串的模式匹配算法经典的是KMP算法。
第五章:数组和广义表一、数组和广义表定义 数组是读者已经很熟悉的一种数据类型,几乎所有的程序设计语言都把数组类型设为固有的类型。数组的应用中涉及到一个比较重要的数学知识,矩阵的压缩存储问题。
广义表是线性表的推广,在java开发中好像用得不多,有时间再进一步学习。 第六章:树和二叉树一、树的定义和基本操作1、树的特点 树是一个结点n的有限集,在任意一颗树非空树中:1、有且只有一个根结点,2、当n>1时,其余结点分为m(m>0)个互不相交的有限集,其中每个集合本身又是一棵树,叫做根的子树。
关键词组:有限集、唯一性、对称性、递归性。 基本术语:结点、度、叶子、分支结点、孩子、双亲、兄弟、层次以及深度等。
基本操作:构造初始化树、取得左子树或右子树、插入结点、删除结点、树的遍历等等。2、线性结构VS树结构 线性结构是一个“序列”,元素之间存在的是“一对一”的关系,而树是一个层次结构,元素之间存在的是“一对多”的关系。
二、二叉树的定义1、二叉树的特点 每个结点至多只有二棵子树(即二叉树中不存在度大于2的结点),并且二叉树的子树有左右之分,其次序不能颠倒。 关键词组:对称、次序2、二叉树的具体实例 满二叉树、完全二叉树、平衡二叉树等,具体区别参考书籍教材详解。
3、二叉树的存储结构 主要分为两种方式,一类是顺序结构(可使用一组地址连续的存储单元依次自上而下、自左至右存储完全二叉树上的结点元。
声明:本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
蜀ICP备2020033479号-4 Copyright © 2016 学习鸟. 页面生成时间:3.125秒