数据结构
webnoob
会点算法的前端程序猿~
展开
-
POJ 3253 最优二叉树
思路:这到题用到了哈弗曼树原创 2014-10-26 15:37:00 · 624 阅读 · 0 评论 -
NYOJ-94 cigarettes
source link1.tips 由于是求能得到的最大香烟数,所以每次换完剩下的香烟头记得累加,以便下次换。接下来循环模拟这个过程就可以了。2.code#include <iostream>#include <string>#include <cstring>#include <cmath>#include <algorithm>using namespace std;int ma原创 2016-10-21 20:00:20 · 718 阅读 · 0 评论 -
单链表基本操作
带头结点的单链表,代码如下:#include #include using namespace std;struct node{ int val; node* next; node(){ next=NULL; }};node* head;// 在位置i插入值节点xvoid insert(int i,int x){ node* p = head; //原创 2016-09-19 16:18:51 · 843 阅读 · 0 评论 -
八大排序之——插入排序
插入排序是最简单的排序方法,他的基本操作是将一个记录插入到已排序好的前子序列中。有n个数的数列,总共要进行n-1次插入排序。例如原数列为[5,1,3,2,4]总共进行n-1次排序分别为:[1,5,3,2,4],[1,3,5,2,4].[1,2,3,5,4],[1,2,3,4,5].复杂度为O(n^2),排序为稳定的排序。基本代码实现如下:#include using namesp原创 2016-08-23 23:44:06 · 413 阅读 · 0 评论 -
稳定排序和不稳定排序分析
稳定排序和不稳定排序 这几天笔试了好几次了,连续碰到一个关于常见排序算法稳定性判别的问题,往往还是多选,对于我以及和我一样拿不准的同学可不是一个能轻易下结论的题目,当然如果你笔试之前已经记住了数据结构书上哪些是稳定的,哪些不是稳定的,做起来应该可以轻松搞定。本文是针对老是记不住这个或者想真正明白到底为什么是稳定或者不稳定的人准备的。 首先,排序算法的稳定性大原创 2016-08-23 23:25:12 · 2718 阅读 · 0 评论 -
二叉树的建立和遍历
二叉树:树的度最大为2的树称为二叉树,二叉树的基本操作包括,先序,中序,后序和层次遍历,和求出树的高度等。具体代码如下,建树树采用链表形式,另外也可以采用顺序存储结构。#include #include #include using namespace std;struct node{ char data; node* l; node* r; no原创 2016-09-01 16:15:49 · 703 阅读 · 0 评论 -
八大内部排序 -- 归并排序
归并排序(merge-sort):将两个或两个以上的有序列表组合成一个新的有序表,合并的m,n长度的两个表的复杂度为O(m+n),n个数的序列进行归并共有ceil(logn)次,每一次合并都是n常数级别的,所以总的复杂度为O(nlogn)。同时归并排序是一种稳定的排序。代码如下,采用的是利用递归的方式书写,要对递归的工作方式要用比较深刻的理解哦。。#include using names原创 2016-08-31 23:49:48 · 1077 阅读 · 0 评论 -
八大内部排序之——冒泡排序
*** 冒泡排序 最坏复杂度 O(n^2) 稳定排序 ***#include using namespace std;void print(int *a,int n){ for(int i=0;i<n;i++){ cout<<a[i]<<" "; } cout<<endl;}int main(){ int a[100];原创 2016-08-21 22:02:54 · 746 阅读 · 0 评论 -
八大内部排序 -- 堆排序
堆排序(heap-sort):把关键字序列看成一颗二叉树,树上的非叶子节点的值均小于(或者大于)其左右子节点的值,所以树根肯定是这个序列的最小值或者最大值。堆排序的核心是树节点的调整,以维护一个最小堆树(或者最大堆),建堆树也是通过堆调整建立的。时间复杂度为:O(nlong) ,不稳定的排序代码如下:#include using namespace std;void print原创 2016-08-31 18:15:43 · 481 阅读 · 0 评论 -
八大内部排序 -- 选择排序
选择排序:每一次在n-i+1(i=1,2,,,n-1)个记录中选取关键字最小的记录作为有序序列第i个记录。复杂度为O(^2),不稳定的排序代码如下:#include using namespace std;void print(int *a,int n){ for(int i=0;i<n;i++){ cout<<a[i]<<" "; } c原创 2016-08-30 18:42:58 · 412 阅读 · 0 评论 -
八大内部排序--快速排序
快速排序(qiuck sort):对冒泡排序的一种改进,通过一趟排序把记录分隔成两部分,其中一部分的关键字比另一部分都下,然后递归对这两部分进行快速排序。时间复杂度:最坏O(n^2),平均O(nlogn),属于不稳定的排序。代码如下:#include using namespace std;void print(int *a,int n){ for(int i=0;i<n原创 2016-08-29 20:09:16 · 1068 阅读 · 0 评论 -
八大内部排序--希尔排序
希尔排序(shell sort):先将整个带排序记录序列分割成若干个子序列分别进行直接插入排序,待整个序列的记录‘基本有序’时,再对全体记录进行一次直接的插入排序。时间复杂度:O(n^1.5) 属于插入排序的一种,是稳定的排序代码如下:/***** shell-sort 希尔排序 稳定的排序 O(n^1.5)******/#include using namespace std原创 2016-08-29 18:37:15 · 725 阅读 · 0 评论 -
AC自动机模板
每个节点只访问一次转载 2014-10-07 18:40:50 · 457 阅读 · 0 评论 -
ACdream 1430 【后缀数组+分组】
题意:给定一个字符串,求出不重复原创 2014-10-07 17:12:30 · 549 阅读 · 0 评论 -
NYOJ-2 括号匹配
source link1.tips 栈应用的经典问题。对每个准备入栈元素判断他是否和栈顶元素匹配即可。2.code#include <iostream>#include <string>#include <cstring>#include <cmath>#include <algorithm>#include <stack>using namespace std;int main(原创 2016-10-23 12:27:39 · 434 阅读 · 0 评论