![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构和算法
l_xm
熟悉Python后台开发、Python爬虫、Android开发
展开
-
[python]Huffman Encoding哈夫曼编码
#Huffman Encoding#Tree-Node Typeclass Node: def __init__(self,freq): self.left = None self.right = None self.father = None self.freq = freq def isLeft(self):原创 2015-03-25 19:13:42 · 8146 阅读 · 2 评论 -
快速排序
快速排序的重点在于如何分区,首先从数组中选取一个基准值,然后把小于基准值的元素放到左边,大于基准值的元素放到右边。如下图所示 c实现#include <stdio.h>int partition(int L[],int lb,int ub){ int find,down,up,tmp; find = L[lb]; down = lb; up = ub;原创 2015-03-27 19:20:33 · 376 阅读 · 0 评论 -
[pyhton]二叉树排序
biTree.pyimport Queueclass biTreeNode(object): '''二叉树节点类,只有left,right,data属性''' def __init__(self,data=0): self.left = None self.right = None self.data = dataclass biTr原创 2015-03-28 19:46:12 · 495 阅读 · 0 评论 -
约瑟夫问题
##约瑟夫问题import randomdef josephProblem(L,N): #start = random.choice(range(len(L))) start = 2 print 'start:',L[start],L current = start count = 1 while len(L) > 1: print原创 2015-03-22 15:44:16 · 361 阅读 · 0 评论 -
[pyhton]桶排序
#coding:utf-8#bucketSortdef bucketSort(L,length): buckets = [[] for i in range(10)] for i in range(length): for item in L: num = item / (10 ** i) % 10 (buckets[原创 2015-04-02 23:18:08 · 390 阅读 · 0 评论 -
[pyhton]选择排序
#选择排序def selectSort(L,key): Len = len(L) for i in range(Len-1,0,-1): large = key(L[0]) index = 0 for j in range(1,i+1): if key(L[j]) > large:原创 2015-03-31 21:05:43 · 452 阅读 · 0 评论 -
[python]插入排序和希尔排序
插入排序算法描述:插入排序是一种通过将记录插入到已排序好的记录当中的方法。假设要将第i个元素插入到前i-1个已排序好的元素中:首先设置一个变量keep_value保存L[i]的值依次将keep_value和Lj进行比较,如果L[k]>keep_value,那么执行L[k+1]=L[K];否则,停止比较,执行L[k+1]=keep_value。完成插入如果前面所有元素都大于keep_value,原创 2015-04-01 19:03:47 · 410 阅读 · 0 评论 -
[python]归并排序
# coding:utf8####归并排序def merge(l, i, m, j): k1 = i k2 = m + 1 tmp = [] while k1 <= m and k2 <= j: if l[k1] < l[k2]: tmp.append(l[k1]) k1 = k1 + 1原创 2015-04-01 19:47:28 · 423 阅读 · 0 评论 -
计数排序
def counting_sort(L, start, end): #用于计数,start表示L中最小的元素,end表示L中最大的元素 len_start_to_end = end - start + 1 c = [0 for i in range(len_start_to_end)] N = len(L) #统计每个元素出现的次数 for eleme原创 2015-04-19 21:50:50 · 405 阅读 · 0 评论 -
float,double数据类型在内存中的存储方式
floatfloat在内存中用四个byte表示 符号位 sign 指数位 exponent 尾数 mantissa 1 bit 8 bits 23 bits符号位:1正0负 指数位:范围从0~255,但实际的指数等于这里的指数减去127,所以真正的指数范围从-127~128。 尾数:23bit的尾数实际上表示24bit的数据,因为所有二进制小数都可以表示成1.xxxx x原创 2015-04-12 20:18:40 · 1318 阅读 · 0 评论 -
算法复杂度分析--递归树和主方法简介
递归树以归并排序为例,T(n)=2T(n/2) + cn 待补充,具体分析见《算法导论》主方法原创 2015-04-15 21:05:07 · 547 阅读 · 0 评论 -
[C]冒泡排序
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl原创 2015-03-27 17:39:36 · 417 阅读 · 0 评论 -
[Python]中缀表达式转前缀表达式
#判断运算符的优先级def opOrder(op1,op2): order_dic = {'*':4,'$':5,'/':4,'+':3,'-':3} if op1 == '(' or op2 == '(': return False elif op2 == ')': return True else: if orde原创 2015-03-20 19:05:06 · 2634 阅读 · 0 评论 -
[C]堆栈,泛型
stack.htypedef struct{void * elems;int elemSize;int logicLen;int allocLen;}stack;stack.c#include <stdio.h>#include "stack.h"#include <assert.h>#include <stdlib.h>#include <string.h>void stack原创 2015-03-19 18:53:00 · 479 阅读 · 0 评论 -
[python]将中缀表达式(infix)转换为后缀表达式(postfix)
将中缀表达式(infix)转换为后缀表达式(postfix)算法描述第一种情况,表达式不含括号。假设存在一个函数prcd(op1,op2),其中op1和op2是两个操作符(在中缀表达式中,op1在op2的左边),如果op1的优先级高于或等于op2,函数返回True,否则返回False。例如:prcd('\*','+') --> Trueprcd('+','-') --> Trueprcd('\*'原创 2015-03-18 21:39:48 · 4039 阅读 · 0 评论 -
对分查找
对于一个排好序的数组,可以使用对分查找算法来查找元素。#include <stdio.h>int binarySearch(int a[],int low,int high,int key){ /*a-->待查找数组, low-->下边界, high-->上边界, key-->待查找元素*/ if(low > high){ retu原创 2015-03-19 19:18:19 · 549 阅读 · 0 评论 -
[C]链表
#include <stdio.h>#include <stdlib.h>struct Node{ int data; struct Node * next;};//获取一个节点,返回节点地址struct Node * getNode(int data){ struct Node *node = malloc(sizeof(struct Node)); no原创 2015-03-26 20:51:21 · 485 阅读 · 0 评论 -
[c]二叉树
#include "Queue.c"struct Node{ int data; struct Node * father; struct Node * left; struct Node * right;};struct Node * getNode(data){ struct Node * node = malloc(sizeof(struct Node原创 2015-03-26 21:01:38 · 375 阅读 · 0 评论 -
[c]队列queue
#include <stdlib.h>#include <stdio.h>#include <string.h>struct Queue{ int head; int rear; int allocLength; int elemSize; void * elems;};void InitQueue(struct Queue *q,int len,in原创 2015-03-26 20:55:17 · 489 阅读 · 0 评论 -
用二叉树表示树
在图A-1中,树的根节点是A,它有三个子节点:B、C、D;B有两个子节点E、F;D有一个子节点G。将树转换为二叉树表示,left指向第一个子节点,right指向自己的兄弟节点。因此,可将图A-1中的树转换为图A-2中的二叉树。 另外一个稍复杂的转换关系可看下图。原创 2015-03-26 22:51:42 · 471 阅读 · 0 评论 -
[C]判断一个字符串是不是合格的表达式
#include <stdio.h>#include <ctype.h>#define FALSE 0#define TRUE 1char getSymbol(char *string,int length,int *pos);int isExpr(char * string,int length,int *pos);int isTerm(char *string,int length,原创 2015-03-20 10:57:44 · 647 阅读 · 0 评论 -
欧几里德和stein两种算法求最大公约数
1.欧几里德原理:`gcd(x,y) = gcd(y,x%y)`2.stein原理:`gcd(k*x,k*y) = k*gcd(x,y)`Python实现#欧几里德辗转相除法求最大公约数def euclidGcd(x,y): assert x >= 0 and y >= 0 if y == 0: return x return euclidGcd(y,原创 2015-03-20 13:10:55 · 692 阅读 · 0 评论 -
[python]汉诺塔问题求解
汉诺塔问题:将A塔上的5个圆盘移动到C塔上 可以用递归的思路来求解该问题,为了使问题一般化,假设要移动n个圆盘。根据递归的思路,可以考虑先把上面n-1个圆盘移动到B塔上,然后将最底下的n号圆盘移动到C塔,再将B塔上n-1个圆盘移动到C塔。 Python实现#towers of hanoi 汉诺塔问题def extList(L,length=5): if len(L) == length原创 2015-03-20 15:37:24 · 896 阅读 · 0 评论 -
分治法
分治法一般步骤:分(divide):将大问题分解为一些小问题治(conguer):分别处理(解决)这些小问题合(combine):组合各个小问题处理之后的结果常见的分治法有:归并排序(mergeSort) T(n)=2T(n/2)+Θ(n)T(n) = 2T(n/2) + \Theta(n) 由主方法可知,时间复杂度为Θ(nlog2n)\Theta(nlog_2n)二分搜索(bina原创 2015-04-17 12:52:20 · 435 阅读 · 0 评论