数据结构期末复习总结

数据结构期末复习总结
数据结构期末复习总结

数据结构总结(建议转换成pdf格式阅读)

第一章绪论

数据就是指能够被计算机识别、存储和加工处理的信息的载体。

数据元素是数据的基本单位,有时一个数据元素可以由若干个数据项组成。数据项是具有独立含义的最小标识单位。如整数这个集合中,10 这个数就可称是一个数据元素.又比如在一个数据库(关系式数据库)中,一个记录可称为一个数据元素,而这个元素中的某一字段就是一个数据项。

数据结构的定义包括以下三方面内容:逻辑结构、存储结构、和对数据的操作。

数据的逻辑结构分为:线性结构、树形结构、复杂结构

数据的存储结构分为:顺序表示、链接表示、散列表示、索引表示

时间复杂度和渐近时间复杂度:前者是某个算法的时间耗费,它是该算法所求解问题规模n 的函数,而后者是指当问题规模趋向无穷大时,该算法时间复杂度的数量级。当我们评价一个算法的时间性能时,主要标准就是算法的渐近时间复杂度,因此,在算法分析时,往往对两者不予区分,经常是将渐近时间复杂度T(n)=O(f(n))简称为时间复杂度,其中的f(n)一般是算法中频度最大的语句频度。算法中语句的频度不仅与问题规模有关,还与输入实例中各元素的取值相关。但是我们总是考虑在最坏的情况下的时间复杂度。以保证算法的运行时间不会比它更长。

第二章线性表

线性表的逻辑结构特征是很容易理解的,如其名,它的逻辑结构特征就好象是一条线,上面打了一个个结,很形象的,如果这条线上面有结,那么它就是非空表,只能有一个开始结点,有且只能有一个终端结点,其它的结前后所相邻的也只能是一个结点(直接前趋和直接后继)。关于线性表上定义的基本运算,主要有构造空表、求表长、取结点、查找、插入、删除等。

线性表的逻辑结构和存储结构之间的关系。在计算机中,如何把线性表的结点存放到存储单元中,就有许多方法,最简单的方法就是按顺序存储。就是按线性表的逻辑结构次序依次存放在一组地址连续的存储单元中。在存储单元中的各元素的物理位置和逻辑结构中各结点相邻关系是一致的。在顺序表中实现的基本运算主要讨论了插入和删除两种运算。对于顺序表的插入和删除运算,其平均时间复杂度均为O(n)。

线性表的链式存储结构。它与顺序表不同,链表是用一组任意的存储单元来存放线性表的结点,这组存储单元可以分布在内存中任何位置上。因此,链表中结点的逻辑次序和物理次序不一定相同。所以为了能正确表示结点间的逻辑关系,在存储每个结点值的同时,还存储了其后继结点的地址信息(即指针或链)。这两部分信息组成链表中的结点结构。对于单链表,其操作运算主要有建立单链表(头插法、尾插法和在链表开始结点前附加一个头结点的算法)、查找(按序号和按值)、插入运算、删除运算等。以上各运算的平均时间复杂度均为O(n).其主要时间是耗费在查找操作上。

循环链表是一种首尾相接的链表。也就是终端结点的指针域不是指向NULL 空而是指向开始结点(也可设置一个头结点),形成一个环。采用循环链表在实用中多采用尾指针表示单循环链表。这样做的好处是查找头指针和尾指针的时间都是O(1),不用遍历整个链表了。判别链表终止的条件也不同于单链表,它是以指针是否等于某一指定指针如头指针或尾指针来确定。

双链表就是双向链表,就是在单链表的每个结点里再增加一个指向其直接前趋的指针域prior,这样形成的链表就有两条不同方向的链。使得从已知结点查找其直接前趋结点可以和查找其直接后继结点的时间一样缩短为O(1)。双链表一般也由头指针head 惟一确定。

双链表也可以头尾相链接构成双(向)循环链表。

顺序表和链表的比较

具体要求顺序表链表

基于空间适于线性表长度变化不大,易

于事先确定其大小时采用。

适于当线性表长度变化大,难

以估计其存储规模时采用。

基于时间由于顺序表是一种随机存储

结构,当线性表的操作主要是

查找时,宜采用。

链表中对任何位置进行插入

和删除都只需修改指针,所以

这类操作为主的线性表宜采

用链表做存储结构。若插入和

删除主要发生在表的首尾两

端,则宜采用尾指针表示的单

循环链表。

第三章字符串

串就是字符串,是一种特殊的线性表,它的每个结点仅由一个字符组成。

空串:是指长度为零的串,也就是串中不包含任何字符(结点)。

空白串:指串中包含一个或多个空格字符的串。不同与空串,它的结点就是一个空格字符。

在一个串中任意个连续字符组成的子序列称为该串的子串,包含子串的串就称为主串。子串在主串中的序号就是指子串在主串中首次出现的位置。如A="I love you",B="love", 则B 在A 中的序号为3,注意空格也是字符。

空串是任意串的子串,任意串是他自身的子串。

串是特殊的线性表(结点是字符),所以串的存储结构与线性表的存储结构类似。串的顺序存储结构简称为顺序串,顺序串又可按存储分配的不同分为静态存储分配的顺序串和动态存储分配的顺序串。

静态的意思可简单地理解为一个确定的存储空间,它的长度是不可变的。如直接使用定长的字符数组来定义一个串。它的优点是涉及串长的操作速度快,因为它的最大长度是不变的。

动态存储分配就是在定义串时不分配存储空间,直到需要使用时按所需串的长度分配存储单元给它,并且在运行中还可以根据需要变化串的长度,这就是动态分配。不过这样的串仍是顺序存储的,也就是说指针指向串的首地址,后面的结点是连续存储的。

串的链式存储就是用单链表的方式存储串值,串的这种链式存储结构简称为链串。链串与单链表的差异只是它的结点数据域为单个字符。这种存储结构方便于串的插入和删除操作,但是空间利用率不高,因为存放每一个字符要"搭配"一个指向下一字符的地址, 而地址所占空间是比较大的。为了解决这种"存储密度"过低的状况,可以让一个结点存储多个字符,事实上这是顺序串和链串的综合(折衷)。

子串定位运算又称串的"模式匹配"或"串匹配",就是在主串中查找出子串出现的位置,这在应用中非常广泛,比如文本编辑中的"查找和替换"用到的就是子串定位运算的算法。

第四章栈与队列

栈的逻辑结构和我们先前学过的线性表相同,如果它是非空的,则有且只有一个开始结点,有且只能有一个终端结点,其它的结点前后所相邻的也只能是一个结点(直接前趋

和直接后继),但是栈的运算规则与线性表相比有更多的限制,栈(Stack)是仅限制在表的

一端进行插入和删除运算的线性表,通常称插入、删除这一端为栈顶,另一端称为栈底。表中无元素时为空栈。栈的修改是按后进先出的原则进行的,我们又称栈为LIFO表(Last In First Out).

栈的基本运算有六种:

构造空栈:InitStack(S)、

判栈空: StackEmpty(S)、

判栈满:StackFull(S)、

进栈:Push(S,x)、可形象地理解为压入,这时栈中会多一个元素

退栈:Pop(S) 、可形象地理解为弹出,弹出后栈中就无此元素了。

取栈顶元素:StackTop(S),不同与弹出,只是使用栈顶元素的值,该元素仍在栈顶不会

改变。

由于栈也是线性表,因此线性表的存储结构对栈也适用,通常栈有顺序栈和链栈两种存储结构,这两种存储结构的不同,则使得实现栈的基本运算的算法也有所不同。

队列也是一种运算受限的线性表,它的运算限制与栈不同,是两头都有限制,插入只能在表的一端进行(只进不出),而删除只能在表的另一端进行(只出不进),允许删除的一

端称为队尾(rear),允许插入的一端称为队头(Front) ,队列的操作原则是先进先出的,

所以队列又称作FIFO 表(First In First Out)

队列的基本运算也有六种:

置空队:InitQueue(Q)

判队空:QueueEmpty(Q)

判队满:QueueFull(Q)

入队:EnQueue(Q,x)

出队:DeQueue(Q)

取队头元素:QueueFront(Q),不同与出队,队头元素仍然保留

队列也有顺序存储和链式存储两种存储结构,前者称顺序队列,后者为链队。

为了克服空间浪费,我们引入循环向量的概念,就好比是把向量空间弯起来,形成一个头尾相接的环形,这样,当存于其中的队列头尾指针移到向量空间的上界(尾部)时,再

加1 的操作(入队或出队)就使指针指向向量的下界,也就是从头开始。这时的队列就称

循环队列。

