数据结构
文章平均质量分 79
禾夕
这个作者很懒,什么都没留下…
展开
-
VxWorks中三元组mBlk的原理
数据包在网络协议栈中从上向下流动时,需要在数据的首部和尾部为其增加相应的包头和包尾。例如在TCP/IP协议栈中,数据从应用层向下传输的过程中,需要为其封装TCP头部、IP头部等,使得接收端能根据各层的报头来正确的接收数据。这就要求存储数据的缓冲区是可变长的,而同时如果数据是通过拷贝在协议层之间传输时,大量的拷贝会极大的影响性能。因此在VxWorks中,网络协议栈采用了MBlk-ClBlk-Cl原创 2015-06-16 16:23:48 · 4490 阅读 · 1 评论 -
VxWorks中mBlk三元组的实现
在上文中,对mBlk三元组的原理进行了简单的介绍。下面将简单介绍三元组的实现,对其部分代码进行分析。mBlk是用C语言实现的,因此其中包含了大量复杂的指针操作和函数指针。1、poolFuncpoolFunc是一个结构体,其中定义了多个函数指针,用来操作存储池,包括初始化netPool,申请和归还mBlk、ClBlk和Cluster等。系统定义的默认函数表如下:LOCAL P原创 2015-06-16 17:13:40 · 3437 阅读 · 0 评论 -
STL vector的内部实现原理及基本用法
本文基于STL vector源代码,但是不考虑分配器allocator,迭代器iterator,异常处理try/catch等内容,同时对_Ucopy()、 _Umove()、 _Ufill()函数也不会过度分析。一、vector的定义template<class _Ty, class _Ax> class vector : public _Vector_val<_Ty原创 2016-02-23 20:38:46 · 44920 阅读 · 1 评论 -
堆和堆排序
堆 二叉堆是一种基于数组的数据结构。它可以被视为一棵完全二叉树。 二叉堆可以分为大根堆和小根堆,大根堆是指父节点的key总是大于或等于任何一个子节点的key,因此堆的根节点为最大值。而小根堆则相反,因此小根堆的根节点为所有元素中的最小值。 二叉堆必须满足两个特性: 1)父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值 2)每个结点的左子树和右子树都是一个二叉堆(原创 2016-04-25 14:40:27 · 841 阅读 · 0 评论 -
基本排序算法
排序算法有非常多,主要包括:选择排序、插入排序、冒泡法、归并排序、快速排序、堆排序、计数排序、基数排序、桶排序 In-place sort(不占用额外内存或占用常数的内存):插入排序、选择排序、冒泡排序、堆排序、快速排序。 Out-place sort:归并排序、计数排序、基数排序、桶排序。 稳定排序:相等元素的相对顺序始终不会发生改变 stable sort原创 2016-04-12 10:09:47 · 369 阅读 · 0 评论 -
哈希表
哈希表 哈希表是根据关键码(key)直接进行访问的数据结构。通过将key通过特定映射函数映射到某一位置直接存储、访问。 哈希表查找的时间复杂度最好时可以为O(1)。在最坏情况下,哈希表会退化为单链表,此时时间复杂度为O(n)。若关键字为k,则其值存放在f(k)的存储位置上,称这个对应关系f为散列函数对不同的关键字可能得到同一散列地址,即k1≠k2,而f(k1)=f(k2),这种现象称为碰原创 2016-04-25 15:50:35 · 737 阅读 · 0 评论 -
单链表排序----快排 & 归并排序
题目描述: 给定一个乱序的单链表的头节点,对该链表中的节点进行排序 要求时间复杂度为O(nlgn),空间复杂度为O(1) 分析: 由于题目要求时间复杂度我O(nlgn),因此选择排序和插入排序可以排除。 在排序算法中,时间复杂度为O(nlgn)的主要有:归并排序、快速排序、堆排序。 其中堆排序的空间复杂度为(n),也不符合要求,因此也可以排序原创 2016-04-13 10:48:14 · 27654 阅读 · 10 评论 -
B树
常见的动态查找树有:二叉查找树(BST)、平衡二叉查找树(AVL)、红黑树(RB-Tree)、B-tree/B+-tree。 由于前面三种树都属于二叉树,因此树的高度为(log2N)。树查找的时间复杂度与树的高度有关,因此要提高查找效率必须要降低树的高度,所以我们可以想到多叉树。 B树、B+树都是基于多叉树实现的。磁盘读取 (参考http://blog.csdn.net/v_july_原创 2016-04-26 18:48:47 · 8731 阅读 · 1 评论