数据结构与算法
文章平均质量分 85
没有昵称阿
计算机专业同学的充电站,专注分享硬核CS学习路线、大学生成长干货。有些道理如果早一点知道,就能少走很多弯路~~~
展开
-
【STL学习】优先级队列Priority Queue详解与C++编程实现
优先级队列Priority Queue介绍优先级队列是一个拥有权值观念的queue。它允许在底端添加元素、在顶端去除元素、删除元素。优先级队列内部的元素并不是按照添加的顺序排列,而是自动依照元素的权值排列。权值最高者排在最前面。缺省情况下,优先级队列利用一个大顶堆完成。关于堆可以参考:STL堆详解与编程实现优先级队列以底部容器完成其所有工作,具有这种“修改某物接口,原创 2013-01-30 16:43:11 · 19139 阅读 · 0 评论 -
【算法学习】线性时间排序-计数排序、基数排序和桶排序详解与编程实现
计数排序计数排序假设n个输入元素中的每一个都是介于0到k之间的整数。此处k为某个整数(输入数据在一个小范围内)。算法思想计数排序的基本思想是对每一个输入元素x,确定出小于x的元素的个数。然后再将x直接放置在它在最终输出数组中的位置上。由于数组中可能有相等的数,在处理时需要注意。时间复杂度和空间复杂度分析算法总时间Θ(k + n)。当k原创 2013-03-28 14:36:33 · 3013 阅读 · 2 评论 -
【算法学习】图相关算法编程实现-深度优先遍历和广度优先遍历
一、图的表示图G=(V,E)。要表示一个图,通常有两种方法:邻接表和邻接矩阵。两种方法都既可以表示有向图,也可以表示无向图。邻接表表示由一个包含|V|个列表的数组组成,其中每个列表对应V中的一个顶点。每个邻接表中的顶点一般以任意顺序存储。实例:图一 无向图的邻接矩阵表示图二 无向图的邻接表表示图三 有向图的邻接矩阵图四 有向图的邻接表表示原创 2013-03-29 08:54:23 · 8805 阅读 · 2 评论 -
【算法学习】B-Tree编程实现(C++模板类封装)
B-Tree模拟编程实现。采用C++模板类封装。参考《算法导论(第二版)》第18章 B树。实现了B树的搜索、插入和删除的重要操作。欢迎交流和讨论,如有错误,还请指出~(E-Mali:xiajunhust@gmail.com)BTree.h://B-树编程实现//《算法导论(第二版)》第18章 B树//Author:江南烟雨//E-Mail:xiaj原创 2013-03-20 15:05:19 · 3958 阅读 · 4 评论 -
【STL学习】自己动手C++编程实现hash table(散列表)
SGI STL中散列表采用链接法解决冲突。结构中维护了一个vector,vector中每一个元素称为一个桶(bucket),它包含的是一个链表的第一个节点。下面代码展示了自己编程实现的hash table,C++模板类封装。如有错误,还请包涵和指正(E-Mail:xiajunhust@gmail.com)!HashTable.h://《STL源码剖析》5.7原创 2013-04-01 15:52:03 · 6607 阅读 · 1 评论 -
排序算法总结
下面简要总结了常用的一些排序算法。如有错误,还请大家指正、见谅~~谢谢~~插入排序:是一个对少量元素进行排序的有效算法。实现比较简单。时间复杂度:O(n^2),空间复杂度:O(1)。是稳定的排序方法。代码://insertion sort#include using namespace std;//insertion sortvoid InsertionS原创 2011-10-23 16:32:47 · 9472 阅读 · 38 评论 -
【算法学习】堆排序(Heap Sorting)
堆排序引入了另外一种算法设计技术:利用某种数据结构(在此算法中为“堆”)来管理算法执行中的信息。一、堆堆简介我们通常使用的堆的二叉堆,它是一种数组对象,可以被视为一棵完全二叉树。树中的每个节点与数组中的节点相对应。如下图所示:表示堆的数组通常由两个属性:数组中元素的个数length[A],存放在A中的堆的元素的个数heap-size[A]。也就是说存放在A中的一些元原创 2012-05-25 20:33:12 · 5010 阅读 · 1 评论 -
【实习笔试面试题】2013网易互联网实习笔试算法题-找出最大连续自然数个数
找出最大连续自然数个数搜集者:江南烟雨E-Mail:xiajunhust@gmail.com本题为网易互联网暑期实习生笔试算法题。凭记忆记录下来的题目,如违反网易版权请邮件联系,本人会删除。以下参考答案为自己搜集网上资料以及同学讨论所得,如有错误,还请指出。欢迎来信交流!题目: 一个无序自然数数组,比如[100,2,1,3]求在0(n)时间复杂度原创 2013-03-22 14:44:09 · 5504 阅读 · 4 评论 -
笔试面试常考数据结构-单链表常用操作编程实现
单链表是笔试以及面试手写代码中常考的数据结构之一。下面实现了单链表的常见操作:创建单链表、删除节点、打印单链表(包括正向打印以及逆向打印)、反转单链表、找出单链表的倒数第K个节点、合并两个有序单链表等操作。代码(C++)://笔试面试单链表常用操作编程实现#include #include #include using namespace std;//单链表节点数据结原创 2013-07-04 20:50:06 · 9069 阅读 · 4 评论 -
【算法学习】AVL平衡二叉搜索树原理及各项操作编程实现(C++)
AVLTree即(Adelson-Velskii-Landis Tree),是加了额外条件的二叉搜索树。其平衡条件的建立是为了确保整棵树的深度为O(nLogn)。平衡条件是任何节点的左右子树的高度相差不超过1.在下面的代码中,编程实现了AVL树的建立、查找、插入、删除、遍历等操作。采用C++类封装。AVL树中比较复杂的操作时插入和删除操作。在这里对插入和删除操作进行讲解。原创 2012-12-13 13:03:48 · 11753 阅读 · 6 评论 -
【算法学习】最优二叉查找树(动态规划)
一、什么是最优二叉查找树最优二叉查找树:给定n个互异的关键字组成的序列K=,且关键字有序(k1图一显示了给定上面的概率分布pi、qi,生成的两个二叉查找树的例子。图二就是在这种情况下一棵最优二叉查找树。概率分布:i012345p原创 2012-10-19 11:07:15 · 83977 阅读 · 7 评论 -
【算法学习】双调欧几里得旅行商问题(动态规划)
双调欧几里得旅行商问题是一个经典动态规划问题。《算法导论(第二版)》思考题15-1和北京大学OJ2677都出现了这个题目。旅行商问题描述:平面上n个点,确定一条连接各点的最短闭合旅程。这个解的一般形式为NP的(在多项式时间内可以求出)J.L. Bentley 建议通过只考虑双调旅程(bitonictour)来简化问题,这种旅程即为从最左点开始,严格地从左到右直至最右点,然后严格地从右到原创 2012-10-20 10:36:02 · 24646 阅读 · 6 评论 -
大整数四则运算
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////1. 输入形式为:A[空格或换行]O[空格或换行]B; //// 2. 1中A、B为大数,O为运算符(如输入:123456789 / 432432); //// 3. 既然处理大数,就没必要输入小数点位了; //// 4.转载 2010-07-10 22:40:00 · 2659 阅读 · 0 评论 -
二叉树建立及中序遍历C++语言实现
二叉树建立及中序遍历C语言实现:// 建立二叉树.cpp : 定义控制台应用程序的入口点。//#include "iostream"using namespace std;/*树节点数据结构*/typedef struct BiTNode{ char data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree;void CreateTree(BiTree &T)//建立二叉树{ char ch; cin>>ch原创 2010-08-20 20:43:00 · 6886 阅读 · 2 评论 -
两任意长整数相加
<br />代码:<br />#include<stdio.h>#include<string.h>#include<stdlib.h>#define MAXSIZE 1000char res[MAXSIZE+1];//存放结果; char a[MAXSIZE],b[MAXSIZE];//存放两个加数; int len1,len2;//两个加数的长度; void init(char *a){//初始化字符数组; for(int i=0;i<MAXSIZE;i++原创 2011-02-21 14:14:00 · 4148 阅读 · 2 评论 -
国内外ACM/ICPC的OJ,BBS列表
北京邮电大学 http://acm.scs.bupt.cn/onlinejudge/(推荐) 北京大学 http://acm.pku.edu.cn/JudgeOnline/ (推荐) http://poj.grids.cn/(内部) 浙江大学 http://acm.zju.edu.cn/ (推荐) 天津大学 http://acm.tju.edu.cn/toj/ 武汉大学 http://acm.whu.edu.cn/oak/FELIOJ http://acm.whu.edu转载 2011-02-23 20:52:00 · 4686 阅读 · 1 评论 -
寻找逆序对
设A[1...n]是一个包含n个不同数的数组。如果在iA[j],则(i,j)就成为A中的一个逆序对(inversion)。要确定一个数组中的逆序对的个数,可以采取分治法。将A分为两部分A1和A2,则A中逆序对的数目等于A1中逆序对的数目、A2中逆序对的数目和A1,A2合并时A1中比A2中元素大的数目。参考代码:#include using namespace std;#de原创 2011-10-23 22:50:23 · 3685 阅读 · 2 评论 -
2012届华为上机考试题目与参考答案
题目一共三道,都比较简单,主要还是注重基础知识的考察。答案是自己编写的,不一定正确,仅供参考。欢迎大家提出宝贵的意见~~1、选秀节目打分,分为专家评委和大众评委,score[] 数组里面存储每个评委打的分数,judge_type[] 里存储与 score[] 数组对应的评委类别,judge_type[i] == 1,表示专家评委,judge_type[i] == 2,表示大众评委,n表示评原创 2011-09-09 22:50:48 · 3594 阅读 · 3 评论 -
二叉树的遍历-递归与非递归 - 海子
二叉树的遍历-递归与非递归 二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有前序、中序以及后序三种遍历方法。因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁。而对于树的遍历若采用非递归的方法,就要采用栈去模拟实现。在三种遍历中,前序和中序遍历的非递归算法都很容易实现,非递归后序遍历实现起来转载 2013-10-15 23:30:02 · 5211 阅读 · 0 评论