通常我们应用的大都是循环队列。由于循环的原因,光看头尾指针重叠在一起我们并不能判断队列是空的还是满的,这时就需要处理一些边界条件,以区别队列是空还是满。方法至少有三种,一种是另设一个布尔变量来判断(就是请别人看着,是空还是满由他

说了算),第二种是少用一个元素空间,当入队时,先测试入队后尾指针是不是会等于

头指针,如果相等就算队已满,不许入队。第三种就是用一个计数器记录队列中的元素的总数,这样就可以随时知道队列的长度了,只要队列中的元素个数等于向量空间的长度,就是队满。

队列的链式存储结构称为链队列,一个链队列就是一个操作受限的单链表。为了便于在表尾进行插入(入队)的操作,在表尾增加一个尾指针,一个链队列就由一个头指针和一

个尾指针唯一地确定。链队列不存在队满和上溢的问题。在链队列的出队算法中,要注意当原队中只有一个结点时,出队后要同进修改头尾指针并使队列变空。

第五章二叉树与树

树的逻辑结构特征是:树中任一结点都可以有零个或多个直接后继(孩子)结点,但至多

只能有一个直接前趋(双亲)结点。树形结构是非线性结构。

二叉树的定义:二叉树是n(n≥0)个结点的有限集,它或者是空集(n=0),或者由一个根结

点及两棵互不相交的分别称作这个根的左子树和右子树的二叉树组成。

一般二叉树的3 个重要性质:

第i 层至多有2i 个结点

高度为k 的二叉树中,最多有2 k+1 -1 个结点

叶子数=度2 结点数-1

二叉树的顺序存储结构就是把二叉树的所有结点按照一定次序(从根结点起,从上层到

下层,从左往右编号就得到了存放的次序)存储到一片连续的存储单元中

用顺序存储方式对于完全二叉树而言其结构简单又节省空间,但是对于一般二叉树并不合适。因此树的存储结构更多的是用链式存储。结点的结构为两个指针域lchild 和rchild 分别指向该结点的左孩子和右孩子,另有一个数据域data 存放结点数据。把所有二叉

树的结点,加上一个指向根结点的指针就构成了二叉树的链式存储结构,称为二叉链表。它就是由根指针root 唯一确定的。

根据访问结点的次序不同可得三种遍历:先序遍历(前序遍历或先根遍历),中序遍历(或中根遍历)、后序遍历(或后根遍历)。

遍历的算法就是一个递归算法,以中序遍历为例,它的定义为

若二叉树非空,则依次执行如下操作:

(1) 遍历左子树;

(2) 访问根结点;

(3) 遍历右子树。

将(1)(2)对调则得先序遍历,将(2)(3)对调则得后序遍历。

利用二叉链表中的n+1 个空指针域来存放指向某种遍历次序下的前趋结点和后继结点

的指针,这些附加的指针就称为"线索",加上线索的二叉链表就称为线索链表。

二叉树线索化的目的及其实质:利用线索化后的二叉树中的线索就可以直接找到该结点在某种遍历序列中的前趋和后继结点。其实质就是在遍历过程中用线索取代空指针。

在中序线索树中查找给定结点的中序前趋和中序后继的方法:若结点*p 的左子树(或右

子树非空),则*p 的中序前趋是从*p 的左孩子开始沿着右指针链往下查找直到找到一个没有右孩子的结点为止,而*p 的中序后继是从它的右孩子开始沿着左指针链往下直到

找到一个没有左孩子的结点为止。

线索使得查找中序前趋和中序后继变得简单有效,但对于查找指定结点的前序前趋和后序后继并没有什么作用。其原因是查找前序前趋和后序后继结点常常要用到给定结点的双亲结点才能找到,而线索二叉树中的结点没有指向其双亲结点的指针,所以线索对于这两种序列的结点查找并非有效。

树和森林及二叉树的转换:三者是唯一对应的,它们之间的转换办法应掌握。(口诀一则)

树变二叉:兄弟相连留长子。

林变二叉:树变二叉根相连。

二叉变树:左孩右右连双亲,去掉原来右孩线。

树的存储结构:有双亲链表表示法(就是在每个结点设一指针指向其双亲以唯一地表示任何一棵树,用向量表示),这种表示法中指针是向上链接的,所以对于求指定结点的双亲或祖先十分方便,但不适于求指定结点的孩子及后代。

孩子链表表示法(就是为树中每个结点设置一个孩子链表,并将结点及相应的孩子链表

的头指针存放在一个向量中)孩子链表表示便于实现涉及孩子结点及子孙的运算,但不便于实现与双亲有关的运算。因此可以两种表示法结合形成双亲孩子链表表示法。

孩子兄弟链表表示法(就是在存储结点信息的同时,附加两个分别指向该结点的最左孩子和右邻兄弟的指针域)这种存储结构的最大优点是,它和二叉树的二叉链表表示完全一样,因此可利用二叉树的算法来实现对树的操作。

树的路径长度是从树根到树中每一结点的路径长度之和。在结点数目相同的二叉树中,完全二叉树的路径长度最短。

树的代价就是树的带权路径长度,它的值是树中所有叶结点的带权路径长度之和。权就是某结点被赋予的一个实数(这在实际应用中是有某种意义的,比如使用率,数值等)。而树的带权路径长度最小(代价最小)的二叉树就称为最优二叉树(即哈夫曼树)。

哈夫曼树的应用最广泛地是在编码技术上,它能够容易地求出给定字符集及其概率分布的最优前缀码。(最优前缀码就是平均码长最小的前缀码)

第六章集合与字典

哈希表的概念

对于动态查找表而言,1) 表长不确定;2)在设计查找表时,只知道关键字所属范围,

而不知道确切的关键字。因此,一般情况需建立一个函数关系,以H(key)作为关键字

为key 的录在表中的位置,通常称这个函数H(key)为哈希函数。(注意:这个函数并不

一定是数学函数)

哈希函数是一个映象,即:将关键字的集合映射到某个地址集合上,它的设置很灵活,只要这个地址集合的大小不超出允许范围即可。

由于哈希函数是一个压缩映象,因此,在一般情况下,很容易产生摮?突 现象,即:key1 key2,而H(key1) = H(key2) 并且,改进哈希函数只能减少冲突,而不能避免冲突。因此,在设计哈希函数时,一方面要考虑选择一个摵脭的哈希函数;另一方面要选择

一种处理冲突的方法。所谓摵?數?哈希函数,指的是对于集合中的任意一个关键字,

经哈希函数撚3象 到地址集合中任何一个地址的概率是相同的,称这类哈希函数为“均匀的 哈希函数。

处理冲突的方法

处理冲突的实际含义是:为产生冲突的地址寻找下一个哈希地址。

(1)开放定址法

为产生冲突的地址H(key)求得一个地址序列:H0, H1, H2, …, Hs 1≤s≤m-1

其中:H0 = H(key) Hi = ( H(key) + di ) MOD m i=1, 2, …,s

增量di 有三种取法:

1)性探测再散列

di = c i 最简单的情况c=1

2)方探测再散列

di = 12, -12, 22, -22, …,

3)随机探测再散列

di 是一组伪随机数列

(2)链地址法

将所有哈希地址相同的记录都链接在同一链表中。

线性探测容易产生二次聚集,链地址肯定不会产生二次聚集。一次聚集的产生主要

取决于哈希函数,在哈希函数均匀的前提下,可以认为没有一次聚集。

第七章高级字典结构

二叉排序树(二叉查找树)

(1) 定义

二叉排序树或者是一棵空树;或者是具有如下特性的二叉树:

1)若它的左子树不空,则左子树上所有结点的值均小于根结点的值;

2)若它的右子树不空,则右子树上所有结点的值均大于根结点的值;

3)它的左、右子树也都分别是二叉排序树。通常,取二叉链表作为二叉排序树的存

储结构。

(2) 二叉排序树的查找算法

若二叉排序树为空,则查找不成功;否则

1)若给定值等于根结点的关键字,则查找成功;

2)若给定值小于根结点的关键字,则继续在左子树上进行查找;

3)若给定值大于根结点的关键字,则继续在右子树上进行查找。

(3) 二叉排序树的插入算法

对于动态查找表,在查找不成功的情况下,尚需插入关键字等于给定值的记录,

并且从查找的过程容易得出插入的算法:

若二叉排序树为空树,则新插入的结点为根结点;否则,新插入的结点必为一个

新的叶子结点,其插入位置由查找过程中得到。

(4) 二叉排序树的删除算法

和插入相反,删除在查找成功之后进行,并且要求在删除二叉排序树上某个结点

之后,仍然保持二叉排序树的特性。分三种情况:

