![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 78
idreamo
企业管理系统开发
展开
-
算法精解-C语言描述 递归和尾递归 (图解+实例)
递归是一种强大的方法,它允许一个对象以其自身更小的形式来定义自己。让我们来观察一下自然界中出现的递归现象:蕨类植物的叶子,每片叶子叶脉中的小分支都是整片叶子的较小缩影;又或者两个反光的物体,相互映射对方渐远的影像。这样的例子使我们明白,尽管大自然的力量是强大的,在许多方面它那种出乎意料的简洁更让我们觉得优美。同样的道理也可以用在递归算法上,从很多方面来说递归算法都是简洁而优美的,而且非常强大。原创 2017-10-19 06:07:23 · 5304 阅读 · 3 评论 -
「算法精解_C语言描述」链表_关于链表特点的几个问与答
一、链表与数组都有自己的优势,那什么情况下适合使用数组,什么情况下适合使用链表?当我们期望进行频繁的插入和删除操作时,链表比数组更有优势。然而,当我们期望进行随机访问的次数高于插入和删除操作的次数时,数组就显得更有优势了。随机访问是数组的强项,因为它们的元素在内存中是连续排列的。这种连续的排列,使用数组中的任何元素都能够在O(1)的时间内通过其索引访问。...原创 2017-11-15 08:27:10 · 246 阅读 · 0 评论 -
「算法精解_C语言描述」链表_循环链表实例 内存页帧置换(图解+实现)
在单链表的实例文章中介绍过如何使用单链表管理内存页帧的分配 使用单链表管理页帧 。但还有一个问题没有搞清楚,那就是当空闲页面的链表为空时,系统如何为其分配新的页帧呢?为了解决这个问题,操作系统从物理内存中取出页面将其放入称为交换磁盘的磁盘空间中,以这种方式来释放页帧。操作系统采用页面转换算法来决定哪一个页帧在当前最适合释放。页面转换算法中的一个例子是第二次机会转换法,有时也称为时钟算法。原创 2017-11-14 05:48:59 · 404 阅读 · 0 评论 -
算法精解_C语言 链表_单链表(应用:页帧管理)
使用链表的例子:页帧管理在一些支持虚拟内存的系统中有关于链表的一种应用。虚拟内存是一种地址空间的映射机制,它允许进程不必完全加载到物理内存(系统的实际内存)中也可以得到运行。这种方式的一个优点是进程可以使用比系统实际所允许的物理内存大得多的地址空间。另一个优点是多个进程能够共享系统的内存以并发的方式执行。运行在虚拟内存机制下的进程需要处理虚拟地址。这些地址对于进程来说就像是物理地址一样原创 2017-11-03 20:23:29 · 354 阅读 · 0 评论 -
「算法精解_C语言描述」栈_栈的实现与分析
结构Stack是栈的数据结构。实现栈有很多方法, 其中一种是用链表来实现。这种方法不仅简单,而且可以使栈具有多态的特性。多态通常是面向对象语言的一种特性,它允许某种类型的对象(变量)在使用时用其他类型的对象(变量)代替。这意味着,除了使用栈本身的操作,还可以使用链表中的操作,这是因为栈本身就是一种链表,它与链表具有相同的特性。因此很多时候,可以像使用链表一样使用栈。原创 2017-11-17 08:28:28 · 301 阅读 · 0 评论 -
算法精解_C语言 链表_单链表(接口定义+类型实现)
链表可以说是一种最为基础的数据结构。链表由一组元素以一种特定的顺序组合或链接而成,在维护数据的集合时很有用。这一点同我们常用的数组很相似。然而,链表在很多情况下比数组更有优势。特别是在执行插入和删除操作时链表拥有更高的效率。链表需要动态的开辟存储空间,也就是存储空间是在程序运行时分配的。由于在很多应用中数据的大小在编译时并不能确定,因此这种动态分配空间的特性也是链表的一个优点。原创 2017-10-30 08:32:50 · 856 阅读 · 0 评论 -
「算法精解_C语言描述」链表_循环链表的实现与分析
同单链表相似,循环链表中的每个元素也包含两个部分:一个数据域指针和一个指向后继元素的next指针。数据结构CListElmt代表循环链表中的单独元素。该结构体拥有两个成员,如上面所述。数据结构CList代表循环链表。这个结构体同单链表相似,但它不包含tail成员。原创 2017-11-11 13:17:41 · 191 阅读 · 0 评论 -
「算法精解_C语言描述」链表_循环链表介绍
循环链表是链表的另一种形式,它提供了更灵活的遍历链表元素的能力。循环链表分类:单向循环链表和双向循环链表。原创 2017-11-10 05:50:15 · 286 阅读 · 0 评论 -
「算法精解_C语言描述」 链表_双向链表的实现与分析
双向链表的实现与分析 双向链表的组成 :1、数据成员;2、指向下一个元素的next指针;3、指向前一个元素的prev指针。数据结构DListElmt:代表双向链表中的单个元素(节点)。数据结构DList:代表双向链表数据结构,该结构的成员同前面介绍的单链表相似。原创 2017-11-07 20:50:47 · 355 阅读 · 0 评论 -
「算法精解_C语言描述」 链表_双向链表(接口定义)
双向链表介绍双向链表中的每一个元素都由3部分组成:除了数据成员、next指针外,每个元素还包含一个指向其前驱元素的指针,称为prev指针。双向链表的组成是这样的:将一些元素链接在一起,使得每个元素的next指针都指向其后继的元素,而每个元素的prev指针都指向其前驱元素。为了标识链表的头和尾,将第一个元素的prev指针和最后一个元素的next指针设置为NULL。原创 2017-11-06 06:11:28 · 273 阅读 · 0 评论 -
算法精解_C语言描述 算法性能分析,如何评判算法!
无论是在设计还是应用一种广泛认可的算法时,我们必须了解算法的性能如何!算法的性能可以通过运算速度和消耗空间来评判。之所以要了解算法的性能,原因有很多方面。如,当要解决一个问题时,有很多算法可供选择,理解了算法的性能,有助于选择最合适的算法有效的解决我们的问题。原创 2017-10-28 07:29:22 · 2420 阅读 · 0 评论 -
「算法精解_C语言描述」栈_栈的接口定义
我们可以把栈形象的看作一个网球筒。当往筒里放球时,球从筒底向上排到筒口;当从筒里拿球时,球从筒口往下依次被拿出,直到筒底的球最后一个被拿出。并且我们想拿到筒底的那个球,那么就必须把筒底那个球之上的球全部拿出才行。栈的一个显著特征是它按照类似的先进先出(LIFO)的方式存储和删除元素。这意味着,最后一个存入栈中的元素将会第一个被删除。在计算机中,要把元素存储到栈中,就“压入”元素;要删除栈中的元原创 2017-11-16 06:15:15 · 385 阅读 · 0 评论