美团一面

1.交换左右子树 void SwapChild(Tree T) { Tree Tmp; if(T != NULL && T->Left == NULL && T->Right == NULL) return; SwapChild(T-&g...

2013-09-27 20:02:24

阅读数:866

评论数:0

寻找最大的K个数

《编程之美》——寻找最大的K个数(P139) 解法一:寻找最大的K个数最容易想到的方法是排序然后找出最大的K个数,在这里快速排序和堆排序都是不错的选择,他们的平均时间复杂度都是O(N*logN)。 堆排序代码如下 #define LeftChild(i) (2*(i)+1) static void...

2013-09-19 18:22:30

阅读数:717

评论数:0

优先队列——左式堆的实现

零路径长度(null path length, NPL),NPL(X)定义为从X到一个没有两个儿子的节点的最短路径的长。因此具有0个或1个儿子的节点的NPL为0,而NPL(NULL) = -1。 左式堆性质是:对于队中的每一个节点X,左儿子的零路径长至少与右儿子的零路径长一样大。左式堆与二叉堆具有...

2013-09-19 14:53:48

阅读数:775

评论数:0

字符串去重C语言实现

字符串去重经常会考的笔试题目,这里列出几种常用的方法 更详细的解释(C++版本)请参考http://hawstein.com/posts/1.3.html 解法一:取第一个字符然后遍历后面所有字符,若有重复的则将后面的字符设置为'\0' //将重复字符设置为'\0' void RemoveDupl...

2013-09-18 21:30:50

阅读数:4188

评论数:0

二叉树非递归遍历C语言实现

二叉树非递归遍历实现——C语言实现 二叉树非递归遍历:前、中、后序三种遍历需要用到栈,层序遍历需要用到队列。首先用c语言实现栈和队列,然后再实现二叉树的非递归遍历 编程环境:Visual Studio 2010 栈的实现stack.:前面有一章写过栈的实现,这里重新贴一下代码 extern str...

2013-09-18 15:05:03

阅读数:1184

评论数:0

2014华为上机题

2014年的华为上机题,给出了自己写的代码,供大家参考 1. 手机电池余量  描述: 自从有了智能手机,时刻都要关心手机的电量。你的任务很简单,用程序打印符号来表示当前手机的电量。 用10行和10列来表示电池的电量,同时在外围加上边框,每一行表示10%的电量。 假设还有60%的电量,则显示如下:...

2013-09-14 20:02:48

阅读数:1129

评论数:0

求二进制中1的个数

2.1 求二进制数中1的个数(编程之美P119) 本文只是将《编程之美》中的代码用C语言写出来,并没有实现书中所有的解法。 解法一  解法二 解法三

2013-09-12 21:02:29

阅读数:601

评论数:0

排序

这里只是列出了常用的几种排序算法例如:冒泡排序、直接插入排序、简单选择排序、希尔排序、堆排序、归并排序、快速排序。下面将给出各种排序算法的基本思想以及实现代码。下面这两个自定义头文件在后面的实现过程中要用到,先给出来 fatal.h定义错误处理#include #include #defin...

2013-09-11 15:04:51

阅读数:749

评论数:0

优先队列(堆)——二叉堆的实现

一般数据结构中的堆指的是二叉堆(Binary heap)。堆是一棵完全二叉树,可用数组来表示。对于数组中任意位置i上的元素,其左儿子在位置2i上,右儿子在左儿子后的单元(2i+1)中,它的父亲在位置[i/2](整数除法)上。 binheap.h函数声明

2013-09-08 19:57:40

阅读数:704

评论数:0

哈希表——开放定址法

上一节讲了利用链表来处理冲突的方法——分离链接法。本节讲另一种处理冲突的方法——开放定址法。开放定址法有三种常用的冲突解决方法:线性探测法、平方探测法、双散列。

2013-09-07 16:23:07

阅读数:944

评论数:0

哈希表——分离链接法

哈希表又称散列表,是根据关键值而直接进行访问的数据结构。哈希表的实现主要是散列函数和解决冲突。散列函数有:直接寻址法、数字分析法、平法取中法、折叠发、随机数法、除留余数法(严蔚敏版数据结构)。处理冲突的方法有:分离链接法(separate chaining)又称链地址法、开放寻址法、再散列法、建立...

2013-09-06 15:45:50

阅读数:2075

评论数:0

平衡二叉树——AVL树的实现

AVL树是最先发明的自平衡二叉查找算法,是平衡二叉树的一种。在AVL中任何节点的两个儿子子树的高度最大差别为1,所以它又被成为高度平衡树。查找、插入和删除在平均和最坏情况下都是O(log n)。增加和删除可能需要通过一次或多次树旋转来平衡这棵树。 假设把AVL树构造过程中需要重新平衡的节点叫做α。...

2013-09-05 10:44:35

阅读数:1612

评论数:0

二叉查找树(Binary Search Tree)的实现

使二叉树成为二叉查找树的性质是,对于树中的每个节点X,它的左子树中所有关键字值小于X的关键字值,而它的右子树中所有关键字值大于X的关键字值。 例如如下图所示的二叉树即为二叉查找树 二叉查找树的声明tree.htypedef int ElementType; #ifndef TREE_H #d...

2013-09-03 14:51:47

阅读数:695

评论数:0

队列的实现

队列的实现 队列实现跟栈相似,有两种实现方式,一种是用链表实现,一种使用数组实现。

2013-09-02 18:07:38

阅读数:545

评论数:0

栈的实现

栈的实现:栈的链式实现、栈的数组实现、O(1)实现FindMin()、双向栈的实现 需要定义几个头文件: fatal.h//实现错误处理#include #include #define FatalError(str) fprintf(stderr, "%s\n", st...

2013-09-01 19:50:26

阅读数:796

评论数:0

单链表应用——La∪Lb或La∩Lb

求两个有序单链表的并集(La∪Lb) List Union(List La, List Lb) { List resultList; Position pa, pb, pResult; assert(La != NULL && Lb != NULL); pa = La-...

2013-09-01 19:25:26

阅读数:746

评论数:0

单链表应用——逆序输出单链表中的元素

上一篇文章主要实现了单链表的基本操作,这篇文章主要讲的是单链表的具体应用 1.单链表的逆序输出 1)递归方式逆序输出链表 #include #include #include #include "mylist.h"//在上一篇中有 void PrintList(List...

2013-09-01 19:18:06

阅读数:797

评论数:0

单链表应用——从无头单链表中删除节点

题目来自《编程之美》P266 “从无头链表中删除节点” 假设有一个没有头指针的单链表。一个指针指向此单链表中间的一个节点(不是第一个,也不是最后一个),请讲该节点删除 解析:由于是单链表并且没有头指针,无法根据当前的节点找到该节点的前驱,这里可采用数组中删除元素的方法即移动元素。将当前节点pCur...

2013-09-01 19:06:23

阅读数:662

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