数据结构
文章平均质量分 54
likun_tech
这个作者很懒,什么都没留下…
展开
-
python 实现的 binary tree
使用python 实现的 binary tree,代码如下:#!/usr/bin/pythonclass btree: def __init__(self,value): self.left = None self.right = None self.data = value def insertLeft(self,value): self.left = btree(原创 2012-02-18 21:25:09 · 4136 阅读 · 0 评论 -
linux list.h 实例
#ifndef __LIST_H#define __LIST_H#if defined(WIN32)#define INLINE __inline#else#define INLINE inline#endif/* This file is from Linux Kernel (include/linux/list.h) * and modified by simply rem转载 2012-03-22 21:30:07 · 851 阅读 · 0 评论 -
qsort和bsearch的使用
#include#include#include#include#includeusing namespace std;#define N 15int a[N];int cmp(const void *x,const void *y){ return (*(int*)x)-(*(int*)y);}int char转载 2012-06-02 20:54:11 · 568 阅读 · 0 评论 -
数据结构_Hash通过liner的方法解决冲突
题目链接:http://acm.fzu.edu.cn/problem.php?pid=1353 题目大意:给定100万个木头名称,相同的为一个种类,种类不超过1万,问每个种类出现的概率 解题思路:这题不复杂,简单排序同类的就扎堆了,然后直接判断也能卡时间卡过。正解是用Hash求解,由于每个名称最长是30,所以直接用个数组记录出现次数也不合适,会MLE.那就随机用转载 2012-06-07 19:50:48 · 583 阅读 · 0 评论 -
希尔排序(ShellSort)
希尔排序(ShellSort)[cpp] view plaincopy#include "ShellSort.h" #include "Print.h" // 希尔排序,分组进行插入排序,最后一步仍然是插入排序,但是因为之前的操作使逆序数减少,所以相对单纯的插入排序效率高。 void ShellSort(int A[], i转载 2012-08-18 16:56:13 · 435 阅读 · 0 评论 -
FSM
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 在面试环节中,有一道题目也是考官们中意的一道题目:如果统计一段由字符和和空格组成的字符串中有多少个单词? 其实,之所以问这个题目,考官的目的就是想了解一下你对状态机了解多少。 (1) 题目分析 从题目上看,如果对一个字符串进行处理,那么可转载 2012-08-23 12:47:00 · 559 阅读 · 0 评论 -
根据二叉树的前序和中序序列来重建二叉树
根据二叉树的前序和中序序列来重建二叉树,输出其后序序列这是面试笔试中经常遇到的问题关键要理解在前序和中序序列中找左右子树的前序和中序序列的方法,利用递归实现另外字符串的标准库函数要活用[cpp] view plaincopy#include #include using namespace std;转载 2012-08-24 12:24:43 · 636 阅读 · 0 评论 -
对称子字符串的最大长度
【题 目】输入一个字符串,输出该字符串中最大对称子串的长度。例如输入字符串:“google”,该字符串中最长的子字符串是“goog”,长度为4,因而输出为4。 【思 路1】一看这题就是遍历!没错,我们最直观的往往也是最容易实现的,这里我们暂且不考虑效率的问题。我们的基本思路是:我们如果有一个判断一个字符串是不是对称的函数的话,我们就可以用这个子函数逐一检查原字符串中所有的字符串,然后输出转载 2012-08-24 13:03:39 · 766 阅读 · 0 评论 -
不用+,-,×,/做加法
【题 目】写一个函数,求两个整数的和。要求在函数体内不用+,-,×,/。 【思 路】学过数电的人都知道,+,-,×,/在计算机处理中的基本都是使用的全加器,而全加器在进行计算的时候用到了很多的逻辑门电路(具体的这些门电路我现在也想不起来了,呵呵),所以运算的基础其实就是二进制的逻辑运算的组合。既然题目不要求我们使用+,-,×,/,那么我们可以直接从最底层的逻辑运算开始。 为了方便讨论,转载 2012-08-24 13:12:16 · 581 阅读 · 0 评论 -
把数组排成最小的数
排序的另一种phase,不是按照大小或者是字典序的顺序进行排序,而是根据题目实际的要求进行cmp函数的设计,达到题目的要求该问题就是把(字符)数组进行排序,结果是:所有的字符连接起来形成一个最小的数字。既然是字符的连接,那么相邻的两个数组元素就是进行连接然后进行题目要求的比较(这里是连接后,所形成的字符串转换成书之后的大小比较)。【题 目】输入一个正整数数组,将他们连接起来排转载 2012-08-24 13:39:46 · 572 阅读 · 0 评论 -
跳台阶问题 Fibonacci数列
主要是递归函数的定义,递归函数都有一个初始的状态,然后求出他的通项公式就OK了。【题 目】一个台阶一共有n阶,一次起跳可以跳一阶,也可以跳二阶。问总共有多少中跳法,并对时间复杂度进行分析。【思 路】由特殊到一般的思路吧,如果只有一阶,那么只有一种跳法;如果有2阶,那么有2中跳法(跳1阶再跳1阶,一次跳2阶);那么如果有n阶呢?假设对于n阶的阶梯,我们有f(n)中跳法;那么n阶时,我转载 2012-08-24 13:52:19 · 888 阅读 · 0 评论 -
求递归算法时间复杂度:递归树
递归算法时间复杂度的计算方程式一个递归方程: 在引入递归树之前可以考虑一个例子: T(n) = 2T(n/2) + n2 迭代2次可以得: T(n) = n2 + 2(2T(n/4) + (n/2) 2) 还可以继续迭代,将其完全展开可得: T(n) = n2 + 2((n/2) 2 + 2((n/22)2 + 2((n/23转载 2012-08-24 14:25:12 · 768 阅读 · 0 评论 -
二分查找
引用请注明出处:http://blog.csdn.net/int64ago/article/details/7425727 看到这个标题无论你是处于怎样的心理进来看了,我觉得都是值得的。因为这个问题太简单,任何一个开始接触“真正”算法基本都是从二分查找开始的。至于二分查找都不知道是什么的可以先去找别的资料看下,再来看这篇文章。既然很简单,那么我们开始一起写一个吧,要转载 2012-04-05 22:46:09 · 384 阅读 · 0 评论 -
用C写有面向对象特点的程序
比如在一个项目中,有大量的数据结构,他们都是双向链表,但又想共用一套对链表的操作算法,这怎么做到呢,C中又没有C++中的继承,不然我可以继承一父(类中只有两个指针,一个向前一个向后),而其算法可以写在你类中的虚函数中,供子类使用。如:class Links{public: Links* back; Links* forword; virtual A转载 2012-03-16 16:46:49 · 364 阅读 · 0 评论 -
python实现stack 和 queue
python实现stack 和 queue代码:#!/usr/bin/pythonclass queue: def __init__(self,size = 20): self.size = size self.queue = [] self.end = -1 def setsize(self,size): self.size = size def In(se原创 2012-02-18 21:26:32 · 4129 阅读 · 0 评论 -
一个简单的HashMap C语言实现
http://blog.csdn.net/cheungmine/article/details/1894219一个简单的HashMap C语言实现cheungmine 用C语言实现一个简单实用的hashmap,具有一定的实际意义。尤其我们不想使用STL里面的map类的时候。我实现的这个hashmap,用来做key---value的映射,key必须是有效的字符串,valu转载 2012-02-18 21:13:36 · 617 阅读 · 0 评论 -
二叉查找树
http://www.cnblogs.com/tanky_woo/archive/2011/05/03/2035160.htmlhttp://zh.wikipedia.org/zh-cn/%E4%BA%8C%E5%8F%89%E6%9F%A5%E6%89%BE%E6%A0%91http://my.opera.com/IloveLunamaria/blog/pingheng转载 2012-03-03 09:49:22 · 356 阅读 · 0 评论 -
归并排序求逆序数
题目:给你N个数组成的序列,求这个序列的逆序数一共有多少个。这个序列个数不超过100000.解题思路:很经典的一个问题,解决方法有两种:第一种方法是归并排序,第二种方法是树状数组。如果我们要枚举的话,复杂度为o(n*n),铁定TLE,所以要考虑更高效的算法。归并操作中,当取到右边集合的第i个元素时,左边集合中元素的个数就是这个元素的逆序数,以此类推,把右边集合全部的逆序数求出来,求原创 2012-03-03 20:07:09 · 992 阅读 · 0 评论 -
快速排序
#include#include#includeusing namespace std;#define N 15void print(int a[],int n){ int i=1; while(i<=N) { cout<<a[i]<<" "; i++; } cout<<endl;}void s_swap(int &a,int &b){ int t=a原创 2012-03-05 16:02:03 · 339 阅读 · 0 评论 -
归并排序
#include #include #include #include #include using namespace std; #define N 15 #define NIL 0x0ffffffe int sum=0; void merge(int a[],int l,int m,int r) { int k=0,b原创 2012-03-04 10:17:10 · 359 阅读 · 0 评论 -
heap排序
#include#include#includeusing namespace std;#define LEFT(i) 2*(i)#define RIGHT(i) 2*(i)+1void h_swap(int &a,int &b){ int t=a; a=b; b=t;}void max_heapfy(int a[],int i,int size){ int ma原创 2012-03-05 14:52:53 · 577 阅读 · 0 评论 -
heap实现的最大优先队列
#include#include#includeusing namespace std;#define LEFT(i) 2*(i)#define RIGHT(i) 2*(i)+1#define PARENT(i) (i)/2int size = 15;void h_swap(int &a,int &b){ int t=a; a=b; b=t;}void max_原创 2012-03-05 15:18:54 · 616 阅读 · 0 评论 -
PKU 1026
题意: 给你长度n的一组序列a[i] 然后k操作次数 再给你一组字符串 字符串长度不足n的后面补零 操作:把字符在i位置的放到a[i]上 如此操作k次方法: 直接模拟肯定TLE 求字符串整体周期T k=k%T k还是很大 超时 求每个字符串的周期 T[i] 然后 k=k%T[i]#inc转载 2012-03-04 17:48:59 · 704 阅读 · 0 评论 -
字典树
#include#include#includeusing namespace std;const int kind=26;struct Treenode{ int count; Treenode *next[kind]; Treenode() { count=1;转载 2012-03-04 18:03:38 · 420 阅读 · 0 评论 -
BST(binary search tree)
#include #include#includeusing namespace std;typedef struct node *link;struct node{ int value; link l; link r; int count;};static link head,z;link NEW(int value,link l,link r,int count)原创 2012-03-07 14:55:34 · 431 阅读 · 0 评论 -
hash表理论
最近我在做一个项目,其中要用到一个数据结构——Hash Table(哈希表),以前只有理论知识,现在实却发现很不简单,所以写下来和大家共分享。我们知道,哈希表是一个固定大小的数组,数组的每个元素是一个链表(单向或双向)的头指针。如果Key一样,则在一起,如果Key不一样,则不在一起。哈希表的查询是飞快的。因为它不需要从头搜索,它利用Key的“哈希算法”直接定位,查找非常快,各种数据库中的数转载 2012-03-16 15:39:15 · 476 阅读 · 0 评论 -
二叉树的建立删除及三种遍历实现
二叉树的建立、删除及三种遍历的C++实现教材上的Tree类写法太累赘,不实用,将树节点直接写成结构体即可要理解结点的含义以及根结点的重要意义[cpp] view plaincopy#include #include //用CPP文件编写,否则编译出错,需要加struct且delete不识别 struct转载 2012-08-24 12:06:45 · 570 阅读 · 0 评论