文档介绍:第1章数据结构与算法 算法的复杂度 1. 算法的基本概念利用计算机算法为计算机解题的过程实际上是在实施某种算法。(1)算法的基本特征算法一般具有 4个基本特征:可行性、确定性、有穷性、拥有足够的情报。(2)算法的基本运算和操作算法的基本运算和操作包括:算术运算、逻辑运算、关系运算、数据传输。(3)算法的 3种基本控制结构算法的 3种基本控制结构是:顺序结构、选择结构、循环结构。(4)算法基本设计方法算法基本设计方法:列举法、归纳法、递推、递归、减半递推技术、回溯法。(5)指令系统所谓指令系统指的是一个计算机系统能执行的所有指令的集合。 。注意两者的区别,无混淆,见表 1-1 。表1-1 算法复杂性名称描述时间复杂度执行算法所需要的计算工作量空间复杂度执行这个算法所需要的内存空间 数据结构 逻辑结构和存储结构 (1)数据结构--- 有关联的数据元素的集合。(2)数据结构研究的 3个方面①数据集合中各数据元素之间所固有的逻辑关系,即数据的逻辑结构; ②对数据进行处理时,各数据元素在计算机中的存储关系,即数据的存储结构; ③对各种数据结构进行的运算。 ,它可以用一个数据元素的集合和定义在此集合中的若干关系来表示。数据的逻辑结构有两个要素:一是数据元素的集合,通常记为 D;二是 D上的关系,它反映了数据元素之间的前后件关系,通常记为 R。一个数据结构可以表示成: B=(D,R) 其中,B表示数据结构。为了反映 D中各数据元素之间的前后件关系,一般用二元组来表示。例如,如果把一年四季看作一个数据结构,则可表示成: B=(D,R) D={春季,夏季,秋季,冬季} R={( 春季,夏季),( 夏季,秋季),( 秋季,冬季)} (也称数据的物理结构)。由于数据元素在计算机存储空间中的位置关系可能与逻辑关系不同,因此,为了表示存放在计算机存储空间中的各数据元素之间的逻辑关系(即前后件关系) , 在数据的存储结构中,不仅要存放各数据元素的信息,还需要存放各数据元素之间的前后件关系的信息。一种数据的逻辑结构根据需要可以表示成多种存储结构,常用的存储结构有顺序、链接等存储结构。顺序存储方式主要用于线性的数据结构,它把逻辑上相邻的数据元素存储在物理上相邻的存储单元里,结点之间的关系由存储单元的邻接关系来体现。链式存储结构就是在每个结点中至少包含一个指针域,用指针来体现数据元素之间逻辑上的联系。 线性结构和非线性结构根据数据结构中各数据元素之间前后件关系的复杂程度,一般将数据结构分为两大类型: 线性结构与非线性结构。(1)如果一个非空的数据结构满足下列两个条件: ①有且只有一个根结点; ②每一个结点最多有一个前件,也最多有一个后件。则称该数据结构为线性结构。线性结构又称线性表。在一个线性结构中插入或删除任何一个结点后还应是线性结构。栈、队列、串等都为线性结构。如果一个数据结构不是线性结构,则称之为非线性结构。数组、广义表、树和图等数据结构都是非线性结构。(2)线性表的顺序存储结构具有以下两个基本特点: ①线性表中所有元素所占的存储空间是连续的; ②线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。元素 ai的存储地址为:ADR(ai)=ADR(a1)+(i-1)k ,ADR(a1) 为第一个元素的地址, k代表每个元素占的字节数。(3)顺序表的运算有查找、插入、删除 3种。 栈 1. 栈的基本概念栈( stack )是一种特殊的线性表,是限定只在一端进行插入与删除的线性表。在栈中,一端是封闭的,既不允许进行插入元素,也不允许删除元素;另一端是开口的,允许插入和删除元素。通常称插入、删除的这一端为栈顶,另一端为栈底。当表中没有元素时称为空栈。栈顶元素总是最后被插入的元素,从而也是最先被删除的元素;栈底元素总是最先被插入的元素,从而也是最后才能被删除的元素。栈是按照“先进后出”或“后进先出”的原则组织数据的。例如,枪械的子弹匣就可以用来形象的表示栈结构。子弹匣的一端是完全封闭的,最后被压入弹匣的子弹总是最先被弹出,而最先被压入的子弹最后才能被弹出。 2. 栈的顺序存储及其运算栈的基本运算有 3种:入栈、退栈与读栈顶元素。①入栈运算:在栈顶位置插入一个新元素; ②退栈运算:取出栈顶元素并赋给一个指定的变量; ③读栈顶元素:将栈顶元素赋给一个指定的变量 队列 1. 队列的基本概念队列是只允许在一端进行删除,在另一端进行插入的顺序表,通常将允许删除的这一端称为队头,允许插入的这一端称为队尾。当表中没有元素时