(1)被删除的结点是叶子;

(2)被删除的结点只有左子树或者只有右子树;

(3)被删除的结点既有左子树,也有右子树。

二叉平衡树

这是另一种形式的二叉查找树,其特点为左、右子树深度之差的绝对值不大于1,称有

这种特性的二叉树为平衡树。

B 树与B+树

(1)记忆定义和区别。

(2)主要理解B 树的检索、插入和删除。具体请见《数据结构重点图形绘制详细说明》。第八章排序

插入排序

思想:

假设在排序过程中,记录序列R[1..n]的状态为:

则一趟直接插入排序的基本思想为:将记录R[i]插入到有序子序列R[1..i-1]中,使记录

的有序序列从R[1..i-1]变为R[1..i]。

完成这个 插入斝è分三步进行:

◆查找R[i]的插入位置j+1;

◆将R[j+1..i-1]中的记录后移一个位置;

◆将R[i]复制到R[j+1]的位置上

(1)直接插入排序:利用顺序查找实现撛úR[1..i-1]中查找R[i]的插入位置 的插入排

序。

(2)折半插入排序:因为R[1..i-1]是一个按关键字有序的有序序列,则可以利用折半查

找实现撛úR[1..i-1]中查找R[i]的插入位置 ,如此实现的插入排序为折半插入排序。

(3)表插入排序:为了减少在排序过程中进行的撘?动敿?录的操作,必须改变排序

过程中采用的存储结构。利用静态链表进行排序,并在排序完成之

后,一次性地调整各个记录相互之间的位置,即将每个记录都调整

到它们所应该在的位置上。

(4)希尔排序:对待排记录序列先作“宏观 调整,再作撐¢观 调整。所谓“宏观 调整,指的是“跳跃式數?插入排序。即:将记录序列分成若干子

序列,每个子序列分别进行插入排序。关键是这种子序列不是由相

邻的记录构成的。

快速排序

(1)起泡排序

假设在排序过程中,记录序列R[1..n]的状态为:

思想:借助对无序序列中的记录进行摻?换”的操作,将无序序列中关键字最大的

记录 交换 到R[n-i+1]的位置上,实现第i 趟起泡插入排序。

(2)快速排序

思想:找一个记录,以它的关键字作为“枢轴 ,凡其关键字小于枢轴的记录均移

动至该记录之前,反之,凡关键字大于枢轴的记录均移动至该记录之后。致使一

趟排序之后,记录的无序序列R[s..t]将分割成两部分:R[s..i-1]和R[i+1..t],且

R[j].key≤R[i].key ≤R[j].key (s≤j≤i-1) 枢轴(i+1≤j≤t)。

选择排序

(1)简单选择排序

思想:假设排序过程中,待排记录序列的状态为:

并且有序序列中所有记录的关键字均小于无序序列中记录的关键字,则第i 趟简单

选择排序是,从无序序列R[i..n]的n-i+1 记录中选出关键字最小的记录加入有序序列。(2)堆排序

思想:先建一个摯ó顶堆”,即先选得一个关键字为最大的记录,然后与序列中最

后一个记录交换,之后继续对序列中前n-1 记录进行 筛选 ,重新将它调整为一

个摯ó顶堆斣ù将堆顶记录和第n-1 个记录交换,如此反复直至排序结束。所谓

撋?选斨傅氖?对一棵左/右子树均为堆的完全二叉树,摰髡麛根结点使整个二

叉树为堆。

归并排序

思想:将两个或两个以上的有序子序列“归并 为一个有序序列,是一种稳定的排序方法。在内部排序中,通常采用的是2-路归并排序。即将两个位置相邻的有序子序列:第九章图

有向图:顶点对 是有序的,,即E 中为有向边。

无向图:顶点对(x, y)是无序的,(x, y)= (y,x),即E 中为无向边。

完全图:若无向图中每两个顶点之间都存在着一条边,即有n(n-1)/2 条边,称完全无向图;若有向图中每两个顶点之间都存在着方向相反的两条边,即有n(n-1)条边,称完全有向图。

权:与图的边或弧相关的数,这些数可以表示从一个顶点到另一个顶点的距离或耗费网:带权的图

度:在无向图中是顶点边的数目;在有向图中,顶点的度=入度+出度

入度:有向图中顶点入边的数目

出度:有向图中顶点出边的数目

路径:从顶点V 到顶点V挼囊?个顶点系列

回路:一条路径上的前后两个端点相同

邻接点:无向图中一条边(Vi,Vj)的两个端点Vi,Vj

路径长度:路径上经过的边的数目

简单路径:一条路径上除了前后端点可以相同外,所有顶点均不相同

简单回路:前后两端点相同的简单路径

连通图:无向图中任意两个顶点都连通。如果一个图有n 个顶点和小于n-1 条边,则是非连通图。

连通分量:无向图的极大连通子图;任何连通图的连通分量只有一个,即其本身;非连通图有多个连通分量。

强连通图:有向图中任意两个顶点都连通

强连通分量:有向图的极大强连通子图;任何强连通图的强连通分量只有一个,即其本身;非强连通图有多个强连通分量。

生成树:在一个连通图G 中,如果取它的全部顶点和一部分边构成一个子图

G’,V(G’)=V(G) E(G’)∈E(G), 若边集E(G’)中的边将图中所有的顶点连通又不形

成回路,则称子图G’是图G 的一棵生成树。一棵有n 个顶点的生成树有且仅有n-1

条边,但有n-1 条边的图不一定是生成树。如果它多于n-1 条边,则一定有环。

最小生成树:具有权最小的生成树

有向树:一个有向图恰有一个顶点的入度为0,其余顶点的入度均为1。

邻接矩阵(Adjacency Matrix)的存储结构,就是用一维数组存储图中顶点的信息,用矩阵表示图中各顶点之间的邻接关系。

邻接表(Adjacency List)是图的一种顺序存储与链式存储结合的存储方法。邻接表表示法类似于树的孩子链表表示法。就是对于图G 中的每个顶点vi,将所有邻接于vi 的顶点vj 链成一个单链表,这个单链表就称为顶点vi 的邻接表,再将所有点的邻接表表头放到数组中,就构成了图的邻接表。

图的遍历:从图中某个顶点出发访遍图中其余顶点,并且使图中的每个顶点仅被访问一次过程。

深度优先搜索:从图中某个顶点V0 出发,访问此顶点,然后依次从V0 的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和V0 有路径相通的顶点都被访

问到,若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。

广度优先搜索:从图中的某个顶点V0 出发,并在访问此顶点之后依次访问V0 的所有未被访问过的邻接点,之后按这些顶点被访问的先后次序依次访问它们的邻接点,直至图中所有和V0 有路径相通的顶点都被访问到。若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。

最小生成树算法:

(1)Prim 算法:

Prim 算法构造最小生成树的过程为:在所有撈湟桓龆サ?已经落在生成树上,而

另一个顶点尚未落在生成树上 的边中取一条权值为最小的边,逐条加在生成树上,直至生成树中含有n-1 条边为止。

(2)Kruskal 算法:

Kruskal 算法构造最小生成树的过程为:先构造一个只含n 个顶点、而边集为空的

子图,把子图中各个顶点看成各棵树上的根结点,之后,从网的边集E 中选取一

条权值最小的边,若该条边的两个顶点分属不同的树,则将其加入子图,即把两棵

树合成一棵树,反之,若该条边的两个顶点已落在同一棵树上,则不可取,而应该

取下一条权值最小的边再试之。依次类推,直到森林中只有一棵树,也即子图中含

有n-1 条边为止。

有向无环图(directed acycling graph):一个无环的有向图简称DAG 图。有向无环图是描述一项工程进行过程的有效工具。主要进行拓扑排序和关键路径的操作。

拓扑排序:由某个集合上的一个偏序得到该集合上的一个全序的操作。拓扑排序实际上是对邻接表表示的图进行遍历的过程。

AOV 网(Activity On Vertex Network):顶点表示活动的网,即用顶点表活动,用弧表示活动间优先关系的有向图。

AOE 网(Activity On Edge Network):是一个带权的有向无环图,弧表示活动,权表示活动持续的时间,可以用来估算工程的完成时间。

关键路径:AOE 网中带权路径最长的路径。

AOV 网的拓扑排序:在顶点活动网AOV 网中,若不存在回路,则所有活动可排列成

一个线性序列,使得每个活动的所有前驱活动都排在该活动的前面,该序列叫拓扑序列,由AOV 网构造拓扑序列的过程叫做拓扑排序。AOV 网拓扑序列不是唯一的。

