• 数据结构与算法 问题集


     #返回上一级

    @Author: 张海拔

    @Update: 2014-6-1

    @Link: http://www.cnblogs.com/zhanghaiba/p/3513330.html

    【基础数据结构】

    ◇◇线型结构

    ◇◇◇◇线性表之静态表(基于数组和静态分配空间)

    ◇◇◇◇◇◇◇◇静态表之整型数组的插入、删除、查找 link(public)

    ◇◇◇◇◇◇◇◇有序数组的合并 link(public)

    ◇◇◇◇◇◇◇◇用数组模拟约瑟夫问题 link(public)

    ◇◇◇◇◇◇◇◇怎样实现大整数的乘法?(指定规模)

    ◇◇◇◇◇◇◇◇怎样实现动态数组?(任意规模)

    ◇◇◇◇◇◇◇◇二维数组的转置

    ◇◇◇◇◇◇◇◇静态表之字符数组(字符串)的字符统计

    ◇◇◇◇◇◇◇◇字符串反转、旋转

    ◇◇◇◇◇◇◇◇字符串匹配问题与KMP算法

    ◇◇◇◇◇◇◇◇怎样实现一个strstr()?

    ◇◇◇◇线性表之动态表(基于指针和动态分配空间)

    ◇◇◇◇◇◇◇◇单链表的创建、插入、删除、查找 link(public)

    ◇◇◇◇◇◇◇◇怎样就地反转单链表? link(public)

    ◇◇◇◇◇◇◇◇有序单链表的合并 link(public)

    ◇◇◇◇◇◇◇◇怎样判断单链表是否存在环路?

    ◇◇◇◇◇◇◇◇怎样确定链表中倒数第k个节点?

    ◇◇◇◇◇◇◇◇怎样高效地解决约瑟夫问题?

    ◇◇◇◇◇◇◇◇双链表

    ◇◇◇◇◇◇◇◇伪链表

    ◇◇◇◇◇◇◇◇#数组和链表个人总结 link(private)

    ◇◇◇◇栈

    ◇◇◇◇◇◇◇◇栈的数组实现和括号匹配的检查 link(public)

    ◇◇◇◇◇◇◇◇栈的链表实现

    ◇◇◇◇◇◇◇◇怎么实现Linux下的逆波兰计算器dc? link(public)

    ◇◇◇◇队列

    ◇◇◇◇◇◇◇◇怎样用两个栈模拟一个队列?

    ◇◇◇◇◇◇◇◇怎样实现实现优先队列?

    ◇◇树型结构

    ◇◇◇◇二叉树

    ◇◇◇◇◇◇◇◇二叉树的几种创建方法 link(public)

    ◇◇◇◇◇◇◇◇由遍历序列创建二叉树 link(public)

    ◇◇◇◇◇◇◇◇二叉树四种遍历方法

    ◇◇◇◇◇◇◇◇二叉树前序中序和后序遍历的非递归实现

    ◇◇◇◇◇◇◇◇怎样优化二叉树的遍历?

    ◇◇◇◇◇◇◇◇怎样求二叉树的高度和宽度(非递归)?

    ◇◇◇◇◇◇◇◇怎样求二叉树节点间最远距离(二叉树“直径”)?

    ◇◇◇◇◇◇◇◇怎样求二叉树指点俩节点的最近公共祖先?

    ◇◇◇◇◇◇◇◇二叉树的旋转操作和平衡判断 link(public)

    ◇◇◇◇◇◇◇◇怎样输出二叉树的所有路径(按字典序)? link(public)

    ◇◇◇◇◇◇◇◇二叉树所有路径问题的应用(如最大权值路径、权值为K的路径)?

    ◇◇◇◇哈夫曼树(最优二叉树)

    ◇◇◇◇◇◇◇◇哈夫曼树的创建

    ◇◇◇◇◇◇◇◇哈夫曼树的编码与解码

    ◇◇◇◇◇◇◇◇怎样制作一个文本文件压缩软件?

    ◇◇图型结构

    ◇◇◇◇邻接矩阵

    ◇◇◇◇邻接表 link(public)

    ◇◇◇◇◇◇◇◇邻接表和邻接矩阵的相互转换 link(public)

    ◇◇集合结构(主要用于动态操作)

    ◇◇◇◇堆

    ◇◇◇◇二叉排序树(二叉搜索树、二叉查找树)

    ◇◇◇◇◇◇◇◇二叉排序树删除、搜索、插入的递归实现 link(public)

    ◇◇◇◇◇◇◇◇二叉排序树删除、搜索、插入的迭代实现 link(public)

    ◇◇◇◇◇◇◇◇怎样把二叉排序树转换为有序双链表

    ◇◇◇◇◇◇◇◇排序二叉树中求最近公共祖先

    ◇◇◇◇平衡二叉树之AVL

    ◇◇◇◇◇◇◇◇AVL的递归实现

    ◇◇◇◇◇◇◇◇AVL的迭代实现

    ◇◇◇◇哈希表(散列表)

    【高级数据结构】(实用)

    ◇◇◇◇并查集

    ◇◇◇◇线段树

    ◇◇◇◇Tire树(字典树)

    ◇◇◇◇Tire图和AC自动机

    ◇◇◇◇B树

    ◇◇◇◇平衡二叉树之红黑树 

    【经典算法】

    ◇◇查找算法(静态)

    ◇◇◇◇直接查找

    ◇◇◇◇◇◇◇◇直接查找的优化实现

    ◇◇◇◇二分查找(有序静态表)

    ◇◇◇◇◇◇◇◇如何实现sqrt()?

    ◇◇◇◇◇◇◇◇怎样快速求幂?

    ◇◇排序算法(内部排序)

    ◇◇◇◇基本排序方法:冒泡排序、简单选择排序、直接插入排序 link(public)

    ◇◇◇◇快速排序 link(public)

    ◇◇◇◇◇◇◇◇怎样快速求数组中第k大的数?

    ◇◇◇◇堆排序 link(public)

    ◇◇◇◇◇◇◇◇怎样找出前k大的k个数(Top k 集合问题)?

    ◇◇◇◇希尔排序 link(public) 

    ◇◇◇◇归并排序 link(public) 

    ◇◇◇◇◇◇◇◇怎样求出逆序对数(Inverse Number)? link(public)

    ◇◇◇◇◇◇◇◇怎样提升大整数乘法的效率?

    ◇◇◇◇基数排序 

    ◇◇◇◇链表的排序

    ◇◇◇◇◇◇◇◇怎样实现链表的归并排序 link(public)

    ◇◇◇◇线性时间排序

    ◇◇◇◇◇◇◇◇位图数据结构及其排序 link(public)

    ◇◇◇◇排序的实际使用  

    ◇◇图算法 

    ◇◇◇◇DFS和BFS link(public)

    ◇◇◇◇单源最短路(Dijkstra算法) link(public)

    ◇◇◇◇拓扑排序 link(public) 

    ◇◇◇◇最小生成树 

    ◇◇搜索算法

    ◇◇◇◇状态搜索

    ◇◇◇◇◇◇◇◇倒水问题

    ◇◇◇◇◇◇◇◇八数码问题

    ◇◇◇◇剪枝优化

    ◇◇◇◇回溯法

    ◇◇◇◇◇◇◇◇怎样输出可重集的全排列 link(public)

    ◇◇◇◇◇◇◇◇例题: 排列搜索 link(public)

    ◇◇◇◇◇◇◇◇八皇后问题

    ◇◇◇◇动态规划

    ◇◇◇◇◇◇◇◇最大连续和问题

    ◇◇◇◇◇◇◇◇最长公共子序列

    ◇◇◇◇◇◇◇◇DAG的最长路问题(滑雪)

    ◇◇◇◇◇◇◇◇DAG的路径计数问题

    ◇◇◇◇◇◇◇◇无限背包和0/1背包问题

    ◇◇◇◇启发式搜索

    ◇◇◇◇◇◇◇◇A*算法 


     实现方案:

    (1)实现语言:标准C、有些实现会再用Python写(后期计划)。

    (2)通用性:作为demo级别,通常只支持简单内建数据类型,比较适合OJ刷题。

    (3)工程性:前期大部分实现都不加入错误检查,后期考虑用assert()或<setjmp.h>,一般假定输入数据合法。

    至于C语言中基本的模块封装方法(文件分离、extern和static的linkage)只能在函数接口组前面加注释public和private来模拟(提示)。

    尽量设计好接口(函数原型),因为接口的设计关系到代码的复用性。

    (4)代码风格:我一直比较喜欢Linux kernel Style,但略有不同。代码尽量做到自注释,我认为有必要的地方会有简单注释。

    (5)读者定位:自己,以及数据结构和算好初级爱好者。

    因为只有自己看得爽,才会经常翻阅,才会不断更新和完善,所以第一定位就是自己。

    第二定位是给与我水准差不多的同学,供参考及吐槽,所以一般demo附带的说明部分不会做最基础的解释,而是尽量写一些自己的个人理解。

    (6)下一目标:SGI STL问题集(全部C++实现 并对比和学习源码)


     主要参考书籍:(代码均独立实现,即使个别有参照也是自己理解后独立敲出来)

    《算法竞赛入门经典》 刘汝佳

    《Algorithm In C》(Part 1~4) Robert Sedgewick

    《The Algorithm Design Manual》(ADM) Steven. S. Skiena

    《Introduction To Algorithrm》 (CLRS) Thomas. H. Cormen等


     #问题集维护策略技巧等 link(private) 

     #返回上一级

  • 相关阅读:
    XCode4 App Store提交小结
    Android Fragment完全解析,关于碎片你所需知道的一切
    [iOS开发系列]根据Debug和Release状态的变化来屏蔽日志输出
    iOS5可能会删除本地文件储存
    iOS5可能会删除本地文件储存
    应用中弹出 WiFi 提示框的方法
    cannot be translated into a null value due to being declared as a primitive type. Consid
    在pom.xml文件中自定义JDK版本+阿里maven镜像修改
    Docker化tomcat 并且使用maven热部署
    使用wget下载JDK8
  • 原文地址:https://www.cnblogs.com/zhanghaiba/p/3513330.html
Copyright © 2020-2023  润新知