摘要:
使用循环计数法的目的是为了高效。 添加Queue.h文件: 添加StaticQueue.h文件: 测试程序如下: 运行结果如下: 小结: 阅读全文
posted @ 2018-09-16 20:52
周伯通789
阅读(290)
评论(1)
推荐(0)
摘要:
自定义Test类,给出如下的测试程序: 运行结果如下: 此时栈中没有任何元素,却调用了10次构造函数和10次析构函数。 这是因为我们使用了原生数组作为存储空间,在创建栈的时候,当然会调用泛指类型T的构造函数。 我们需要另一种存储形式,来避免这种缺陷。 添加LinkStack.h文件: 测试程序如下: 阅读全文
posted @ 2018-09-16 19:37
周伯通789
阅读(193)
评论(0)
推荐(0)
摘要:
这种使用原生数组作为存储容器的栈也简称顺序栈。 添加Stack.h文件: 添加StaticStack.h文件: 测试程序如下: 运行结果如下: 小结: 阅读全文
posted @ 2018-09-16 19:28
周伯通789
阅读(355)
评论(0)
推荐(0)
摘要:
头结点不位于链表里面,只是用于定位,和内核链表不同。 将LinuxList.h添加到我们的工程中。 再添加一个DualCircleList.h文件: 我们的实现中,头结点只为了做定位用,不属于链表中的一个元素,因此,next和pre函数要跳过头结点。 单向循环链表CircleList是继承的Link 阅读全文
posted @ 2018-09-16 18:06
周伯通789
阅读(342)
评论(0)
推荐(0)
摘要:
__builtin_prefetch是gcc扩展的,用来提高访问效率,需要硬件的支持。 在标准C语言中是不允许static inline联合使用的。 删除依赖的头文件,将相应的结构拷贝到LinuxList.h中: 此外,需要将container_of改写成我们自己的形式。 移植后的内核链表如下: 这 阅读全文
posted @ 2018-09-16 16:53
周伯通789
阅读(373)
评论(0)
推荐(0)
摘要:
TYPE应该是一个结构体类型,MEMBER是结构体中的一个成员。 使用了这个宏之后可以得到MEMBER在TYPE中的偏移量。 0被强制类型转换成TYPE指针。 在计算机的0地址处没有TYPE结构体,0地址是留给操作系统使用的。 我们存在的疑问是将0地址转换为TYPE类型的指针,然后取MEMBER成员 阅读全文
posted @ 2018-09-16 12:44
周伯通789
阅读(518)
评论(0)
推荐(1)
摘要:
由上图可以看出来,插入和遍历的时间复杂度是不一样的。 这样不管游标在哪一个位置上,都可以通过后继或者前驱指针任意访问。 双向链表的继承层次: 单链表和双向链表应该是兄弟关系,而不应该是继承关系,因为它们的内部机制是完全不同的了。 插入新节点图解: 删除节点的步骤: 添加DualLinkList.h文 阅读全文
posted @ 2018-09-16 11:14
周伯通789
阅读(303)
评论(0)
推荐(0)
摘要:
循环链表的继承层次结构: 插入位置为0图解: 删除位置为0图解: 添加CircleList.h文件: 我们将LinkList中的函数全部做成了virtual虚函数,因为有可能将CircleList当LinkList使用。在CircleList中我们重新实现了很多函数。 在重新实现的find函数中,1 阅读全文
posted @ 2018-09-16 08:44
周伯通789
阅读(293)
评论(0)
推荐(0)
浙公网安备 33010602011771号