拓扑排序的算法:选一个入度为0 的顶点输出,并将其所有后继顶点的入度—1,重复

这两步直至输出所有顶点,或找不到入度为0 的顶点为止,为便于查找入度为0 的顶点,算法中利用顶点的入度域建立一个存放入度为0 的顶点的栈。__

数据结构学习总结

数据结构学习总结 经过一学期的学习,我对数据结构有了我自己的认识。一开始,我以为它和C语言和C++一样,都是讲一门语言。但学习之后,发现事实并不是这样,在数据结构的学习中,有线性表,有队,有栈,有树,有图等等。这些看起来没有关系,其实之间有着千丝万缕的联系。线性表是其中最简单的,所以在前几章学习,后面依次逐章变难,学起来也很吃力。 《数据结构与算法》以基本数据结构和算法设计策略为知识单元,系统地介绍了数据结构的知识与应用、计算机算法的设计与分析方法,主要内容包括线性表、树、图和广义表、算法设计策略以及查找与排序算法等。 线性表是最基本、最简单、也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。线性表的逻辑结构简单,便于实现和操作。因此,线性表这种数据结构在实际应用中是广泛采用的一种数据结构。线性表具有如下的结构特点:均匀性:虽然不同数据表的数据元素可以是各种各样的,但对于同一线性表的各数据元素必定具有相同的数据类型和长度。有序性:各数据元素在线性表中的位置只取决于它们的序号,数据元素之前的相对位置是线性的,即存在唯一的“第一个“和“最后一个”的数据元素,除了第一个和最后一个外,其它元素前面均只有一个数据元素直接前驱和后面均只有一个数据元素(直接后继)。在实现线性表数据元素的存储方面,一般可用顺序存储结构和链式存储结构两种方法。链式存储结构将在本网站线性链表中介绍,本章主要介绍用数组实现线性表数据元素的顺序存储及其应用。另外栈、队列和串也是线性表的特殊情况,又称为受限的线性结构。 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生

混凝土结构设计原理复习重点(非常好)

混凝土结构设计基本原理复习重点(总结很好) 第 1 章绪论 1.钢筋与混凝土为什么能共同工作: (1)钢筋与混凝土间有着良好的粘结力,使两者能可靠地结合成一个整体,在荷载作用下能够很好地共同变形,完成其结构功能。 (2)钢筋与混凝土的温度线膨胀系数也较为接近,因此,当温度变化时,不致产生较大的温度应力而破坏两者之间的粘结。 (3)包围在钢筋外面的混凝土,起着保护钢筋免遭锈蚀的作用,保证了钢筋与混凝土的共同作用。 1、混凝土的主要优点:1)材料利用合理2 )可模性好3)耐久性和耐火性较好4)现浇混凝土结构的整体性好5)刚度大、阻尼大6)易于就地取材 2、混凝土的主要缺点:1)自重大2)抗裂性差3 )承载力有限4)施工复杂、施工周期较长5 )修复、加固、补强较困难 建筑结构的功能包括安全性、适用性和耐久性三个方面 作用的分类:按时间的变异,分为永久作用、可变作用、偶然作用 结构的极限状态:承载力极限状态和正常使用极限状态 结构的目标可靠度指标与结构的安全等级和破坏形式有关。 荷载的标准值小于荷载设计值;材料强度的标准值大于材料强度的设计值 第2章钢筋与混凝土材料物理力学性能 一、混凝土 立方体抗压强度(f cu,k):用150mm×150mm×150mm的立方体试件作为标准试件,在温度为(20±3)℃,相对湿度在90%以上的潮湿空气中养护28d,按照标准试验方法加压到破坏,所测得的具有95%保证率的抗压强度。(f cu,k为确定混凝土强度等级的依据) 1.强度轴心抗压强度(f c):由150mm×150mm×300mm的棱柱体标准试件经标准养护后用标准试验方法测得的。(f ck=0.67 f cu,k) 轴心抗拉强度(f t):相当于f cu,k的1/8~1/17, f cu,k越大,这个比值越低。 复合应力下的强度:三向受压时,可以使轴心抗压强度与轴心受压变形能力都得到提高。 双向受力时,(双向受压:一向抗压强度随另一向压应力的增加而增加;双向受拉:混凝土的抗拉强度与单向受拉的基本一样; 一向受拉一向受压:混凝土的抗拉强度随另一向压应力的增加而降低,混凝土的抗压强度随另一向拉应力的增加而降低) 受力变形:(弹性模量:通过曲线上的原点O引切线,此切线的斜率即为弹性模量。反映材料抵2.变形抗弹性变形的能力) 体积变形(温度和干湿变化引起的):收缩和徐变等。 混凝土单轴向受压应力-应变曲线数学模型 1、美国E.Hognestad建议的模型 2、德国Rusch建议的模型 混凝土的弹性模量、变形模量和剪变模量 弹性模量 变形模量 切线模量 3、(1)徐变:混凝土的应力不变,应变随时间而增长的现象。 混凝土产生徐变的原因: 1、填充在结晶体间尚未水化的凝胶体具有粘性流动性质 2、混凝土内部的微裂缝在载荷长期作用下不断发展和增加的结果 线性徐变:当应力较小时,徐变变形与应力成正比;非线性徐变:当混凝土应力较大时,徐变变形与应力不成正比,徐变比应力增长更快。影响因素:应力越大,徐变越大;初始加载时混凝土的龄期愈小,徐变愈大;混凝土组成成分水灰比大、水泥用量大,徐变大;骨料愈坚硬、弹性模量高,徐变小;温度愈高、湿度愈低,徐变愈大;尺寸大小,尺寸大的构件,徐变减小。养护和使用条件 对结构的影响:受弯构件的长期挠度为短期挠度的两倍或更多;长细比较大的偏心受压构件,侧向挠度增大,承载力下降;由于徐变产生预应力损失。(不利)截面应力重分布或结构内力重分布,使构件截面应力分布或结构内力分布趋于均匀。(有利) (2)收缩:混凝土在空气中结硬时体积减小的现象,在水中体积膨胀。 影响因素:1、水泥的品种:水泥强度等级越高,则混凝土的收缩量越大; 2、水泥的用量:水泥越多,收缩越大;水灰比越大,收缩也越大; 3、骨料的性质:骨料的弹性模量大,则收缩小; 4、养护条件:在结硬过程中,周围的温、湿度越大,收缩越小; 5、混凝土制作方法:混凝土越密实,收缩越小; 6、使用环境:使用环境的温度、湿度大时,收缩小; 7、构件的体积与表面积比值:比值大时,收缩小。 对结构的影响:会使构件产生表面的或内部的收缩裂缝,会导致预应力混凝土的预应力损失等。 措施:加强养护,减少水灰比,减少水泥用量,采用弹性模量大的骨料,加强振捣等。 混凝土的疲劳是荷载重复作用下产生的。(200万次及其以上) 二、钢筋 光圆钢筋:HPB235 表面形状 带肋钢筋:HRB335、HRB400、RRB400 有明显屈服点的钢筋:四个阶段(弹性阶段、屈服阶段、强化阶段、破坏阶段),屈服强度力学性能是主要的强度指标。 (软钢)

大学数据结构期末知识点重点总结(考试专用)

