内容发布更新时间 : 2024/11/18 19:47:39星期一 下面是文章的全部内容请认真阅读。
第一章 数据结构与算法
1.1 算法 1、算法是指解题方案的准确而完整的描述。换句话说,算法是对特定问题求解步骤的一种描述。 2、算法的基本特征(1)可行性(2)确定性(3)有穷性(4)拥有足够的情报。 3、算法复杂度主要包括时间复杂度和空间复杂度。
(1)算法时间复杂度是指执行算法所需要的计算工作量,可以用执行算法的过程中所需基本运算的执行次数来度量。
(2)算法空间复杂度是指执行这个算法所需要的内存空间。 1.2 数据结构的基本概念
1、数据结构是指相互有关联的数据元素的集合。
2、数据结构主要研究和讨论以下三个方面的问题:数据的逻辑结构、数据的存储结构、对各种数据结构进行的运算。
3、数据结构分为两大类型:线性结构和非线性结构。
(1)线性结构:1)有且只有一个根结点;2)每一个结点最多有一个前件,也最多有一个后件。常见的线性结构有线性表、栈、队列和线性链表等。
(2)非线性结构:不满足线性结构条件的数据结构。常见的非线性结构有树、二叉树和图等。 1.3 线性表及其顺序存储结构
1、线性表由一组数据元素构成,数据元素的位置只取决于自己的序号,元素之间的相对位置是线性的。线性表是由n(n≥0)个数据元素组成的一个有限序列,表中的每一个数据元素,除了第一个外,有且只有一个前件,除了最后一个外,有且只有一个后件。线性表中数据元素的个数称为线性表的长度。线性表可以为空表。 *:线性表是一种存储结构,它的存储方式:顺序和链式。
2、线性表的顺序存储结构具有两个基本特点:(1)线性表中所有元素所占的存储空间是连续的;(2)线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。 3、顺序表的插入、删除运算
(1)顺性表的插入运算时需要移动元素,在等概率情况下,平均需要移动n/2个元素。
(2)顺性表的删除运算时也需要移动元素,在等概率情况下,平均需要移动(n-1)/2个元素。 插入、删除运算不方便。 1.4 栈和队列
1、栈及其基本运算
栈是限定在一端进行插入与删除运算的线性表。
在栈中,允许插入与删除的一端称为栈顶,不允许插入与删除的另一端称为栈底。栈顶元素总是最后被插入的元素,栈底元素总是最先被插入的元素。即栈是按照“先进后出”或“后进先出”的原则组织数据的。 栈具有记忆作用。
栈的基本运算:1)插入元素称为入栈运算;2)删除元素称为退栈运算;3)读栈顶元素是将栈顶元素赋给一个指定的变量,此时指针无变化。
栈的存储方式和线性表类似,也有两种,即顺序栈和链式栈。 2、队列及其基本运算
队列是指允许在一端(队尾)进入插入,而在另一端(队头)进行删除的线性表。尾指针(Rear)指向队尾元素,头指针(front)指向排头元素的前一个位置(队头)。 队列是“先进先出”或“后进后出”的线性表。
循环队列及其运算:所谓循环队列,就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,供队列循环使用。循环队列中元素的个数=rear-front。 1.5 线性链表
1、线性链表:线性表的链式存储结构称为线性链表,是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接来实现的。因此,在链式存储方式中,每个结点由两部分组成:一部分用于存放数据元素的值,称为数据域;另一部分用于存放指针,称为指针域,用于指向该结点的前一个或后一个结点(即前件或后件),如下图所示:
数据域 指针域12n-1ndatanextHEADaa…aa^ (a)结点结构(b)一个非空的线性链表示意图
线性链表分为单链表、双向链表和循环链表三种类型。
在线性链表中插入元素或删除元素时,不需要移动数据元素,只需要修改相关结点指针。
1.6 树与二叉树 1、树的基本概念
树是一种简单的非线性结构。在树这种数据结构中,所有数据元素之间的关系具有明显的层次特性。 几个概念:根结点、孩子结点、双亲结点、兄弟结点、叶子、层、度、深度 2、二叉树及其基本性质 (1)什么是二叉树
二叉树是一种很有用的非线性结构,它具有以下两个特点:1)非空二叉树只有一个根结点;2)每一个结点最多有两棵子树,且分别称为该结点的左子树与右子树。 (2)二叉树的基本性质
★性质1 在二叉树的第k层上,最多有 2 k ? 1 ? 1 )个结点。 (k★性质2 深度为m的二叉树最多有个 2 m ? 1 个结点。
★性质3 在任意一棵二叉树中,度数为0的结点(即叶子结点)总比度为2的结点多一个。n0=n2+1 ★性质4 具有n个结点的二叉树,其深度至少为 2 n ] ? 2 n ] 表示取 log 2 [log1 ,其中 [logn 的整数部分。 3、满二叉树与完全二叉树
满二叉树:除最后一层外,每一层上的所有结点都有两个子结点。 性质5 具有n个结点的完全二叉树深度为 [log 2 n ] ? 1。 4、二叉树的存储结构
在计算机中,二叉树通常采用链式存储结构。
5、★二叉树的遍历 (1)前序遍历(2)中序遍历(3)后序遍历 1.7 查找技术
查找:根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素。 1、顺序查找
在平均情况下,利用顺序查找法在线性表中查找一个元素,大约要与线性表中一半的元素进行比较,最坏情况下需要比较n次。
下列两种情况下只能采用顺序查找:1)线性表是无序表2)采用链式存储结构的链表 2、二分法查找
特点:比顺序查找方法效率高。最坏的情况下,需要比较log2n次。
*:二分法查找只适用于顺序存储的线性表,且表中元素必须按关键字有序(升序)排列。 1.8 排序技术
总结:各种排序法比较:
1、交换类排序法(方法:冒泡排序n(n-1)/2,快速排序O(nlog2n),最坏n(n-1)/2))。 2、插入类排序法(方法:简单插入排序n(n-1)/2,希尔排序)。
3、选择类排序法(方法:简单选择排序n(n-1)/2,堆排序O(nlog2n))。
本章应考点拨:本章内容在笔试中会出现5-6个题目,是公共基础知识部分出题量比较多的一章,所占分值也比较大,约10分。
第二章 程序设计基础
2.1 程序设计风格
程序设计的风格主要强调:“清晰第一,效率第二”。 2.2 结构化程序设计(面向过程的程序设计方法)
1、结构化程序设计方法的主要原则可以概括为:自顶向下,逐步求精,模块化,限制使用goto语句。 2、结构化程序的基本结构:顺序结构,选择结构,重复结构(循环结构)。 2.3 面向对象的程序设计
客观世界中任何一个事物都可以被看成是一个对象,面向对象方法的本质就是主张从客观世界固有的事物出发来构造系统,提倡人们在现实生活中常用的思维来认识、理解和描述客观事物,强调最终建立的系统能够映射问题域。也就是说,系统中的对象及对象之间的关系能够如实地反映问题域中固有的事物及其关系。 面向对象方法的主要优点:(1)与人类习惯的思维方法一致;(2)稳定性好;(3)可重用性好;(4)易于开发大型软件产品;(5)可维护性好。
*:面向对象的程序设计主要考虑的是提高软件的可重用性。
对象是客观世界中的任何实体,对象是实体的抽象。对象是属性和方法的封装体。 属性即对象特征。
操作描述了对象执行的功能,操作也称为方法或服务。操作是对象的动态属性。 *:一个对象由对象名、属性和操作三部分组成。
对象的基本特点:标识惟一性,分类性,多态性,封装性,模块独立性好。 *:信息隐蔽是通过对象的封装性来实现的。
类是指具有共同属性、共同方法的对象的集合。所以类是对象的抽象,对象是对应类的一个实例。 消息是一个实例与另一个实例之间传递的信息。
*:在面向对象方法中,一个对象请求另一个对象为其服务的方式是通过发送消息。
继承是指能够直接获得已有的性质和特征,而不必重复定义他们。继承分单继承和多重继承。单继承指一个类只允许有一个父类,多重继承指一个类允许有多个父类。
*:类的继承性是类之间共享属性和操作的机制,它提高了软件的可重用性。 多态性是指同样的消息被不同的对象接受时可导致完全不同的行动的现象。
本章应考点拨:本章在考试中会出现约1个题目,所占分值大约占2分,是出题量较小的一章。本章内容比较少,也很简单,掌握住基本的概念就可以轻松应对考试了,所以在这部分丢分,比较可惜。
第三章 软件工程基础
3.1 软件工程基本概念 1、软件的相关概念
计算机软件是包括程序、数据及相关文档的完整集合。
软件的特点包括:1)软件是一种逻辑实体,而不是物理实体,具有抽象性;2)软件的生产与硬件不同,它没有明显的制作过程;3)软件在运行、使用期间不存在磨损、老化问题;4)软件的开发、运行对计算机系统具有依赖性,受计算机系统的限制,这导致了软件移植的问题;5)软件复杂性高,成本昂贵;6)软件开发涉及诸多的社会因素。 2、软件危机与软件工程
软件工程源自软件危机。所谓软件危机是泛指在计算机软件的开发和维护过程中所遇到的一系列严重问题。具体的说,在软件开发和维护过程中,软件危机主要表现在:
1)软件需求的增长得不到满足。用户对系统不满意的情况经常发生。
2)软件开发成本和进度无法控制。开发成本超出预算,开发周期大大超过规定日期的情况经常发生。 3)软件质量难以保证。
4)软件不可维护或维护程度非常低。 5)软件的成本不断提高。
6)软件开发生产率的提高跟不上硬件的发展和应用需求的增长。 总之,可以将软件危机可以归结为成本、质量、生产率等问题。