第一篇:数据结构学习总结
数据结构学习总结
通过一学期对《数据结构与算法》的学习,大概的了解了基本的数据结构和相应的一些算法。下面总结一下自己一个学期学习的收获和心得。
数据结构是什么:
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
数据结构重要性:
一般认为,一个数据结构是由数据元素依据某种逻辑联系组织起来的。对数据元素间逻辑关系的描述称为数据的逻辑结构;数据必须在计算机内存储,数据的存储结构是数据结构的实现形式,是其在计算机内的表示;此外讨论一个数据结构必须同时讨论在该类数据上执行的运算才有意义。一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率。在许多类型的程序的设计中,数据结构的选择是一个基本的设计考虑因素。许多大型系统的构造经验表明,系统实现的困难程度和系统构造的质量都严重的依赖于是否选择了最优的数据结构。许多时候,确定了数据结构后,算法就容易得到了。有些时候事情也会反过来,我们根据特定算法来选择数据结构与之适应。不论哪种情况,选择合适的数据结构都是非常重要的。选择了数据结构,算法也随之确定,是数据而不是算法是系统构造的关键因素。这种洞见导致了许多种软件设计方法和程序设计语言的出现,面向对象的程序设计语言就是其中之一。
常见的数据结构:
1.顺序表:
定义:顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。线性表采用顺序存储的方式存储就称之为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。基本运算:
置表空:Sqlsetnull(L)判表满:Sqlempty(L)
求表长:Sqllength(L)
插入:Sqlinsert(L,i,x)
按序号取元素:Sqlget(L,i)
删除:Sqldelete(L,i)按值查找:Sqllocate(L,x)2.链表
定义:链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。相比于线性表顺序结构,链表比较方便插入和删除操作。分类:单链表—用一组地址任意的存储单元存放线性表中的数据元素。
循环链表—循环链表是另一种形式的链式存贮结构。它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。基本运算:建立链表,插入节点,删除节点。
3.堆栈
定义:堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。要点:堆:顺序随意栈:后进先出(Last-In/First-Out)。基本算法:
置空栈:InitStack(S)
判栈空:StackEmpty(S)
判栈满:StackFull(S)
取栈顶元素:GetTop(S)
入栈:Push(S)
出栈:Pop(S)4.队列
定义:队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。在队列这种数据结构中,最先插入的元素将是最先被删除的元素;反之最后插入的元素将最后被删除的元素,因此队列又称为“先进先出”(FIFO—first in first out)的线性表。
分类:顺序队列;链队;
基本运算:初始化队列 Qini(Q)
入队 QADD(Q,X)
出队 QDel(Q,X)
判断队列是否为qempty(Q)
判断队列是否为满qfull(Q)5.特殊矩阵
分类:对阵矩阵;三角矩阵;稀疏矩阵; 6.二叉树
定义:二叉树是每个节点最多有两个子树的有序树。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有2的 i-1次方个结点;深度为k的二叉树至多有2^(k)-1个结点;对任何一棵二叉树T,如果其终端结点数(即叶子结点数)为n0,度为2的结点数为n2,则n0 = n2 + 1。(1)完全二叉树——若设二叉树的高度为h,除第 h 层外,其它各层(1~h-1)的结点数都达到最大个数,第 h 层有叶子节点,并且叶子节点都是从左到右依次排布,这就是完全二叉树。
(2)满二叉树——除了叶结点外每一个结点都有左右子叶且叶结点都处在最底层的二叉树,。
(3)深度——二叉树的层数,就是高度。性质:
(1)在二叉树中,第i层的结点总数不超过2^(i-1);
(2)深度为h的二叉树最多有2^h-1个结点(h>=1),最少有h个结点;(3)对于任意一棵二叉树,如果其叶结点数为N0,而度数为2的结点总数为N2,则N0=N2+1;
(4)具有n个结点的完全二叉树的深度为int(log2n)+1
(5)有N个结点的完全二叉树各结点如果用顺序方式存储,则结点之间有如下关系: 若I为结点编号则 如果I<>1,则其父结点的编号为I/2;如果2*I<=N,则其左儿子(即左子树的根结点)的编号为2*I;若2*I>N,则无左儿子;如果2*I+1<=N,则其右儿子的结点编号为2*I+1;若2*I+1>N,则无右儿子。
(6)给定N个节点,能构成h(N)种不同的二叉树。h(N)为卡特兰数的第N项。h(n)=C(n,2*n)/(n+1)。
(7)设有i个枝点,I为所有枝点的道路长度总和,J为叶的道路长度总和J=I+2i。
二叉树遍历:
遍历是对树的一种最基本的运算,所谓遍历二叉树,就是按一定的规则和顺序走遍二叉树的所有结点,使每一个结点都被访问一次,而且只被访问一次。由于二叉树是非线性结构,因此,树的遍历实质上是将二叉树的各个结点转换成为一个线性序列来表示。
设L、D、R分别表示遍历左子树、访问根结点和遍历右子树,则对一棵二叉树的遍历有三种情况:DLR(称为先根次序遍历),LDR(称为中根次序遍历),LRD(称为后根次序遍历)。
(1)前序遍历
访问根;按前序遍历左子树;按前序遍历右子树(2)中序遍历
按中序遍历左子树;访问根;按中序遍历右子树(3)后序遍历
按后序遍历左子树;按后序遍历右子树;访问根
(4)层次遍历 即按照层次访问,通常用队列来做。访问根,访问子女,再访问子女的子女(越往后的层次越低)(两个子女的级别相同)。7.散列
定义:若结构中存在和关键字K相等的记录,则必定在f(K)的存储位置上。由此,不需比较便可直接取得所查记录。称这个对应关系f为散列函数(Hash function),按这个思想建立的表为散列表。
散列函数:直接定址法;除留余数法;数字分析法;平方取中法;折叠法。冲突处理方法:开放地址法(线性探测再散列,二次探测再散列,伪随机探测再散列)链地址法。8.图
定义:一种较线性表和树更为复杂的数据结构。
存储结构:邻接矩阵;邻接表;逆邻接表;十字链表;邻接多重表。图的遍历:
深度优先遍历:深度优先遍历的思想类似于树的先序遍历。其遍历过程可以描述为:从图中某个顶点v出发,访问该顶点,然后依次从v的未被访问的邻接点出发继续深度优先遍历图中的其余顶点,直至图中所有与v有路径相通的顶点都被访问完为止。
广度优先遍历:对图的广度优先遍历方法描述为:从图中某个顶点v出发,在访问该顶点v之后,依次访问v的所有未被访问过的邻接点,然后再访问每个邻接点的邻接点,且访问顺序应保持先被访问的顶点其邻接点也优先被访问,直到图中的所有顶点都被访问为止。下面是对一个无向图进行广度优先遍历的过程。
查找算法
1.顺序查找:在一个已知无(或有序)序队列中找出与给定关键字相同的数的具体位置。原理是让关键字与队列中的数从第一个开始逐个比较,直到找出与给定关键字相同的数为止。
2.折半查找:首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
3.分块查找:先选取各块中的最大关键字构成一个索引表;查找分两个部分:先对索引表进行二分查找或顺序查找,以确定待查记录在哪一块中;
然后,在已确定的块中用顺序法进行查找。4.二叉排序树:
定义:二叉排序树(Binary Sort Tree)又称二叉查找树。它或者是一棵空树;或者是具有下列性质的二叉树:(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;(3)左、右子树也分别为二叉排序树;
查找:若根结点的关键字值等于查找的关键字,成功。否则,若小于根结点的关键字值,递归查左子树。若大于根结点的关键字值,递归查右子树。若子树为空,查找不成功。
排序算法:
1.直接插入排序:插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外,而第二部分就只包含这一个元素。在第一部分排序后,再把这个最后元素插入到此刻已是有序的第一部分里的位置。
2.希尔排序:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2 3.冒泡排序:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。 4.快速排序:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 5.直接选择排序:第一次从R[0]~R[n-1]中选取最小值,与R[0]交换,第二次从R{1}~R[n-1]中选取最小值,与R[1]交换,....第i次从R[i-1]~R[n-1]中选取最小值,与R[i-1]交换.....第n-1次从R[n-2]~R[n-1]中选取最小值,与R[n-2]交换,总共通过n-1次,得到一个按排序码从小到大排列的有序序列。 6.归并排序:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列;设定两个指针,最初位置分别为两个已经排序序列的起始位置;比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置;重复直到某一指针达到序列尾;另一序列剩下的所有元素直接复制到合并序列尾。 心得:无论我们学习什么课程,概念永远是基础,所有的知识都是建立在基础概念之上的。我们要将概念熟记于心,然后构建知识框架。数据结构包括线性结构、树形结构、图状结构或网状结构。线性结构包括线性表、栈、队列、串、数组、广义表等,栈和队列是操作受限的线性表,串的数据对象约束为字符集,数组和广义表是对线性表的扩展:表中的数据元素本身也是一个数据结构。除了线性表以外,栈是重点,因为栈和递归紧密相连,递归是程序设计中很重要的一种工具。树状结构中的重点自然是二叉树和哈弗曼树了。对于二叉树的很多操作都是基于对二叉树的遍历,掌握了如何遍历,很多问题也就迎刃而解了,比如对二叉树结点的查找访问、统计二叉树中叶子结点的数目、求二叉树的深度等。哈弗曼编码也有着很广泛的应用。对于图状结构,主要学习图的存储结构及图的遍历。对算法的学习是学习数据结构的关键。要注重对算法的掌握。对于一个算法,如果我们不是很理解的话,可以手动将算法走一遍,慢慢理解该算法的思想。学习这门课程的最终目的,还是要学会如何设计算法,这需要我们长期的练习和思考。 数据结构与算法课程论文综述 摘要 如何合理的组织数据、高效率的处理数据是扩大计算机应用领域、提高软件效率的关键。在软件开发过程中要求“高效地”组织数据和设计出“好的”算法,并使算法用程序来实现,通过调试而成为软件,必须具备数据结构领域和算法设计领域的专门知识。 《数据结构与算法》课程就是主要学习在软件开发中涉及的各种常用数据结构及其常用算法,在此基础上,学习如何利用数据结构和算法解决一些基本的应用问题。 课程主要内容 本学期一共学习了十章的内容,下面就这十章的内容作了详细的介绍。第一章:数据结构与算法概述 本章主要是对数据、数据类型、数据结构、算法及算法分析等基本概念的掌握,而如何合理地组织数据、高效地处理数据正是扩大计算机领域、提高软件效率的关键,所以对这些概念的理解就显得十分重要。 数据是指描述客观事物的数值、字符、相关符号等所有能够输入到计算机中并能被计算机程序处理的符号的总称,其基本单位是数据元素,而数据类型是一个同类值的集合和定义在这个值集上的一组操作的总称。在高级程序语言中定义一种数据类型时,编译程序编译系统就能获得如下信息:(1)、一组性质相同的值的集合;(2)、一个预订的存储体系;(3)、定义在这个值集合上的一组操作。数据结构是指数据元素之间的关系,它包括数据的逻辑结构、存储结构、一组运算集合;数据的逻辑结构分为线性结构和非线性结构。数据的存储方法有:顺序存储方法、链接存储方法、索引存储方法和散列存储方法。接下来便是关于算法的有关概念,算法是为解决一个特定问题而采取的确定的有限步骤集合,它具有有穷性、确定性、可行性、输入和输出。关于算法的性能分析,分为时间性能分析和空间性能分析。第二章:顺序表及其应用 本章主要是对顺序表、顺序表的结构、数据类型、基本算法及相关应用的介绍。顺序表是一种简单而常用的数据结构,其应用范围较为广泛,包括查找问题、排序问题、字符处理问题等内容。第三章:链表及其应用 链表是一种简单、常用的数据结构,与顺序表相比,具有插入、删除结点不需要移动元素,不必事先估计存储空间大小等优点,操作较为灵活。它有六种基本运算:(1)、置空表(2)、求表长(3)、按序号取元素(4)、按值查找 (5)、插入(6)、删除。 单链表即链表的每个结点只有一个指针域,用来存储其直接后继的存储位置。但是这样就使得对结点前面的元素的操作很困难,所以就在每个结点增加一个指向其前驱结点的指针域,从而构成双向链表。同时由于每个结点的地址既存放在其前驱结点的后继指针中,又存放在其后继结点的前驱指针域中,所以双向链表的插入操作分为前插和后插。第四章:堆栈及其应用 首先要明白栈是一种受限制的线性结构,遵守“先进后出”的规则,其插入与删除操作都在栈顶进行。 其次根据顺序存储和链接存储,栈分为顺序栈和链栈。其中顺序栈栈是用地址连续的存储空间依次存储栈中数据元素,并记录当前栈顶数据元素的位置;基本算法包括置空栈、判栈空、判栈满、取栈顶元素、入栈和出栈。而链栈则使用链式存储堆栈的数据元素,并记录当前栈顶数据元素的位置;每个结点包括data数据域:用来存放数据元素的值,next指针域:用来存放其直接后继结点的存储地址,其基本运算和顺序栈相同。 最后是关于堆栈的应用:(1)、数值转换问题;由于在将十进制数N转换为d进制数时,最先得到的余数是d进制数的最低位,在显示结果时需要最后输出;而最后求得的余数是d进制数的最高位,需要最先输出。这与栈的“先入后出”性质相吻合,所以可用栈来存放逐次求得的余数,然后输出。(2)、括号匹配问题;当读取一个表达式时,一旦读到括号就进栈,而读到下一个括号时就与栈中括号比较,若相匹配,则出栈,否则继续读取表达式。到最后,如果栈为空栈,则说明括号匹配,否则括号不匹配。第五章:队列及其应用 首先和栈一样,要知道队列是一种受限制的线性结构,遵守“先进先出”的规则,其插入在队尾、删除在对头。 其次根据顺序存储和链式存储,队列也分为顺序队列和链队列。其中顺序队列是用地址连续的向量空间依次存储队列中的元素,同时记录当前对头元及队尾元素在向量中的位置。然后是链队列,即在存储器中占用任意的、连续或不连续的物理存储区域,使用动态结点空间分配;在这其中,值得注意的是链队列不存在队满的情况。 第六章:特殊矩阵、广义表及其应用 首先是关于矩阵的概念即存储方法; 1、二维数组中元素aij的地址为:(1)、以行序为主存储,Loc(aij)=Loc(a00)+[j*(m+1)+i]*d(2)、以列序为主存储,Loc(aij)=Loc(a00)+[i*(n+1)+j]*d,其中m为行数、n为列数、d为每个元素所占的存储单元的个数。 2、对称矩阵:即将下三角存储在一个一维数组sa[k]中,其中0≤k<(n+1)/2;当i≥j时,k=i*(i+1)/2+j,当i 3、三角矩阵:和对称矩阵的存储思路一样用一维数组sa[k]存储,若是上三角矩阵(下三角中元素均为常数c),则当i≥j时,k=i*(i+1)/2+j,当i 4、对角矩阵:同样存储在一维数组sa[k]中,k=2i+j 5、稀疏矩阵:即矩阵中非零元素个数远远小于矩阵元素个数,可用三元组表存储,将非零元素的值与其行号、列号存放在一起。 其次是关于广义表的概念;广义表是n(n≥0)个元素a1、a2、a3、„、an的有限序列,而ai或是原子或是一个广义表,所以广义表是递归定义。第七章:二叉树及其应用 首先关于二叉树的概念及其性质;二叉树是由n(n≥0)个结点组成的有限集合。在这其中有两种特殊的二叉树,满二叉树和完全二叉树。同时二叉树具有如下五个性质:(1)、在二叉树的第i层上至多有2(i-1)个结点(i>0)(2)、深度为k的二叉树至多有2(k)-1个结点(k>0)(3)、对任意一棵非空二叉树,若果其叶子结点数为n0,度为2的结点数为n2,则n0=n2+1(4)、有n个结点的完全二叉树(n>0)的高度为∟log2n」+1(5)、若对满二叉树或完全二叉树按照“从上到下,每层从左到右,根结点编号为1”的方式编号,则编号为i的结点,它的两个孩子结点编号分别为2i和2i+1,它的父节点编号为i/2。 其次是二叉树的存储结构分为顺序存储和链接存储。顺序存储是按在完全二叉树中的编号顺序,依次存储在一维数组中。这样的存储方式可以很方便地找到任一结点的父结点及左右孩子,但对于一般的二叉树会造成很大的空间浪费,且在插入或删除结点时需大量移动节点,不利于运算的实现。那么就引出了二叉树的链接存储,每个结点包括三个域,lchild指针域:记录该结点左孩子的地址、rchild指针域:记录该结点右孩子的地址、data域:存储该结点的信息。 接下来是二叉树的遍历及线索化,不仅要能对二叉树进行遍历、线索化操作,而且还要能够根据给出的遍历结果构造出二叉树。最后是二叉树的应用,例如哈夫曼树:为数据压缩提供了一种方法、二叉排序树:即中序遍历的结果是递增的有序序列。 第八章:树和森林及其应用 首先是关于树和森林的有关概念及存储结构;树或森林与二叉树之间有一个自然地一一对应关系,任何一个森林或一棵树可以唯一地对应到一棵二叉树;反之,任何一棵二叉树也能唯一地对应到一个森林或一棵树。在这里,要会如何将树或森林转换成二叉树、二叉树转换成树或森林。对于树的顺序存储结构:双亲表示法,链接存储结构:(1)、孩子表示法(2)、孩子兄弟表示法,只需了解。 其次是树和森林的遍历,要知道树只有先序遍历和后序遍历、森林只有先序遍历和中序遍历,且(1)、树的先序遍历与二叉树的先序遍历相同(2)、树的后序遍历与二叉树的中序遍历相同(3)、森林的先序遍历和中序遍历分别与二叉树的先序遍历和中序遍历结果相同。 最后是树的一个典型应用——B树,它是一种平衡的多路查找树,学习是根据实例走一遍算法,理解算法即可。第九章:散列结构及其应用 散列结构是以存储结点中的关键字作为自变量,通过确定的函数H(即散列函数或哈希函数)进行计算,把所求的函数值作为地址存储该结点。 首先是散列函数有:(1)、直接定址法(2)、除留余数法(3)、数字分析法(4)、平方取中法(5)、折叠法 其次是冲突处理,由于散列函数很可能将不同的关键字计算出相同的散列地址,所以就需要为发生冲突的关键字结点找到一个“空”的散列地址。冲突处理的方法有 1、开放定址法:Hi=(H(key)+di)mod m,i=1,2,3,„,K(K≤m-1)例如(1)、线性探测再散列,取di=1,2,3,„,m-1(2)、二次探测再散列,取di=1(2),-1(2),2(2),-2(2),„(3)、伪随机探测再散列,取di=伪随机数; 2、链地址法:在散列表的每一个存储单元中增加一个指针域,把产生冲突的关键字以链表结构存放在指针指向的单元中。第十章:图及其应用 首先是图的有关概念;图是一种数据结构,可以用二元组表示,形式化定义为:Graph(V,VR),其中V={x|x∈dataobject},R={VR},VR={<x,y> P(x,y)∧(x,y∈V)}。顶点的度、入度和出度,以顶点V为头的弧的数目称为V的入度,以顶点V为尾的弧的数目称为V的出度,而出度与入度之和即为顶点V的度。 其次是图的存储结构;(1)、邻接矩阵(2)、邻接表 最后的图遍历和图的典型应用;对于遍历图的深度优先算法或广度优先算法、最小生成树的普利姆算法或克鲁斯卡尔算法、最短路径的迪杰特斯拉算法和弗洛伊德算法以及有向无环图拓扑排序算法,都需要根据实例走一遍算法,从而掌握这些算法。 心得体会 最开始学习这门课时,我对它没有很深刻的认识,只是听说这门课比较难。学习起来会比较累。通过这一学期的学习也确实证实了这一点。在学习这门课的过程中自己也确实遇到了一些问题,主要是书本上的知识与老师的讲解都比较容易理解,但是当自己利用已学的知识编写程序时就感到非常的棘手,很多时候都是把大概的算法思想想出来后,又把书本上的程序抄写一遍来完成程序的编写。针对这一问题以后自己会尽量学习摆脱掉书本,自己慢慢学会独立编写程序。 结语 通过对数据结构与算法的整理和实际应用,我深刻了解到数据结构与算法的重要性,同时也加深了对它的认识和了解,了解到了数据结构与算法在生活、工作等生活各个方面的重要性和不可缺少性。我通过整理数据结构与算法的学习而获得的极大收获。我相信这次的学习会对我以后的学习和工作产生非常大的影响力。 参考文献 《数据结构与算法》(第二版)王昆仑 李红 主编 《数据结构与算法》课程学习总结报告 本学期开设的《数据结构与算法》课程已经告一段落,现就其知识点及其掌握情况、学习体会以及对该门课程的教学建议等方面进行学习总结。 一、《数据结构与算法》知识点 第一章是这门学科的基础章节,从整体方面介绍了“数据结构和算法”,同时引入相关的学术概念和术语,如数据、数据元素、数据类型以及数据结构的定义。重点是数据结构的括逻辑结构、存储结构和运算集合的含义及其相互联系。数据结构和两大逻辑结构的4四种常用存储方法;逻辑结构分为四类:集合型、线性、树形和图形结构,数据元素的存储结构分为:顺序存储、链接存储、索引存储和散列存储四类。难点是算法复杂度的分析方法和性能的分析。 第二章详细地分析了顺序表。介绍了顺序表的相关概念及其有关运算。基本运算有:初始化表、求表长、排序、元素的查找、插入及删除等。元素查找方法有:简单顺序查找、二分查找和分块查找。排序方法有:直接插入排序、希尔排序、冒泡排序、快速排序、直接选择排序及归并排序等,在各种算法思想的先分析后,要弄清各种算法的时间复杂度与空间性能的优点和缺点,在什么特定的场合适合哪种算法思想。最后介绍了顺序串的概念,顺序串是顺序表的一个特例;区别在于组成顺序串的数据元素是一组字符,其重点在于串的模式匹配。 第三章介绍链表。链表中数据元素的存储不一定是连续的,还可以占用任意的、不连续的物理存储区域。与顺序表相比,链表的插入、删除不需要移动元素,给算法的效率带来较大的提高,且在存储空间上有动态申请的优点。这一章中介绍了链表的节点结构、静态与动态链表的概念、链表的基本运算(如求表长、插入、查找、删除等)、单链表的建立(头插法和尾插法)以及双向循环链表的定义、结构、功能和基本算法。弄清其个运算的算法思想及其时间复杂度和空间性能。最后介绍了链表之中存储结构在实际中的相关应用。 第四章,堆栈是运算受限制的线性结构。其基本运算方法与顺序表和链表运算方法基本相同,不同的是堆栈须遵循“先进后出”的规则,对堆栈的操作只能在栈顶进行;堆栈在文字处理,匹配问题和算术表达式的求值问题方面的应用。 第五章,队列是一种够类似堆栈的线性结构。其基本运算方法与顺序表和链表运算方法基本相同,不同的是堆栈须遵循“先进先出”的规则,对堆栈的操作只能在栈顶进行;其运算有入队、出队等操作。在介绍队列时,提出了循环队列的概念,以避免“假溢出”的现象。 第六章介绍了特殊矩阵和广义表的概念与应用。其中,特殊矩阵包括对称矩阵、三角矩阵、对角矩阵和稀疏矩阵,书中分别详细介绍了它们的存储结构。其中三元组和十字链表这两种结构尤为重要;对着两种结构的建立了应用要掌握。稀疏矩阵的应用包括转置和加法运算等。最后介绍了广义表的相关概念及存储结构,关于它的应用,课本中举了m元多项式的表示问题。 第七章二叉树的知识是重点内容。在介绍有关概念时,提到了二叉树的性质以及两种特殊的二叉树:完全二叉树和满二叉树。接着介绍二叉树的顺序存储和链接存储以及生成算法。重点介绍二叉树的遍历算法(递归算法、先序、中序和后序遍历非递归算法)和线索二叉树。二叉树的应用:基本算法、哈弗曼树、二叉排序树和堆排序,其中关于二叉排序树和哈弗曼书的构建是重点。 第八章介绍了树。树与二叉树是不同的概念。教材介绍了树和森林的概念、遍历和存储结构,还有树、森林和二叉树的相互关系,树或森林怎样转化成二叉树,二叉树又如何转换为树和森林等算法。 第九章,散列结构是一种查找效率很高的一种数据结构。本章的主要知识点有:散列结 构的概念及其存储结构、散列函数、两种冲突处理方法、线性探测散列和链地址散列的基本算法以及散列结构的查找性能分析。 最后一章介绍了图的概念及其应用,是本书的难点。图的存储结构的知识点有:邻接矩阵、邻接表、逆邻接表、十字链表和邻接多重表。图的遍历包括图的深度优先搜索遍历和广度优先搜索遍历。其余知识点有:有向图、连通图、生成树和森林、最短路径问题和有向无环图及其应用。有向无环图重点理解AOV网和拓扑排序及其算法。 二、对各知识点的掌握情况 总体来看,对教材中的知识点理解较为完善,但各个章节均出现有个别知识点较为陌生的现象,对某些具体的问题和应用仍有一些模糊与措手。各个章节出现的知识点理解和掌握情况明确一下。 第一章中我对数据和数据结构的概念理解较为透彻,熟悉数据结构的逻辑结构和存储结构。算法的时间、空间性能分析是重点,同样也是难点,尤其是空间性能分析需要加强。在某些强大与复杂的算法面前的处理有些棘手。 第二章,顺序表的概念、生成算法理解较为清晰,并且熟悉简单顺序查找和二分查找,对分块查找较为含糊。删除方面的问题比较容易些。排序问题中,由于冒泡排序在大一C语言课上已经学习过,再来学习感觉相对轻松些。对插入排序和选择排序理解良好,但是,在实际运用中仍然出现明显不熟练的现象。由于在归并排序学习中感觉较吃力,现在对这种排序方法仍然非常模糊,所以需要花较多的时间来补习。此外串的模式匹配也是较难理解的一个地方。 第三章链表中,除对双向循环链表这一知识点理解困难之外,在对链表进行插入删除和排序相关操作上同顺序表的操作基本相当。其他的知识点像单链表的建立和基本算法等都较为熟悉。 第四章和第五章有关堆栈以及队列的知识点比较少,除有关算法较为特殊以外,其余算法都是先前学过的顺序表和链表的知识,加上思想上较为重视,因此这部分内容是我对全书掌握最好的一部分。在一些实际问题的应用与处理方面,对其进行存储结构的选择还是需要认真考虑的。在算法的时间复杂度和空间性能的分析仍有些困难。 第六章的学习感觉较为困难的部分在于矩阵的应用上。在矩阵的存储结构中,使用三元组表发相对较为简单,而使用十字链表就有些困难了。但在某些问题的处理上又必须或从节省空间考虑采用十字链表来处理,想矩阵的加法运算。广义表的定义还是比较容易理解的,其存储结构也不难掌握,关于应用也只局限于在多项式的表示上。 第七章是全书的重点。在这一章中概念和定义都很多,有些很昏人但都很重要,要区分开来。二叉树的性质容易懂却很难记忆。对二叉树的存储结构和遍历算法这部分内容掌握较好,能够熟练运用。关于二叉排序树和的哈弗曼树却相对有些压力,其生成和对其关键字的插入和删除时重点。 第八章关于树的分析,首先要明确树和二叉树的区别,以及书中的相关定义和概念。关于二叉树、树和森林之间的转换和遍历方法是重点,但不算是难。接着就是数的存储结构的选择及转化为二叉树的算法,这部分有些吃力。再就介绍了特殊的树-B树,关于对B树的操作,插入关键字是中带领和难点。 第九章散列结构这一章理解比较完善的知识点有:基本概念和存储结构。散列函数中直接定址法和除留余数法学得比较扎实,对数字分析法等方法则感觉较为陌生。对两种冲突处理的算法思想的理解良好,问题在于用C语言描述上。 最后一章,图及其应用中,相关定义及其概念很多,容易混淆,这就要慢慢来,仔细分辨。图的邻接矩阵、邻接表表示法及其之间的转换时重点和难点。而对十字链表和邻接多重表的表示法则较为陌生。感觉理解较为吃力的内容有图的遍历(包括深度和广度优先遍历),以及最小生成树的问题。最短路径、AOV网、关键路径、AOE网和拓扑排序的学习也是相对较轻松的。,三、学习体会 在学习开始,王教授就明确提出它不是一种计算机语言,不会介绍新的关键词,而是通过学习可以设计出良好的算法,高效地组织数据。一个程序无论采用何种语言,其基本算法思想不会改变。联系到在大一和大二上学期学习的C和C++语言,我深刻认识到了这一点。“软件开发好比写作文,计算机语言提供了许多华丽的辞藻,而数据结构则考虑如何将这些辞藻组织成一篇优秀的文章来。”在学习这门课中,要熟悉对算法思想的一些描述手段,包括文字描述、图形描述和计算机语言描述等。因此,计算机语言基础是必须的,因为它提供了一种重要的算法思想描述手段——机器可识别的描述。 这门课结束之后,我总结了学习中遇到的一些问题,最为突出的,书本上的知识与老师的讲解都比较容易理解,但是当自己采用刚学的知识点编写程序时却感到十分棘手,有时表现在想不到适合题意的算法,有时表现在算法想出来后,只能将书本上原有的程序段誊写到自己的程序中再加以必要的连接以完成程序的编写。针对这一情况,我会严格要求自己,熟练掌握算法思想,尽量独立完成程序的编写与修改工作,只有这样,才能够提高运用知识,解决问题的能力。 四、对《数据结构与算法》课程教学的建议 1、建议在上课过程中加大随堂练习的分量,以便学生能当堂消化课堂上学习的知识,也便于及时了解学生对知识点的掌握情况,同时有助于学生保持良好的精神状态。 2、建议在课时允许的情况下,增加习题课的分量,通过课堂的习题讲解,加深对知识点的掌握,同时对各知识点的运用有一个更为直观和具体的认识。 以上便是我对《数据结构与算法》这门课的学习总结,我会抓紧时间将没有吃透的知识点补齐。今后我仍然会继续学习,克服学习中遇到的难关,在打牢基础的前提下向更深入的层面迈进! 数据结构学习(C++)——树(总结) happycock(原作)CSDN 才刚开了个头,就要说再见了——在树这里,除了二叉树,别的都还没有讲。为什么可以总结了呢?因为前面已经涉及到了树的两个基本用途,而如果再讲B+、B-,就不能不提到搜索,如果是胜者树就不能不提到排序。为此,把这部分放到后面。我前面所做的努力,只是让你有个基本概念,什么时候记得用树。树的两个基本用途,可以用物质和精神来比喻。 一个用途是做为数据储存,储存具有树结构的数据——目录、族谱等等。为了在实际上是线性的储存载体上(内存、磁盘)储存非线性的树结构,必须有标志指示出树的结构。因此,只要能区分根和子树,树可以采取各种方法来储存——多叉链表、左子女-右兄弟二叉链表、广义表、多维数组。由于操作的需求,储存方法并不是随意选取的。比如,在并查集的实现上,选取的是双亲链表。 一个用途是做为逻辑判断,此时会常常听到一个名词——判定树。最常用的结构是二叉树,一个孩子代表true,一个孩子代表false。关于多叉判定树,有个例子是求8皇后的全部解——这个连高斯都算错了(一共是92组解,高斯最开始说76组解),我们比不上高斯,但是我们会让computer代劳。 就像哲学界到现在还纠缠于物质和精神本源问题,实际上在树这里也是如此。有些情况下,并不能区分是做为储存来用还是做为判断来用,比如搜索树,既储存了数据,还蕴涵着判断。 和后面的图相比,树更基本,也更常用。你可以不知道最短路径怎么求,却每时每刻都在和树打交道——看看你电脑里的文件夹吧。 最后,附带一个求N皇后的全部解的程序。 #include #define N 8 int layout[N];//布局 int key = 0; int judge(int row, int col)//判断能否在(row,col)放下 { int i;for(i = 0;i < row;i++){if(layout[i] == col)return 0;//同一列if(icol)return 0;//同一条主对角线} if(i + layout[i] == row + col)return 0;//同一条副对角线 return 1; } void lay(int row)//在row行上放Queen { int i;if(row == N)//放完N个Queen输出布局 { }printf(“n%02d ”, ++key);for(i = 0;i < N;i++)printf(“%c%d ”, layout[i] + 'a', i + 1);} else {for(i = 0;i < N;i++)//在i列上放Queen} {} layout[row] = i;if(judge(row, i))lay(row + 1); int main() { } lay(0);return 0; “数据结构”课程总结 计算机科学与技术专业从1994年开始为我校专科生开设“数据结构”课程,2004年开始为本科生开设这门课程。由于本门课程的教学从教材、讲授、实验指导都体现了先进的教育理念,该课程的教学体系科学、完整,教学手段与方法先进,课程特色鲜明,2006年被评为赤峰学院本科层次精品课。几年来,数据结构课题组成员从以下几个方面对本门课程进行了建设和改革。 一、课程建设指导思想、定位和特色 1.学科地位 “数据结构”是计算机科学与技术专业的一门学科基础课,是本专业和相关专业必修课。本课程的教学目标是培养学生通过理解、分析和研究计算机处理的数据对象的特性,从而选择适当的数据结构、存储结构和相应的算法,并熟练掌握算法的时间分析和空间分析技巧。“数据结构”还是计算机科学与技术专业部分专业课的先导课,如“数据库原理与应用”、“计算机操作系统”、“计算机编译原理”和“面向对象的程序设计”等。所以本课程的教学效果将直接影响到学生对其它后续专业课的学习,因此,该课程在专业建设的地位十分重要。 “数据结构”是一门应用性很强的课程,本课程要求学生在掌握各种数据结构,特别是存储结构和有关算法的基础上,通过大量的上机实例把难以理解的、抽象的概念转化为计算机能够正确运行的程序,从而提高学生运用所学知识解决实际问题的能力。2.课程特色 根据课程建设的规划和我系实际,我们针对《数据结构》课程教学开展讨论,并就实验、图书资料等方面进行建设。在不断的教学实践中,我们按照精品课建设要求,积极探索,积累了丰富的教学经验。 采用国内经典教材,结合前沿的研究领域和最新科研动态,丰富教学内容,让学生了解数据结构的实际应用价值。 采用课堂教学与大作业相结合,上机实践为补充的教学模式,培养学生的创业创新素质和团队协作精神。 二、教师队伍建设 1.良好的学缘结构 任课教师的业务水平和教学水平是影响课程建设质量的重要因素。为此,我们不断加强师资队伍建设,特别注重青年教师和实验指导教师的培养。在担任该课程教学任务的5名教师中,教授1名、副教授2名、讲师2名,学历结构为硕士4人、学士1人,45岁以下3人,35岁以下2人。本教师梯队学历层次较高,职称、年龄结构合理,便于本门课程的建设和发展。 2.加强学术交流,不断提高团队整体教学和科研水平 在教学过程中,我们采取了互相听课,举行公开课、观摩课等方式,经常交流教书育人和教学改革方面的经验,不断提高任课教师的教学水平和学术水平。 以范体贵教授为学科带头人的教学研究梯队,具有丰富的教学经验和高昂的教学热情,同时具备较高的教学研究和科学研究水平。教学梯队成员在搞好教学的同时,积极申报承担各级各类教学研究和科学研究课题,并参加国内外相关学科的科研、教学等方面的学术交流活动。选派范体贵、门爱华两位老师参加全国计算机年会和全国数据库学术会议,与国内其他高校著名学者进行了教学、科研等方面的交流,学到许多宝贵的经验和方法。 注重与其他高校的合作和交流,学习其他院校好的教学经验和方法。选派主讲教师门爱华老师到清华大学计算机系做访问学者,访学期间门老师听取了本课程的讲授,经常与讲授本门课程的资深教授严蔚敏老师、殷仁昆老师进行交流、学习。二位老师都给予了具体的指导和建议,为我校本门课程的改革和发展提供了有利的帮助。请国内著名高校学者来我系讲学传授经验,在教学、科研等方面给予具体的指导。2008年10月清华大学著名数据库专家冯建华教授来我系讲学,课题组成员与冯教授进行了深入的交流,在教学和科研方面都有很大的收获。 3.开展科学研究,积极申请科研立项 数据结构课题小组成员积极进行相关领域的科学研究,几年来发表相关论文30余篇,承担自治区级科研项目四个,赤峰市科技局科研项目一个,院级项目一个,其中3个项目已经完成并通过验收。目前在研的一个科研项目是与清华大学合作申请的计算机前沿领域研究课题,相信通过该项目的研究和合作,对我系的科研工作会起到极大的促进作用,同时能够使我系科研水平上一个新的台阶。课题组成员经过几年的努力,在各方面都取得了一些成绩。范体贵、门爱华、张国祥、王玉红四位教师分别获得“赤峰学院课堂教学质量优秀奖”,范体贵、门爱华两位教师多次获得“赤峰学院科研成果优秀奖”的奖励。王玉红老师获得“毕业实习优秀指导教师“称号,门爱华老师2007年、2008年连续获得“毕业论文优秀指导教师”奖励。 建立了良好的人才培养制度,在学校和系里的大力支持下,鼓励现有教师提高学历与引进高学历教师相结合,经过几年的建设,已经形成了一支以中青年为主的学科梯队。积极鼓励中青年教师到国内名校进修或攻读硕士、博士学位,门爱华、董洁、王玉红分别考取了东北大学和辽宁工程技术大学的硕士研究生,已圆满完成学业并获得硕士学位。 三、教学内容、教材建设 1.理论环节教学内容及学时分配 “数据结构”是计算机科学课程体系中核心课程之首,作为学科的专业基础课,具有承上启下的重要作用。对应于学科中问题求解的理论、抽象和设计的方法论,本课程内容体系结构分为概念表述、构建数据模型、设计算法三个层面,突出数据组织方法与处理技术,贯穿程序设计和软件工程新思想和新观点。理论学时设置为72学时。 2.实践环节教学内容及学时分配 上机实践和课程设计重在培养学生软件设计的综合能力。在基本的课程实习基础上,自2001年起开设了数据结构课程设计,使课程的实践环节总学时数增加到60学时。提出了课程设计的规范要求,突出关键技术要点,贯穿基本技能训练主线,加强实践能力培养。 通过课程设计的训练,突出构造性思维训练的特征,提高了学生组织数据与进行编写大型程序能力,使学生更好地理解和掌握了算法设计所需的技术,为专业学习打下良好的基础。课程设计题目(动态更新、完善):航空客运订票系统;电梯模拟;简单行编辑程序;工资管理系统;医院排队看病活动的模拟;学籍管理系统;图书管理系统等。3.教材建设 教材建设是课程建设的重要环节。为此,根据教学大纲和本课程的发展需要,在本课程教材的选用上注重教材的先进性和科学性,我们选用了清华大学出版社严蔚敏教授等编写的《数据结构》(C语言版)作为教材,本书内容丰富、体系结构严谨、概念清晰、易学易懂,也是多所院校指定的考研参考教材,完全适合我系计算机科学与技术、信息与计算科学专业学生的需要。任课教师则多方面参考相关教材,选择部分编写精彩的内容充实到教案中。任课教师们广泛阅读相关文献,了解该领域前沿知识,并且在授课过程中介绍给学生,以开阔学生的视野,拓宽学生的知识面。同时,根据教材内容和实际教学要求,编写了《数据结构上机指导与习题就解答》,并正式出版了《数据结构实验教程》一书,该书作为自治区教育厅统编教材已在各高校广泛使用。 四、教学方法和教学手段 1.教学方法 在教学方法上,讲课、讨论和专题讲座等多种形式并用,以科学、生动灵活的讲授方式传授知识,培养学生的创造思维。教师在认真组织课堂讲授,注意各环节正常运行的同时,还针对不同的教学内容采取不同的方法进行讲解,做到课程内容既条理清晰、深入浅出,又重点突出、特色鲜明。教学内容灵活,既有必讲的内容,也有针对不同专业需要和特点选讲的内容。 通过布置适量的课后习题,使学生能够进一步巩固和提高对课上所学知识的领悟和应用能力。我们在选择习题时,一方面注重三基(基本理论,基本方法,基本技能)知识的掌握,另一方面也充分考虑知识的灵活应用,使学生能多角度、多方法地解决问题,既锻炼他们的系统性思维,又提高分析解决问题的能力。每两周安排一次习题课,由指导教师集中解决同学课上课下遇到的问题。 上机实践是学生对本门课程所学知识的一种全面、综合的能力训练,是与课堂听讲、自学和练习相辅相成必不可少的一个教学环节,也是对课堂教学效果的一种检验。通常,实习题中的问题比平时的习题复杂得多,也更接近实际。实习题注重原理与应用的结合,目的让学生学会如何把书上学到的知识运用于解决实际问题的过程中去,培养从事软件开发设计工作所必需的基本技能。同时,通过实践能使书上的知识变“活”,起到深化理解和灵活掌握教学内容的作用。平时的练习较偏重于如何编写功能单一的“小”算法,而实习题是软件设计的综合训练,包括问题分析,总体结构设计,用户界面设计,程序设计基本技能和技巧,可以多人合作,有利于一整套软件工程规范的训练和科学作风的培养。此外,实践环节中有很重要的一点,就是机器是比任何教师都严格的主考官。 2.教学手段 为了适应现代化教学的需求,我们在传统教学的基础上,充分利用现代科学技术,广泛应用多媒体教学课件和教学软件。将授课内容制作成了图文并茂的多媒体课件,利用多媒体技术对数据结构辅之以形象的动画,动态演示抽象的复杂数据结构的变化,用板书补充某些推导过程并完成和学生互动的内容,改变了以前课堂教学单调的弊病,激发了学生的学习兴趣。使用多媒体技术还可以直接在课堂上演示算法的实现过程,让学生熟悉算法实现的环境和方法,增强了该门课的实践性,提高了课堂授课效率和教学质量,取得了满意的教学效果。教师们为了更好地适应社会的发展和改革的需要,本着强化算法的思想,在现有数据结构内容的基础上,补充了新的算法,拓宽了学生的知识面。 五、课程建设取得的成果 1.教学科研论文 1)The Boundary Element Analysis for The Thermal Conduction of The Thermal Equipment。Proceedings of International Conference on Computational Physics, Rinton Press, US,(2005)199-202(SCI) 2)基于访问控制列表的路由器防火墙在网络安全中的应用研究。计算机与网络 24,(2004)52-53(核刊)3)信息系统在企业现代化管理中的应用。《商场现代化(学术版)》,2005.2 25-26(核刊)4)可信网络基本概念与基本属性研究。《赤峰学院学报 》2007.5 5)基于包过滤技术路由器防火墙在网络安全中的研究。《计算机应用研究》,2007,vol23 6)Research on The Architecture of Tru-Network。2008 International Symposium on Information science and Engineering 7)路由器防火墙对冲击波、震荡波病毒的过滤研究。《赤峰学院学报》 2005.1 67-68 8)菲涅耳圆孔衍射的数值模拟。《赤峰学院学报》 2006.1 9)复杂轴承流体动力学特性的边界元分析。《润滑与密封》 2006.3(核刊 EI核心刊源)10)三叶轴承流体动力学特性的边界元分析。《润滑与密封》 2006.5(核刊 EI核心刊源)11)164-182Hf核的低能谱和电磁跃迁的相互作用玻色子模型。《高能物理与核物理》 28(12),(2004)119-122(核刊, SCI收录)12)基于访问控制列表的路由器防火墙在网络安全中的应用研究。《计算机与网络》 2004.24 13)赤峰学院校园网路由器、交换机的选型及远程登录。《赤峰教育学院学报》2004.5 81-82 14)《XML数据库存储策略综述》 《计算机科学》 2005年9月(核刊)15)《XML数据库结构连接算法之研究》《计算机科学》 2007年6月(核刊)16)《XML中XPath包含关系判定算法》《内蒙古大学学报》2008年10月(核刊)17)《基于关系数据库的XML数据的存储研究》《赤峰学院学报》 2006年 3 月 18)《XML数据库模式匹配算法研究》 《赤峰学院学报》 2007年 5月 19)《Internet蠕虫的分析与研究》 《赤峰学院学报》 2005年 4月 20)《如何防止外部网络的攻击》 《赤峰学院学报》 2004年2月 21)《射频IC卡消费系统的设计与实现》 《赤峰学院学报》 2008年10月 22)《XPath片断的分析与研究》 《赤峰学院学报》 2008年1月 23)《一种基于层次结构的XML编码技术》 中国教育信息化》 2009年4月(核刊)24)《VC++实现图形、数据库应用系统的思路》赤峰教育学院学报 2002年第2月 25)《基于IP组播的多媒体会议系统的设计》 赤峰教育学院学报 2002年6月 26)论文《个性化WINDOWS系统“开始”菜单》赤峰教育学院学报 2003年4月 27)浅谈DEBUG程序的主要命令用法 赤峰学院学报 2007年5月 28)powerpoint技巧在课件制作中的妙用 赤峰学院学报 2006年1月 29)浅谈用MASM运行汇编程序 赤峰学院学报 2005年 1月 30)XML数字签名浅析 赤峰学院学报 2008年 5月 31)《网络层的静态路由选择综述》 赤峰学院学报 2005年3月 32)《离散数学在计算机教学中的作业》 赤峰学院学报 2008年1月 33)《基于模拟退火算法的油井工矿数据挖掘的应用研究》 赤峰学院学报2009年1月 2.教研课题 1)赤峰学院校园网项目 赤峰学院 2002年-2003年(已验收)2)基于IP网QOS动态控制研究 内蒙教育厅 2005年-2007年(已结题)3)基于结构索引XML模式匹配方法研究 内蒙教育厅 2005年—2007年(已结题)4)XML数据库研究 赤峰学院 2006年—2008年(已结题)5)CAI系统中知识个性化组织与导航研究 内蒙教育厅 2003年-2005年(已结题)6)XML安全数据发布关键问题研究 内蒙教育厅 2009年—2010年(在研)3.教学获奖 1)范体贵、门爱华、张国祥、王玉红分别获赤峰学院2005、2006年、2007年、2008年“课堂教学质量优秀奖”; 2)门爱华2007年、2008年连续获的“毕业论文优秀指导教师”奖励; 3)王玉红2007年获院级“毕业实习优秀实习指导教师”奖励; 4)2009年《数据结构课程教学和实践》课题”获赤峰学院“优秀教学成果二等奖”。 数据结构课程组 2009年5月14日第二篇:数据结构学习总结
第三篇:数据结构总结[推荐]
第四篇:数据结构学习(C)树(总结)
第五篇:“数据结构”课程总结