.. ;.. 第一章 概论 1.数据结构描述的是按照一定逻辑关系组织起来的待处理数据元素的表示及相关操作,涉及数据的逻辑结构、存储结构和运算 2.数据的逻辑结构是从具体问题抽象出来的数学模型,反映了事物的组成结构及事物之间的逻辑关系 可以用一组数据(结点集合K )以及这些数据之间的 一组二元关系(关系集合R )来表示:(K, R) 结点集K 是由有限个结点组成的集合,每一个结点代表一个数据或一组有明确结构的数据 关系集R 是定义在集合K 上的一组关系,其中每个关系r (r ∈R )都是K ×K 上的二元关系 3.数据类型 a.基本数据类型 整数类型(integer)、实数类型(real)、布尔类型(boolean)、字符类型(char )、指针类型(pointer ) b.复合数据类型 复合类型是由基本数据类型组合而成的数据类型;复合数据类型本身,又可参与定义结构更为复杂的结点类型 4.数据结构的分类:线性结构(一对一)、树型结构(一对多)、图结构(多对多) 5.四种基本存储映射方法:顺序、链接、索引、散列 6.算法的特性:通用性、有效性、确定性、有穷性 7.算法分析:目的是从解决同一个问题的不同算法中选择比较适合的一种,或者对原始算法进行改造、加工、使其优化 8.渐进算法分析 a .大Ο分析法:上限,表明最坏情况 b .Ω分析法:下限,表明最好情况 c .Θ分析法:当上限和下限相同时,表明平均情况 第二章 线性表 1.线性结构的基本特征 a.集合中必存在唯一的一个“第一元素” b.集合中必存在唯一的一个“最后元素” c.除最后元素之外,均有唯一的后继 d.除第一元素之外,均有唯一的前驱 2.线性结构的基本特点:均匀性、有序性 3.顺序表 a.主要特性:元素的类型相同;元素顺序地存储在连续存储空间中,每一个元素唯一的索引值;使用常数作为向量长度 b. 线性表中任意元素的存储位置:Loc(ki) = Loc(k0) + i * L (设每个元素需占用L 个存储单元) c. 线性表的优缺点: 优点:逻辑结构与存储结构一致;属于随机存取方式,即查找每个元素所花时间基本一样 缺点:空间难以扩充 d.检索:ASL=【Ο(1)】 e .插入:插入前检查是否满了,插入时插入处后的表需要复制【Ο(n )】 f.删除:删除前检查是否是空的,删除时直接覆盖就行了【Ο(n )】 4.链表 4.1单链表 a.特点:逻辑顺序与物理顺序有可能不一致;属于顺序存取的存储结构,即存取每个数据元素所花费的时间不相等 b.带头结点的怎么判定空表:head 和tail 指向单链表的头结点 c.链表的插入(q->next=p->next; p->next=q;)【Ο(n )】 d.链表的删除(q=p->next; p->next = q->next; delete q;)【Ο(n )】 e.不足:next 仅指向后继,不能有效找到前驱 4.2双链表 a.增加前驱指针,弥补单链表的不足 b.带头结点的怎么判定空表:head 和tail 指向单链表的头结点 c.插入:(q->next = p->next; q->prev = p; p->next = q; q->next->prev = q;) d.删除:(p->prev->next = p->next; p->next->prev = p->prev; p->prev = p->next = NULL; delete p;) 4.3顺序表和链表的比较 4.3.1主要优点 a.顺序表的主要优点 没用使用指针,不用花费附加开销;线性表元素的读访问非常简洁便利 b.链表的主要优点 无需事先了解线性表的长度;允许线性表的长度有很大变化;能够适应经常插入删除内部元素的情况 4.3.2应用场合的选择 a.不宜使用顺序表的场合 经常插入删除时,不宜使用顺序表;线性表的最大长度也是一个重要因素 b.不宜使用链表的场合 当不经常插入删除时,不应选择链表;当指针的存储开销与整个结点内容所占空间相 比其比例较大时,应该慎重选择 第三章 栈与队列 1.栈 a.栈是一种限定仅在一端进行插入和删除操作的线性表;其特点后进先出;插入:入栈(压栈);删除:出栈(退栈);插入、删除一端被称为栈顶(浮动),另一端称为栈底(固定);实现分为顺序栈和链式栈两种 b.应用: 1)数制转换 while (N) { N%8入栈; N=N/8;} while (栈非空){ 出栈; 输出;} 2)括号匹配检验 不匹配情况:各类括号数量不同;嵌套关系不正确 算法: 逐一处理表达式中的每个字符ch : ch=非括号:不做任何处理 ch=左括号:入栈 ch=右括号:if (栈空) return false else { 出栈,检查匹配情况, if (不匹配) return false } 如果结束后,栈非空,返回false 3)表达式求值 3.1中缀表达式: 计算规则:先括号内,再括号外;同层按照优先级,即先乘*、除/,后加+、减-;相同优先级依据结合律,左结合律即为先左后右 3.2后缀表达式: <表达式> ::= <项><项> + | <项> <项>-|<项> <项> ::= <因子><因子> * |<因子><因子>/|<因子> <因子> ::= <常数> ? <常数> ::= <数字>|<数字><常数> <数字> ∷= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 3.3中缀表达式转换为后缀表达式 InfixExp 为中缀表达式,PostfixExp 为后缀表达式 初始化操作数栈OP ,运算符栈OPND ;OPND.push('#'); 读取InfixExp 表达式的一项 操作数:直接输出到PostfixExp 中; 操作符: 当‘(’:入OPND; 当‘)’:OPND 此时若空,则出错;OPND 若非空,栈中元 素依次弹出,输入PostfixExpz 中,直到遇到‘(’为止;若 为‘(’,弹出即可 当‘四则运算符’:循环(当栈非空且栈顶不是‘(’&& 当前运算符优先级>栈顶运算符优先级),反复弹出栈顶运 算符并输入到PostfixExp 中,再将当前运算符压入栈 3.4后缀表达式求值 初始化操作数栈OP ; while (表达式没有处理完) { item = 读取表达式一项; 操作数:入栈OP ; 运算符:退出两个操作数, 计算,并将结果入栈} c.递归使用的场合:定义是递归的;数据结构是递归的;解决问题的方法是递归的 2.队列 a.若线性表的插入操作在一端进行,删除操作在另一端进行,则称此线性表为队列 b.循环队列判断队满对空: 队空:front==rear ;队满:(rear+1)%n==front 第五章 二叉树 1.概念 a. 一个结点的子树的个数称为度数 b.二叉树的高度定义为二叉树中层数最大的叶结点的层数加1 c.二叉树的深度定义为二叉树中层数最大的叶结点的层数 d.如果一棵二叉树的任何结点,或者是树叶,或者恰有两棵非空子树,则此二叉树称作满二叉树 e.如果一颗二叉树最多只有最下面的两层结点度数可以小于2;最下面一层的结点都集中在该层最左边的位置上,则称此二叉树为完全二叉树 f.当二叉树里出现空的子树时,就增加新的、特殊的结点——空树叶组成扩充二叉树,扩充二叉树是满二叉树 外部路径长度E :从扩充的二叉树的根到每个外部结点(新增的空树叶)的路径长度之和 内部路径长度I :扩充的二叉树中从根到每个内部结点(原来二叉树结点)的路径长度之和 2.性质 a. 二叉树的第i 层(根为第0层,i ≥0)最多有2^i 个结点 b. 深度为k 的二叉树至多有2k+1-1个结点 c. 任何一颗二叉树,度为0的结点比度为2的结点多一个。n0 = n2 + 1 d. 满二叉树定理:非空满二叉树树叶数等于其分支结点数加1 e. 满二叉树定理推论:一个非空二叉树的空子树(指针)数目等于其结点数加1 f. 有n 个结点(n>0)的完全二叉树的高度为?log2(n+1)?,深度为?log2(n+1)?? g. 对于具有n 个结点的完全二叉树,结点按层次由左到右编号,则有: 1) 如果i = 0为根结点;如果i>0,其父结点编号是 (i-1)/2 2) 当2i+1∈N ,则称k 是k'的父结 点,k'是的子结点 若有序对∈N , 则称k'k ″互为兄弟 若有一条由 k 到达ks 的路径,则 称k 是的祖先,ks 是k 的子孙 2.树/森林与二叉树的相互转换 a.树转换成二叉树 加线: 在树中所有兄弟结点之间加一连线 抹线: 对每个结点,除了其最左孩子外,与其余孩 子之间的连线 旋转: 45° b.二叉树转化成树 加线:若p 结点是双亲结点的左孩子,则将的右孩子,右孩子的右孩子,所有右孩子,都与p 的双亲用线连起来 线 调整:将结点按层次排列,形成树结构 c.森林转换成二叉树 将各棵树分别转换成二叉树 将每棵树的根结点用线相连 为轴心,顺时针旋转,构成二叉树型结构 d.二叉树转换成森林 抹线:将二叉树中根结点与其右孩子连线,及沿右分支搜索到 的所有右孩子间连线全部抹掉,使之变成孤立的二叉树 还原:将孤立的二叉树还原成树 3.周游 a.先根(次序)周游 若树不空,则先访问根结点,然后依次先根周游各棵子树 b.后根(次序)周游 若树不空,则先依次后根周游各棵子树,然后访问根结点 c.按层次周游 若树不空,则自上而下自左至右访问树中每个结点 4.存储结构 “左子/右兄”二叉链表表示法:结点左指针指向孩子,右结点指向右兄弟,按树结构存储,无孩子或无右兄弟则置空 5. “UNION/FIND 算法”(等价类) 判断两个结点是否在同一个集合中,查找一个给定结点的根结点的过程称为FIND 归并两个集合,这个归并过程常常被称为UNION “UNION/FIND ”算法用一棵树代表一个集合,如果两个结点在同一棵树中,则认为它们在同一个集合中;树中的每个结点(除根结点以外)有仅且有一个父结点;结点中仅需保存父指针信息,树本身可以 存储为一个以其结点为元素的数组 6.树的顺序存储结构 a. 带右链的先根次序表示法 在带右链的先根次序表示中,结点按先根次序顺序存储在一片连续的存储单元中 每个结点除包括结点本身数据外,还附加两个表示结构的信息字段,结点的形式为: info 是结点的数据;rlink 是右指针,指向结点的下一个兄弟;ltag 是一个左标记,当结点没有子结点(即对应二 叉树中结点没有左子结点时),ltag 为 1,否则为 0 b. 带双标记位的先根次序表示法 规定当结点没有下一个兄弟(即对应的二叉树中结点没有右子结点时)rtag 为1,否则为0 c. 带双标记位的层次次序表示法 结点按层次次序顺序存储在一片连续的存储单元中 第七章 图 1.定义 a.假设图中有n 个顶点,e 条边: 含有e=n(n-1)/2条边的无向图称作完全图 含有e=n(n-1) 条弧的有向图称作有向完全图 若边或弧的个数e < nlogn ,则称作稀疏图,否则称作稠密图 b. 顶点的度(TD)=出度(OD)+入度(ID) 顶点的出度: 以顶点v 为弧尾的弧的数目 顶点的入度: 以顶点v 为弧头的弧的数目 c.连通图、连通分量 若图G 中任意两个顶点之间都有路径相通,则称此图为连通图 若无向图为非连通图,则图中各个极大连通子图称作此图的连通分量 d.强连通图、强连通分量 对于有向图,若任意两个顶点之间都存在一条有向路径,则称此有向图为强连通图 否则,其各个极大强连通子图称作它的强连通分量 e.生成树、生成森林 假设一个连通图有n 个顶点和e 条边,其中n-1条边和n 个顶点构成一个极小连通子图,称该极小连通子图为此连通图的生成树 对非连通图,则将由各个连通分量构成的生成树集合称做此非连通图的生成森林 2.存储结构 a.相邻矩阵表示法 表示顶点间相邻关系的矩阵 若G 是一个具有n 个顶点的图,则G 的相邻矩阵是如下定义的n ×n 矩阵: A[i,j]=1,若(Vi, Vj)(或)是图G 的边 A[i,j]=0,若(Vi, Vj)(或)不是图G 的边 b.邻接表表示法 为图中每个顶点建立一个单链表,第i 个单链表中的结点表示依附于顶点Vi 的边(有向图中指以Vi 为尾的弧)(建立单链表时按结点顺序建立) 3.周游 a. 深度优先周游: 从图中某个顶点V0出发,访问此顶点,然后依次从V0的各个未被访问的邻接点出发,深度优先搜索遍历图中的其余顶点,直至图中所有与V0有路径相通的顶点都被访问到为止 b. 广度优先周游: 从图中的某个顶点V0出发,并在访问此顶点之后依次访问V0的所有未被访问过的邻接点,随后按这些顶点被访问的先后次序依次访问它们的邻接点,直至图中所有与V0有路径相通的顶点都被访问到为止,若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止 4.拓扑排序 拓扑排序的方法是:1)选择一个入度为0的顶点且输出之 2)从图中删掉此顶点及所有的出边 3)回到第1步继续执行,直至图空或者图不空但找不到无前驱(入度为0)的顶点为止 5.单源最短路径(Dijkstra 算法) 6.每对顶点间的最短路径(Floyd 算法) 7.最小生成树 a.Prim 算法 b.Kruskal 算法 c.两种算法比较:Prim 算法适合稠密图,Kruskal 算法适合稀疏图 第八章 内排序 算法 最大时间 平均时间 直接插入排序 Θ(n2) Θ(n2) 冒泡排序 Θ(n2) Θ(n2) 直接选择排序 Θ(n2) Θ(n2) Shell 排序 Θ(n3/2) Θ(n3/2) 快速排序 Θ(n2) Θ(nlog n) 归并排序 Θ(nlog n) Θ(nlog n) 堆排序 Θ(nlog n) Θ(nlog n) 桶式排序 Θ(n+m) Θ(n+m) 基数排序 Θ(d ·(n+r)) Θ(d ·(n+r)) 最小时间 S(n) 稳定性 Θ(n) Θ(1) 稳定 Θ(n) Θ(1) 稳定 Θ(n2) Θ(1) 不稳定 Θ(n3/2) Θ(1) 不稳定 Θ(nlog n) Θ(log n) 不稳定 Θ(nlog n) Θ(n) 稳定 Θ(nlog n) Θ(1) 不稳定 Θ(n+m) Θ(n+m) 稳定 Θ(d ·(n+r)) Θ(n+r) 稳定 第十章 检索 1.平均检索长度(ASL )是待检索记录集合中元素规模n 的函数, 其定义为: ASL= Pi 为检索第i 个元素的概率;Ci 为找到第i 个元素所需的比较次数 2.散列 a.除余法 用关键码key 除以M(取散列表长度),并取余数作为散列地址 散列函数为:hash(key) = key mod M b.解决冲突的方法 开散列方法:把发生冲突的关键码存储在散列表主表之外(在主表外拉出单链表) 闭散列方法:把发生冲突的关键码存储在表中另一个位置上 c.线性探查 基本思想:如果记录的基位置存储位置被占用,就在表中下移,直到找到一个空存储位置;依次探查下述地址单元:d0+1,d0+2,...,m-1,0, 1,..., d0-1;用于简单线性探查的探查函数是:p(K, i) = i d.散列表的检索 1.假设给定的值为K ,根据所设定的散列函数h ,计算出散列地址h(K) 2. 如果表中该地址对应的空间未被占用,则检索失败,否则将该地址中的值与K 比较 3. 若相等则检索成功;否则,按建表时设定的处理冲突方法查找探查序列的下一个地址,如此反复下去,直到某个地址空间未被占用(可以插入),或者关键码比较相等(有重复记录,不需插入)为止 e.散列表的删除:删除后在删除地点应加上墓碑(被删除标记) f.散列表的插入:遇到墓碑不停止,知道找到真正的空位置 第十一章 索引技术 1.概念: a.主码:数据库中的每条记录的唯一标识 b.辅码:数据库中可以出现重复值的码 2.B 树 a.定义:B 树定义:一个m 阶B 树满足下列条件: (1) 每个结点至多有m 个子结点; (2) 除根和叶外 其它每个结点至少有??个子结点; (3) 根结点至少有两个子结点 例外(空树,or 独根) (4) 所有的叶在同一层,可以有??- 1到m-1个关键码 (5) 有k 个子结点的非根结点恰好包含k-1个关键码 b.查找 在根结点所包含的关键码K1,…,Kj 中查找给定的关键码值(用顺序检索(key 少)/二分检索(key 多));找到:则检索成功;否则,确定要查的关键码值是在某个Ki 和Ki+1之间,于是取pi 所指结点继续查找;如果pi 指向外部结点,表示检索失败. c.插入 找到的叶是插入位置,若插入后该叶中关键码个数

(完整版)非常实用的数据结构知识点总结

数据结构知识点概括 第一章概论 数据就是指能够被计算机识别、存储和加工处理的信息的载体。 数据元素是数据的基本单位,可以由若干个数据项组成。数据项是具有独立含义的最小标识单位。 数据结构的定义: ·逻辑结构:从逻辑结构上描述数据,独立于计算机。·线性结构:一对一关系。 ·线性结构:多对多关系。 ·存储结构:是逻辑结构用计算机语言的实现。·顺序存储结构:如数组。 ·链式存储结构:如链表。 ·索引存储结构:·稠密索引:每个结点都有索引项。 ·稀疏索引:每组结点都有索引项。 ·散列存储结构:如散列表。 ·数据运算。 ·对数据的操作。定义在逻辑结构上,每种逻辑结构都有一个运算集合。 ·常用的有:检索、插入、删除、更新、排序。 数据类型:是一个值的集合以及在这些值上定义的一组操作的总称。 ·结构类型:由用户借助于描述机制定义,是导出类型。 抽象数据类型ADT:·是抽象数据的组织和与之的操作。相当于在概念层上描述问题。 ·优点是将数据和操作封装在一起实现了信息隐藏。 程序设计的实质是对实际问题选择一种好的数据结构,设计一个好的算法。算法取决于数据结构。 算法是一个良定义的计算过程,以一个或多个值输入,并以一个或多个值输出。 评价算法的好坏的因素:·算法是正确的; ·执行算法的时间; ·执行算法的存储空间(主要是辅助存储空间); ·算法易于理解、编码、调试。 时间复杂度:是某个算法的时间耗费,它是该算法所求解问题规模n的函数。 渐近时间复杂度:是指当问题规模趋向无穷大时,该算法时间复杂度的数量级。 评价一个算法的时间性能时,主要标准就是算法的渐近时间复杂度。 算法中语句的频度不仅与问题规模有关,还与输入实例中各元素的取值相关。 时间复杂度按数量级递增排列依次为:常数阶O(1)、对数阶O(log2n)、线性阶O(n)、线性对数阶O(nlog2n)、平方阶O (n^2)、立方阶O(n^3)、……k次方阶O(n^k)、指数阶O(2^n)。

结构设计个人工作总结最新总结

结构设计个人工作总结 专业技术工作总结 本人马xx于2xx年6月毕业于xx科技学院,取得土木工程专业学士学位。毕业后进入xx新宇建筑设计有限公司参加工作,从事结构设计的技术工作,现任助理工程师职务。在各位领导和同事的支持和帮助下,自己的思想、工作、学习等各方面都取得了一定的成绩,个人综合素质也得到了一定的提高,下面就从专业技术角度对我的工作做一次全面总结: (一)、政治思想方面 在工作中,我坚决拥护党的各项政策、方针,每天都密切关注国内、国外的重大新闻和事件,关心和学习国家时事政治,把党的政治思想和方针应用于工程建设中。 (二)、主要工作业绩 在工作这些年里,我设计完成了如xx市xx房地产开发有限公司城东街道半沙村地块住宅建设项目,金海湾花苑商住建设项目,xx市北白象镇经济适用房和限价房建设工程项目,长城电器集团有限公司生产用房及辅助非生产。 (三)、结构技术工作方面的一些经验总结

(1)、拿到条件图不要盲目建模计算。先进行全面分析,与建筑设计人员进行沟通,充分了解工程的各种情况(功能、选型等)。 (2)、建模计算前的前处理要做好。比如荷载的计算要准确,不能估计。要完全根据建筑做法或使用要求来输入。 (3)、在进行结构建模的时候,要了解每个参数的意义,不要盲目修改参数,修改时要有依据。 (4)、在计算中,要充分考虑在满足技术条件下的经济性。不能随意加大配筋量或加大构件的截面。这一点要作为我们的设计理念之一来重视。 (5)、梁、柱、板等电算结束后要进行优化调整和修改,这都要有依据可循(需根据验算简图等资料)。 (四)、努力学习新知识,用知识武装自己 在完成好本职工作的同时,我还不断学习新知识,努力丰富自己。在这几年工作任务十分繁重的情况下,学习上,我一直严格要求自己,认真对待自己的工作。理论来源于生活,高于生活,更应该还原回到生活。工作中我时刻牢记要不断的学习,将理论知识与实际的工作很

数据结构期末总结

您现在的位置:希赛教育首页> 自考学院> 数据结构与算法> 正文 数据结构第三章(栈与队列)习题参考答案https://www.360docs.net/doc/ca11711876.html,作者:自考频道来源:希赛教育2008年1月5日发表评论进入社区 一、基础知识题 3.1 设将整数1,2,3,4依次进栈,但只要出栈时栈非空,则可将出栈操作按任何次序夹入其中,请回答下述问题: (1)若入、出栈次序为Push(1), Pop(),Push(2),Push(3), Pop(), Pop( ),Push(4), Pop( ),则出栈的数字序列为何(这里Push(i)表示i进栈,Pop( )表示出栈)? (2) 能否得到出栈序列1423和1432?并说明为什么不能得到或者如何得到。 (3)请分析1,2 ,3 ,4 的24种排列中,哪些序列是可以通过相应的入出栈操作得到的。 3.2 链栈中为何不设置头结点? 答:链栈不需要在头部附加头结点,因为栈都是在头部进行操作的,如果加了头结点,等于要对头结点之后的结点进行操作,反而使算法更复杂,所以只要有链表的头指针就可以了。 3.3 循环队列的优点是什么? 如何判别它的空和满? 答:循环队列的优点是:它可以克服顺序队列的"假上溢"现象,能够使存储队列的向量空间得到充分的利用。判别循环队列的"空"或"满"不能以头尾指针是否相等来确定,一般是通过以下几种方法:一是另设一布尔变量来区别队列的空和满。二是少用一个元素的空间。每次入队前测试入队后头尾指针是否会重合,如果会重合就认为队列已满。三是设置一计数器记录队列中元素总数,不仅可判别空或满,还可以得到队列中元素的个数。

3.4 设长度为n的链队用单循环链表表示,若设头指针,则入队出队操作的时间为何? 若只设尾指针呢? 答:当只设头指针时,出队的时间为1,而入队的时间需要n,因为每次入队均需从头指针开始查找,找到最后一个元素时方可进行入队操作。若只设尾指针,则出入队时间均为1。因为是循环链表,尾指针所指的下一个元素就是头指针所指元素,所以出队时不需要遍历整个队列。 3.5 指出下述程序段的功能是什么? (1) void Demo1(SeqStack *S){ int i; arr[64] ; n=0 ; while ( StackEmpty(S)) arr[n++]=Pop(S); for (i=0, i< n; i++) Push(S, arr[i]); } //Demo1 (2) SeqStack S1, S2, tmp; DataType x; ...//假设栈tmp和S2已做过初始化 while ( ! StackEmpty (&S1)) { x=Pop(&S1) ; Push(&tmp,x);

数据结构学习总结

数据结构与算法课程学习总结 2010年 5月 17日 班级:08计本(2)班姓名:谷敏敏学号:0804012023 时光飞逝,转眼之间,经过十几周的学习,“数据结构与算法”这门课程也已经接近尾声。通过学习、实验,我们明白“数据结构与算法”这门课是我们计算机专业人才培养计划中的一门必修的核心课程,同时也是计算机科学与技术专业同学的一门重要的基础专业课,重要之处不言而喻,所以,对于这门课大家也是比较认真投入的,学的也是比较尽心。当然这还与老师独特的教学风格以及不少的实验训练是密不可分的。 对于本学科的知识内容的概括、总结可如下所示: 1.第一章中是介绍的本学科的的一些基础、相关概念,如数据、数据元素、数据类型 以及数据结构的定义。其中,数据结构包括逻辑结构、存储结构和运算集合。逻辑 结构分为四类:集合型、线性、树形和图形结构,数据元素的存储结构分为:顺序 存储、链接存储、索引存储和散列存储四类。紧接着介绍了一些常用的数据运算。 最后着重介绍算法性能分析,包括算法的时间性能分析以及算法的空间性能分析。 2.第二章具体地介绍了顺序表的概念、基本运算及其应用。基本运算有:初始化表、 求表长、排序、元素的查找、插入及删除等。而关于元素查找方法课本例举了多种 方法,有:简单顺序查找、二分查找和分块查找。排序方法有:直接插入排序、希 尔排序、冒泡排序、快速排序、直接选择排序及归并排序等。最后介绍了顺序串的 概念以及字符处理问题,其重点核心内容在于串的模式匹配。 3.第三章介绍的是链表及其应用,链表中数据元素的存储不一定是连续的,还可以占 用任意的、不连续的物理存储区域。与顺序表相比,链表的插入、删除等功能是不 需要移动元素的,只需变化指针的取向即可,算法简单快捷,。链表这一章中介绍 了链表的节点结构、静态与动态链表的概念、链表的基本运算(如求表长、插入、 查找、删除等)、单链表的建立(头插法和尾插法)以及双向循环链表的定义、结 构、功能和基本算法。 4.第四章和第五章是关于堆栈和队列的介绍与应用。堆栈与队列是两种运算受限制的 线性结构。其基本运算方法与顺序表和链表运算方法基本相同,不同的是堆栈须遵 循“先进后出”的规则,对堆栈的操作只能在栈顶进行;而队列要遵循“先进先 出”的规则,课本中列出了两种结构的相应的基本算法,如入栈、出栈、入队、出 队等。在介绍队列时,提出了循环队列的概念,以避免“假溢出”的现象。同时, 对于其应用也分别讲述了如括号匹配问题等。 5.第六章介绍了特殊矩阵和广义表的概念与应用。其中,特殊矩阵包括对称矩阵、三 角矩阵、对角矩阵和稀疏矩阵等,课本中分别详细介绍了它们的存储结构。稀疏矩 阵的应用包括转置和加法运算等。最后介绍了广义表的相关概念及存储结构,关于 关于广义表的应用有:m元多项式的表示问题。 6.第七章是关于二叉树及其应用。在介绍有关概念时,提到了二叉树的性质以及两种 特殊的二叉树:完全二叉树和满二叉树。接着介绍二叉树的顺序存储和链接存储以 及生成算法。重点介绍二叉树的遍历算法(递归算法、先序、中序和后序遍历非递 归算法)和线索二叉树。二叉树的应用:基本算法、哈弗曼树、二叉排序树和堆与 堆排序。本章为本课程重点内容,需要重点掌握。

数据结构复习要点(整理版).docx

第一章数据结构概述 基本概念与术语 1.数据:数据是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序所处理的符号的总称。 2. 数据元素:数据元素是数据的基本单位,是数据这个集合中的个体,也称之为元素,结点,顶点记录。 (补充:一个数据元素可由若干个数据项组成。数据项是数据的不可分割的最小单位。 ) 3.数据对象:数据对象是具有相同性质的数据元素的集合,是数据的一个子集。(有时候也 叫做属性。) 4.数据结构:数据结构是相互之间存在一种或多种特定关系的数据元素的集合。 (1)数据的逻辑结构:数据的逻辑结构是指数据元素之间存在的固有逻辑关系,常称为数据结构。 数据的逻辑结构是从数据元素之间存在的逻辑关系上描述数据与数据的存储无关,是独立于计算机的。 依据数据元素之间的关系,可以把数据的逻辑结构分成以下几种: 1. 集合:数据中的数据元素之间除了“同属于一个集合“的关系以外,没有其他关系。 2. 线性结构:结构中的数据元素之间存在“一对一“的关系。若结构为非空集合,则除了第一个元素之外,和最后一个元素之外,其他每个元素都只有一个直接前驱和一个直接后继。 3. 树形结构:结构中的数据元素之间存在“一对多“的关系。若数据为非空集,则除了第一个元素 (根)之外,其它每个数据元素都只有一个直接前驱,以及多个或零个直接后继。 4. 图状结构:结构中的数据元素存在“多对多”的关系。若结构为非空集,折每个数据可有多个(或零个)直接后继。 (2)数据的存储结构:数据元素及其关系在计算机内的表示称为数据的存储结构。想要计算机处理数据,就必须把数据的逻辑结构映射为数据的存储结构。逻辑结构可以映射为以下两种存储结构: 1. 顺序存储结构:把逻辑上相邻的数据元素存储在物理位置也相邻的存储单元中,借助元素在存储器中的相对位置来表示数据之间的逻辑关系。 2. 链式存储结构:借助指针表达数据元素之间的逻辑关系。不要求逻辑上相邻的数据元素物理位置上也相邻。 5. 时间复杂度分析:1.常量阶:算法的时间复杂度与问题规模n 无关系T(n)=O(1) 2. 线性阶:算法的时间复杂度与问题规模 n 成线性关系T(n)=O(n) 3. 平方阶和立方阶:一般为循环的嵌套,循环体最后条件为i++ 时间复杂度的大小比较: O(1)< O(log 2 n)< O(n )< O(n log 2 n)< O(n2)< O(n3)< O(2 n )

结构设计原理知识点

第一章 钢筋混凝土结构基本概念及材料的物理力学性能 1.混凝土立方体抗压强度cu f :(基本强度指标)以边长150mm 立方体试件,按标准方法制作养护28d ,标准试验方法(不涂润滑剂,全截面受压,加载速度0.15~0.25MPa/s )测得的抗压强度作为混凝土立方体抗压强度 cu f 。 影响立方体强度主要因素为试件尺寸和试验方法。尺寸效应关系: cu f (150)=0.95cu f (100) cu f (150)=1.05cu f (200) 2.混凝土弹性模量和变形模量。 ①原点弹性模量:在混凝土受压应力—应变曲线图的原点作切线,该切线曲率即为原点弹性模量。表示为:E '=σ/ε=tan α0 ②变形模量:连接混凝土应力应变—曲线的原点及曲线上某一点K 作割线,K 点混凝土应力为σc (=0.5c f ),该割线(OK )的斜率即为变形模量,也称割线模量或弹塑性模量。 E c '''=tan α1=σc /εc 混凝土受拉弹性模量与受压弹性模量相等。 ③切线模量:混凝土应力应变—上某应力σc 处作一切线,该切线斜率即为相应于应力σc 时的切线模量''c E =d σ/d ε 3 . 徐变变形:在应力长期不变的作用下,混凝土的应变随时间增长的现象称为徐变。 影响徐变的因素:a. 内在因素,包括混凝土组成、龄期,龄期越早,徐变越大;b. 环境条件,指养护和使用时的温度、湿度,温度越高,湿度越低,徐变越大;c. 应力条件,压应力σ﹤0.5 c f ,徐变与应力呈线性关系;当压应力σ介于(0.5~0.8)c f 之间,徐变增长比应力快;当压应力σ﹥0.8 c f 时,混凝土的非线性徐变不收敛。 徐变对结构的影响:a.使结构变形增加;b.静定结构会使截面中产生应力重分布;c.超静定结构引起赘余力;d.在预应力混凝土结构中产生预 应力损失。 4.收缩变形:在混凝土中凝结和硬化的物理化学过程中体积随时间推移而减少的现象称为收缩。 混凝土收缩原因:a.硬化初期,化学性收缩,本身的体积收缩;b.后期,物理收缩,失水干燥。 影响混凝土收缩的主要因素:a.混凝土组成和配比;b.构件的养护条件、使用环境的温度和湿度,以及凡是影响混凝土中水分保持的因素;c.构件的体表比,比值越小收缩越大。 混凝土收缩对结构的影响:a.构件未受荷前可能产生裂缝;b.预应力构件中引起预应力损失;c.超静定结构产生次内力。 5.钢筋的基本概念 1.钢筋按化学成分分类,可分为碳素钢和普通低合金钢。 2钢筋按加工方法分类,可分为a.热轧钢筋;b.热处理钢筋;c.冷加工钢筋(冷拉钢筋、冷轧钢筋、冷轧带肋钢筋和冷轧扭钢筋。) 6.钢筋的力学性能 物理力学指标:(1)两个强度指标:屈服强度,结构设计计算中强度取值主要依据;极限抗拉强度,材料实际破坏强度,衡量钢筋屈服后的抗拉能力,不能作为计算依据。(2)两个塑性指标:伸长率和冷弯性能:钢材在冷加工过程和使用时不开裂、弯断或脆断的性能。 7.钢筋和混凝土共同工作的的原因:(1)混凝土和钢筋之间有着良好的黏结力;(2)二者具有相近的温度线膨胀系数;(3)在保护层足够的前提下,呈碱性的混凝土可以保护钢筋不易锈蚀,保证了钢筋与混凝土的共同作用。 第二章 结构按极限状态法设计计算的原则 1.结构概率设计的方法按发展进程划分为三个水准:a.水准Ⅰ,半概率设计法,只对影响结构可靠度的某些参数,用数理统计分析,并与经验结合,对结构的可靠度不能做出定量的估计;b.水准Ⅱ,近似概率设计法,用概率论和数理统计理论,对结构、构件、或截面设计的可靠概率做出近似估计,忽略了变量随时间的关系,非线性极限状态方程线性化;c.水准Ⅲ,全概略设计法,我国《公桥规》采用水准Ⅱ。 2.结构的可靠性:指结构在规定时间(设计基准期)、规定的条件下,完成预定功能的能力。 可靠性组成:安全性、适用性、耐久性。 可靠度:对结构的可靠性进行概率描述称为结构可靠度。 3.结构的极限状态:当整个结构或构件的一部分超过某一特定状态而不能满足设计规定的某一功能要求时,则此特定状态称为该功能的极限状态。 极限状态分为承载能力极限状态、正常使用极限状态和破坏—安全状态。 承载能力极限状态对应于结构或构件达到最大承载力或不适于继续承载的变形,具体表现:a.整个构件或结构的一部分作为刚体失去平衡;b.结构构件或连接处因超过材料强度而破坏;c.结构转变成机动体系;d.结构或构件丧失稳定;e.变形过大,不能继续承载和使用。 正常使用极限状态对应于结构或构件达到正常使用或耐久性能的某项规定限值,具体表现:a.由于外观变形影响正常使用;b.由于耐久性能的局部损坏影响正常使用;c.由于震动影响正常使用;d.由于其他特定状态影响正常使用。 破坏—安全状态是指偶然事件造成局部损坏后,其余部分不至于发生连续倒塌的状态。(破坏—安全极限状态归到承载能力极限状态中) 4.作用:使结构产生内力、变形、应力、应变的所有原因。 作用分为:永久作用、可变作用和偶然作用。 永久作用:在结构使用期内,其量值不随时间变化,或其变化与平均值相比可忽略不计的作用 可变作用:在结构试用期内,其量值随时间变化,且其变化值与平均值相比较不可忽略的作用。

相关文档
最新文档