摘要:        
问题: 进栈到出栈的数据元素的转移在出栈(stack_out)为空的时候发生。 用栈实现队列: 结果如下: 用队列实现栈: 进栈时直接进,出栈时,先将前n-1个元素转移到另一个队列,然后剩下的那一个元素出去即可。 两个队列来回倒换。 程序如下: 结果如下: 小结:    阅读全文
        posted @ 2018-09-16 22:21
周伯通789
阅读(221)
评论(0)
推荐(0)
            
        
        
摘要:        
添加LinkQueue.h文件: 测试程序如下: 结果如下: 用LinkList实现链式队列时,插入操作的时间复杂度为O(n),这是很低效的。 修改LinkQueue.h: 如队列的操作的时间复杂度变成了O(1)。 测试程序如下: 结果如下: 测试程序2: 结果如下: 这体现了顺序队列的缺陷。而链式    阅读全文
        posted @ 2018-09-16 21:34
周伯通789
阅读(258)
评论(0)
推荐(0)
            
        
        
摘要:        
使用循环计数法的目的是为了高效。 添加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号
浙公网安备 33010602011771号