- 博客(5)
- 收藏
- 关注
原创 CSAPP:malloclab (显式空闲链表 LIFO+首次适配)
建议先学会书本的隐式空闲链表, 再学此显式空闲链表显式空闲链表(双向空闲链表)的堆块格式使用显式空闲链表使得首次适配的分配时间从块总数(n)的线性时间减少到了空闲块数量(m)的线性时间:O(m) < O(n),其中m < n。释放块和合并块与隐式空闲链表一样都是O(1)。显示空闲链表的格式宏marco#define WSIZE 4#define DSIZE 8#define CHUNKSIZE (1 << 12)#define MAX(x, y) ((x) &g
2021-04-28 23:14:34
3358
1
原创 【堆合并】左式堆
左式堆定义:左式堆具有与二叉堆一样的堆序性质,但它不是理想平衡的二叉树。性质:对于堆中的每一个节点X,左儿子的Npl至少与右儿子的Npl一样大,即Npl(左儿子) >= Npl(右儿子)。 (Npl: 任一节点X的零路径长Npl(X)定义为从X到一个没有两个儿子的节点的最短路径的长。)堆结构及函数声明typedef struct LeftHeap *Lefh;Lefh Merge_node(Lefh, Lefh); // 驱动Mergestatic Lefh Merge(Lefh
2020-11-24 21:55:58
1001
原创 【O(N)】生成N个不重复自然数的随机置换
例如,生成{4,3,1,5,2}或者{3,1,4,2,5}是合法置换,但{5,4,1,2,1}却不是,因为1重复出现而3未出现前提:假设存在一个随机数生成器RandInt(i, j),它以相同的概率生成i 和 j之间的一个整数O(N) 算法① 为该数组赋值使得A[i] = i + 1②for (int i = 1; i < N; i ++) swap(&A[i], &A[RandInt(0, i)]);若使用循环来判断重复,则时间复杂度是O(N^2logN)
2020-10-26 16:46:39
330
原创 数组模拟链表
优点高效:插入、删除操作十分简便,不需要像指针链表一样遍历**声明变量head:头节点e[i]:节点i的数值 ne[i]:节点i的next指针idx:存储当前用到了几个节点int head, e[N], ne[N], idx;**初始化void init(){ head = -1; // 指针值为1,表示到了链表末尾,无节点 idx = 1; // idx = 1表示第一个节点的下标为1}**向表头插入数void head_to_inst(int x)
2020-10-07 18:46:05
161
原创 【快速排序】递归与非递归
递归写法1.以中间值作为基准数void quick_sort(int q[], int l, int r){ if (l >= r) return ; // 必须有等于条件 int x = q[(l + r) / 2], i = l - 1, j = r + 1; while(i < j) { do ++ i; while(q[i] < x); // 不可 <= do -- j; while(q[j
2020-10-06 20:14:46
137
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人