摘要:本节继续介绍二叉树的相关内容,包括二叉查找树和AVL树。 (1)二叉查找树: 定义: 使二叉树成为二叉查找树的性质是,对于树中的每个结点X,它的左子树中所有的关键字值小于X的关键字的值,而它的右子树中所有关键字的值大于X的关键字值。 二叉查找树的平均深度是O(log N)。 对于二叉查找树的删除例程
阅读全文
摘要:对于大量的数据,链表的线性访问时间太慢,不宜使用。我们介绍一种简单的数据结构,其大部分操作的平均时间为O(log N)。 (1)学习目标: 我们将要涉及到的数据结构叫做二叉查找树(binary search tree)。 我们将要了解如下内容: (2)树的基础知识: 树的递归定义: 一棵树由称作根(
阅读全文
摘要:本节继续介绍表、栈、队列在编程实践中的应用。 (1)行编辑程序:(允许用户输入出差错,并在发现错误时可以及时更正。) 功能:接受用户从终端输入的字符型的数据,并存入用户的数据区。由于不能保证不出差错,因此“每接受一个字符即存入用户数据区”的做法不是最恰当的;较好的做法是,设立一个输入的缓冲区,用以接
阅读全文
摘要:在接下来的几篇博文中,将介绍表、栈、队列在编程实践中的应用。 (1)表达式求值: 输入一个中缀表达式,操作符包括(+ - * / ^)。转化为后缀表达式之后并计算表达式的值: 要求: 1.输入的中缀表达式必须是一个完整的字符串; 2.不限制数字的位数和正负,负数用()括起来; 代码如下: 与之前写的
阅读全文
摘要:介绍队列的相关知识: (3)队列ADT: 像栈一样,队列也是表。然而,使用队列时插入在一端进行而删除在另一端进行。 3.1队列模型 队列的基本操作是Enqueue(入队),它是在表的末端插入一个元素;还有Dequeue(出队),它是删除(或同时)返回在表的开头的元素。 3.2队列的数组实现 如同栈的
阅读全文
摘要:介绍栈的相关知识: (2)栈ADT: 2.1栈模型: 栈是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫做栈的顶(top)。对栈的基本操作有Push(进栈)和Pop(出栈),前者相当于插入,后者则是删除最后插入的元素。 栈有时又叫做LIFO(后进先出表)。一般的栈模型是,存在某个元素位
阅读全文
摘要:在这里我介绍四个使用表解决实际中的问题的例子,分别是: 1.多项式的加法和乘法运算; 2.基数排序; 3.表的游标实现; 4.多重表在学生选课系统中的应用。(可选) (1)多项式的加法和乘法: 多项式的加法和乘法有两个实现方式,第一个是用数组来实现,它适合大多数项都有的稠密的多项式;第二个是用链表来
阅读全文
摘要:本节讨论最简单和最基本的三种数据结构:表,栈和队列。 每种程序都明晰地至少使用一种这样的数据结构,而栈在程序中总要间接地用到。 内容: 1.介绍抽象数据类型(ADT)的概念; 2.阐述如何对表进行有效的操作; 3.介绍栈ADT及其在实现递归方面的应用; 4.介绍队列ADT及其在操作系统和算法设计上的
阅读全文
摘要:数据结构和算法分析的编程习题。 (1)生成不重复的随机数,并且具有上界和下界。可以产生有序的,也可以产生无序的。 知识: C编程语言不允许返回整个数组作为函数的参数。但是,您也可以返回一个指针,没有索引到一个数组中指定数组的名称。 例如: 运行结果: 错误运用的实例: 1)在上述第6行,定义数组时未
阅读全文
摘要:算法是为了求解一个问题需要遵循的、被清楚地指定的简单指令的集合。对于一个问题,一旦给定某种算法并且其是正确的,那么重要的一步就是确定该算法将需要多少诸如时间或空间等资源量的问题。 此篇博客将讨论: 1.如何估计一个程序所需要的时间; 2.如何降低程序运行所需要的时间; 3.粗心使用递归的后果; 4.
阅读全文
摘要:(1)问题引入 问题一: 解决一个流行的字谜,输入是由一些字母和单词的二维数组组成。目标是要找出字谜中的单词,这些单词可能是水平、垂直、或沿对角线以任何方式放置的。作为例子下表中所示的字谜由单词“this”,"two","fat"和“that”组成。单词this从(1,1)开始,并延伸至(1,4),
阅读全文
摘要:c系列博客的第二个主题将围绕数据结构和算法分析展开。 数据结构主要研究组织大量数据的方法,而算法分析则是对算法运行时间的评估。希望通过这一系列博客,能够培养良好的程序设计技巧和算法分析能力。 我们将要讨论的内容有: 1.离散数学和递归的一些复习资料。 2.处理算法分析,阐述渐进分析和它的主要弱点。
阅读全文
摘要:为了提高数据输入/输出的处理效率,可以将程序运行时所需要的原始数据从文件中读取,并将程序运行的结果写入到文件中。 (1)文件概述 1)基本概念 文件是指存储在外部介质上数据的集合,可以是程序文件、可执行文件、也可以是原始数据文件或一组输出结果。 文件有不同的类型,可以通过扩展名来区分。操作系统是以文
阅读全文
摘要:在c语言中,结构体数据类型与共用体数据类型都属于构造类型。共用体与结构体数据类型在定义上十分相似,但它们在存储空间的占用分配上有本质的区别。结构体变量是各种类型数据的集合,各成员占据不同的存储空间,而共用体变量的所有成员占用相同的存储空间,在某一时刻只有一个成员起作用。 (1)共用体类型的定义 定义
阅读全文
摘要:C语言提供了另外两种构造类型:结构体与公用体,用来存储若干个类型不同但彼此组成一个集合的数据总体。 (1)结构体类型与结构体变量 1.定义 其一般形式为: struct 结构体类型名{ 数据类型1 成员名1; 数据类型2 成员名2; 数据类型3 成员名3; ...... } 定义一个结构体变量只是描
阅读全文
摘要:(1)指针与二维数组 一个数组的名字代表该数组的的首地址,是地址常量(作为形式参数的数组名除外),这一规定对二维数组或更高维数组同样适用。 在c语言中定义的任何一个二维数组实际上都可以看做是一个一维数组,该一维数组中的每一个成员又是一个一维数组。 若有定义int d[3][4],i,j;且0<=i<
阅读全文
摘要:指针是c语言的一个重要概念,指针类型是c语言最有特色的数据类型: *利用指针编写的程序可使调用函数共享变量或数据结构,实现双向数据通信; *可以实现内存空间的动态存储分配;可以提高程序的编译效率和执行速度。 (1)指针的基本概念及指针变量的定义 1.基本概念 计算机的内存是以字节为单位的连续的存储空
阅读全文
摘要:根据模块化程序设计的原则,一个较大的程序一般要分为若干个小模块,每个模块实现一个比较简单的功能。在c语言中,函数是一个基本的程序模块。 (1)函数的基本概念: 1)基本介绍: 任何一个结构化的程序都可以用三种基本结构组成:顺序结构、选择结构和循环结构,为了利用这三种结构编写程序,通常采用自顶向下,逐
阅读全文
摘要:到目前为止,前面介绍的都是属于基本类型的数据。除此之外,C语言还提供了一些更为复杂的数据类型,称为构造类型。数组就是最基本的构造类型。若要针对一批数据进行某种操作,采用数组是一种方便可行的方法。 (1)一维数组: 1.一维数组的定义与引用 数组在引用之前必须事先定义。定义的作用是通知编译程序在内存中
阅读全文
摘要:本节介绍c语言的编程实例。 (1)求方程ax^2+bx+0的解: 方程有解有以下几种可能: 1.b^2-4ac=0,方程有两个相等实根。 2.b^2-4ac>0,方程有两个不等实根。 3.b^2-4ac<0,方程有两个共轭复根。 程序中需要判断b^2-4ac是否等于0,由于它是实数,在存储时会有一些
阅读全文