数据结构
文章平均质量分 65
codeLeaves
业余软工狗
展开
-
Data Structure 初学链表(ADT实现)
通过c语言实现最原始的链表,顺便复习一下c语言的语法。①按照ADT的实现,把链表的实现划分为许多功能。#include<stdio.h>#include<stdlib.h>typedef struct LNode{ int elem; struct LNode *next;}LNode, *LinkedList;void IntiList(LinkedList *);//初始原创 2015-08-09 16:37:38 · 518 阅读 · 0 评论 -
Leetcode 303 Range Sum Query - Immutable Python题解
题目大意输入一个数组,给定两个数组的索引i和j(i <= j),计算从索引i到j的和。 原题链接:303. Range Sum Query - Immutable题解一开始的时候我打算在初始化的时候用一个二维数组存储所有结果值,然后每次获取和的时候直接访问缓存的二维数组即可。 理想很美好,现实很扑街,惨遭MLE。class NumArray(object): def __init__(se原创 2017-05-19 23:24:52 · 915 阅读 · 0 评论 -
LeetCode 146 LRUCache Python题解
LRUCache全名为Least Recently Used,即最近最少使用算法,是操作系统中发生缺页中断时常用的一种页面置换算法。根据局部性原理,最近使用的数据块很有可能继续被频繁使用,因此当Cache已满的时候,LRUCache算法会把最久未使用的数据块替换出去。对于LRU算法主要实现两个操作:访问数据块 将访问的数据块更新为最近访问,并返回访问的数据块。 添加数据块 如果Cache还有原创 2017-04-18 19:02:13 · 5040 阅读 · 0 评论 -
动态规划-矩阵链乘法
问题给定一个n个矩阵的序列(即矩阵链,n = <A1A_{1}, A2A_{2}, …, AnA_{n}>),并计算n个矩阵序列的乘积(S = A1A_{1}A2...A_{2}...AnA_{n})。由于矩阵的乘法是满足结合律的,所以可以通过任意的添加括号明确计算的顺序。不同位置的括号对矩阵乘法的计算代价会产生巨大影响,以矩阵链n = <A1A_{1}, A2A_{2}, A3A_{3}>为例,其原创 2017-04-08 20:47:01 · 576 阅读 · 0 评论 -
初始化链表的四种方法(有无头结点以及表头(尾)插入法)
首先定义初始条件typedef struct Node{ int val; struct Node *next;}Node, *LinkedList;LinkedList HasHeadNodeIntiListAtEnd();LinkedList HasHeadNodeIntiListAtStart();LinkedList NoHeadNodeIntiListAtStart原创 2015-10-02 10:21:00 · 3772 阅读 · 0 评论 -
插入排序与归并排序及优化
看CLRS顺便做下笔记总结一下,理清思路。(所有排序例子皆为从小到大,各位觉得哪里能更好地改进都可以指出来)插入排序(c语言实现)最坏情况下的运行时间是Θ(n*n),跟冒泡排序,选择排序的最坏情况下的运行时间是相同的但是,运算的速度 插入>选择(相比冒泡交换的次数较少)>冒泡最简单的例子啦,打牌的时候一张一张的拿到手里插入排序。上代码#include<stdio.h>#include<std原创 2015-12-11 17:30:46 · 1180 阅读 · 0 评论 -
希尔排序实现
希尔排序算是插入排序的一种高级进化版,虽然希尔排序的实现比较简单,但是它的原理证明非常复杂,由于能力有限,故没有涉及。我直接上代码吧。#include<stdio.h>int container[1000001];int main(void){ int N; scanf("%d", &N); int i, j; for(i = 0;i < N;i++){原创 2015-12-11 19:26:59 · 366 阅读 · 0 评论 -
迷宫求解算法(栈DFS以及队列BFS)
我们首先给出一个迷宫,它的规格是5 * 5,在这里我使用int的二维数组表示迷宫,其中1表示障碍,0表示可以通行的道路,要求从(0,0)坐标走到(4, 4)坐标,并输出走过的坐标路径。int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0,}原创 2015-11-03 17:35:53 · 4765 阅读 · 0 评论 -
DFS入门:全排列算法及POJ 1564 Sum it up详解
全排列算法是DFS(深度优先搜索)的一个简单入门应用。 假设我们现在给过一个数n, 要求我们输出从1到 n的n个数的所有排列方式。 详细要求可参考codevs中 1294全排列问题。首先给出程序的主体及各个变量的作用:#include<stdio.h>#include<stdlib.h>int main(void){ int n; scanf("%d", &n); i原创 2015-11-20 17:00:07 · 703 阅读 · 0 评论 -
栈应用:中缀表达式转后缀表达式并以二叉树储存
中缀表达式就是我们平时所看到的一般计算表达式,如: ①最简单的: 1 + 1 ②稍微复杂一点的: 8 – ( 3 + 2 * 6 ) / 5 + 4而后缀表达式(也被称为逆波兰式)则是将运算符放在了最后,两个操作数放在前面,以及不需要括号表示运算的优先级, 如: ①1 + 1 对应的就是 1 1 + ②8 – ( 3 + 2 * 6 ) / 5 + 4 对应的就是 8 3 2 6原创 2015-11-24 16:19:46 · 3134 阅读 · 0 评论 -
MinStack + Implement Queue using stacks = MinQueue
LeetCode上有两道关于Stack的题目:Implement Queue using StacksMin Stack其中MinStack有个变体题目是MinQueue,简单地来说就是要实现Queue的常用操作,并使获取Queue中的最小值操作所需的时间复杂度为常数。由于直接套MinStack的Solution在MinQueue上是行不通的,因此可以先实现MinStack,再用MinStac原创 2017-12-17 18:20:27 · 464 阅读 · 0 评论