自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 资源 (1)
  • 收藏
  • 关注

原创 看数据结构写代码(32) 赫夫曼树编码以及译码

杂谈:最近有点慵懒,不好不好。好几天都没写代码,原本准备上星期完结 树 这一章节的。现在 又耽误了。哎。要抓紧时间啊。下面直接上代码:可以到我的网盘下载源代码,或者 直接拷贝下面的源代码 运行// HuffmanTree.cpp : 定义控制台应用程序的入口点。//哈弗曼编码,译码#include "stdafx.h"#include #include enum E_

2015-03-31 14:54:08 1251

原创 看数据结构写代码(31)树的二叉链表的实现

首先向大家推荐一个 很棒的 介绍 树,二叉树,森林之间转换的博客:点击打开链接树的二叉链表 和 二叉树的 二叉链表 在存储结构上 是一致的,但是 具体 含义 不同; 树节点的 两个指针 指向 第一个孩子节点 和 右兄弟 节点,而 二叉链表指向 左,右子树。这就表示了 他们的操作 既有相同的地方,又有不同的地方。例如 树的 先序遍历,销毁子树,求树的长度 和 二叉树的 操作 是一样的。v

2015-03-27 16:03:13 853

原创 看数据结构写代码(30) 树的双亲孩子表示法的实现

树的 实现 方法 有三种:1.双亲 表示法  2. 孩子 表示 方法 3 结合 双亲 孩子 表示法 4. 二叉链表法其中 前三种  都是 顺序 表示法, 都是 用 一组 顺序的 内存 空间 来表示 树。其中 在每个节点 上 加上 双亲 索引 位置的 叫做 双亲 表示法,在 每个节点上 加上 一个 孩子 链表的叫做 孩子 表示法。 这个链表 存储着  这个节点的 所有 子树 根 位置的 索引。把

2015-03-26 16:52:11 3972

原创 看数据结构写代码(29) 树的双亲表示法

直接上代码:// ParentTree.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include "queue.h"#include "stack.h"#include #define TREE_INIT_SIZE 100//树的初识空间#define TREE_ADD_SIZE 20 //当空间不足时,增加

2015-03-26 14:54:49 682

原创 c/c++ 内存常见错误

1.对 空指针 进行 赋值.测试用例:int _tmain(int argc, _TCHAR* argv[]){ char * s = NULL; *s = 20; return 0;}在非debug环节下,程序会崩溃,然后 你 点调试程序,会进入debug模式。 断点会指在 *s = 20 这一行上,然后  弹出 一个信息 说明 :写入位置 0x00000000 时发生访问

2015-03-26 14:11:29 585

原创 看数据结构写代码(28) 线索二叉链表的实现

要说 线索二叉链表,不得 不说一说 二叉链表的遍历。二叉链表的 遍历 其实 就是 将 树型结构 转换 成 一种 线性结构。不过 这种 节点 前驱 后继的关系,只能 在 遍历的时候 动态 获得。拿有没有一种方法 可以 保存 这种 前驱 后继的关系呢? 总的来看 有 两种方法:1. 将二叉链表 加上 节点 加上 前驱 ,后继的 指针2. 一个n个节点的 二叉树,必定有 n+1 个空链域。(n个

2015-03-25 23:29:15 1097

原创 看数据结构写代码(27) 三叉链表的实现

源代码网盘地址:点击打开链接三叉 链表 比 二叉链表多了 一个指向 父节点 的指针,这在 需要 找 父亲,祖先 ,求任意两个节点的最近祖先等算法的 实现 ,很有帮助。所以当算法中 有大量这样的操作就需要把数据结构定义为三叉链表。 当 算法中 经常需要 遍历 或者 查找 节点 在 遍历过程中的 前驱 后继 指针,就需要 把数据结构 定义为 线索 二叉链表。其实 写 数据结构 不难,但

2015-03-25 14:09:29 2350

原创 看数据结构写代码(26) 求二叉链表 任意 两个节点的 最近祖先

杂谈:在网上 看到 这个 题目,忍不住  自己 操作了 一把。 呵呵。兴趣 是 最好的 老师。网上的 解决方案 五花八门,其中 比较 好 理解的 思路 就是 求出 两个节点 的 所有祖先。然后 比较 祖先,求出 最近祖先。下面 的 两个方案 都是 这套 思路,但是 在 求 两个节点的所有祖先 这个问题上 不同;第一种 方案 是 递归 求出 节点的 祖先。 第二种 是 后序遍历查

2015-03-25 12:20:55 750

原创 看数据结构写代码(25) 二叉链表 求 宽度,交换左右子树,判断完全二叉树,求节点祖先

二叉树的宽度是:每一层 节点数的最大值。思路:根据层序遍历,求出 每一层的节点数,//纠正 求 二叉树的 宽度问题,//二叉树的宽度 为 各层次 节点数的 最大值//算法思路,层序 遍历,int treeWidth(Tree tree){ if (tree != NULL) { int curWidth = 1;//当前层的 节点数 int nextWidth = 0;

2015-03-24 21:10:07 1341

原创 看数据结构写代码(24) 二叉链表的递归遍历 和 非递归遍历 算法 总结

二叉链表的 遍历 是 二叉链表 各种 操作的 基础,例如 :创建 二叉树;求树的 长度;求树的 叶子节点数;求 节点的 层 数;求 树的 深度,宽度 等等。总之 不掌握 遍历,就没有 掌握 二叉树;二叉链表的 遍历 根据 根节点的访问顺序有:先(根节点)序,中(根节点)序,后(根节点)序, 和 层序;算法思路 有两类:1. 递归 算法,算法 清晰,容易 证明算法的正确性,但是 效率

2015-03-24 08:58:24 1242

原创 看数据结构写代码(23) 二叉链表的实现

二叉链表的实现 大部分操作 都在 递归算法的基础上 进行的,部分非递归算法,借用了 链栈 和 链队列。可以从以前的文章中 摘取。树的大部分操作 都可以在下面 找到下面 上代码:// binaryTree.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include "stack.h"#include "queue.h"

2015-03-23 10:41:43 725

原创 看数据结构写代码(22) 二叉树的顺序存储方式

二叉树 是 一个 节点 的度最多是2 ,并且区分 左右子树的 特殊树。二叉树 有一些特性,这些特性 是 写 二叉树顺序表的 重要依据,所以先介绍一下:1.k层的二叉树,最多有  2 的 k次方 -1个节点,如果 节点数达到最大值,称为 满二叉树。2.第k层的二叉树,最多 有2的 k-1 次方个节点3.度为0的节点叫做叶子节点 n0,度为2的节点 n2,    no

2015-03-20 12:03:05 2680 1

原创 C 里 求 log2 N 的问题

今天 在 写 二叉树 的 顺序存储方式时,遇到了 一个数学问题。 已知,节点数 为 n 的 完全 二叉树的 深度 k 为  : k = log2 N + 1,log2N向下取整。查了 一下 C 里 math.h 只有 log 和 log10 的函数。log 是 以 e 为底数, log10 是以 10 为底数,那怎么 求 以2为底的树呢? 百度了 一下 才 知道   log2n = In(

2015-03-19 11:34:25 8447

原创 看数据结构写代码(21) 稀疏矩阵(十字链表方式)

写完 这个例子,花费了 我不少时间,大部分时间 花费在 调试 内存问题上。例如在销毁十字链表时,多次释放节点空间,造成 _CrtIsValidHeapPointer(pUserData) 异常。当使用malloc 分配 一个 空间时,会将这个空间的起始地址和长度 加到一个链表中去。free(p)的时候 ,会从 链表里 查找 是否 有 这个地址空间,找到了就将这个节点从链表中删除。_CrtI

2015-03-18 15:30:38 1357

原创 看数据结构写代码(20)稀疏矩阵(顺序存储方式)

当矩阵 的 有用信息非常少时,我们考虑将矩阵压缩存储。这就涉及到 特殊矩阵 和 稀疏矩阵。特殊矩阵 指的是 有一定规律的 矩阵,这个矩阵 我们 只存储 部分 有用信息,其余的信息 可以通过 公式 转换 求得。例如 对称矩阵,我们按行存储主对角线以下(包括主对角线)的元素,其余元素 我们可以通过 下面的公式求得。稀疏矩阵,指的事没有一定规律的矩阵,并且  有用信息总数/矩阵总数 小于等于 0

2015-03-17 14:12:45 1293

原创 看数据结构写代码(19) 数组的实现

数组是 一种 使用广泛 的数据结构,任何编程语言都有数组。其本质上 是 线性表,一维数组 是 一个线性表,多维数组是多组 线性表。 其 便利性 就在于 查找 和 赋值 方便。所以 就没必要 用 链式存储方式。下面 给出 数组的实现代码:// Array.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include #de

2015-03-13 11:53:00 650

原创 看数据结构写代码(18) KMP算法

求 子串 的 位置 有两种方法,一种是暴力搜索法,另一种就是KMP 算法。他们的效率 在一般的情况下,区别不大。但是在 串的 变化 范围特别小的情况下,例如 只有 0 和 1,KMP 的时间复杂度是 O(m+n),而暴力搜索法定时间 复杂度 是 O(m*n),(m,n分别指 子串 和 母串的 长度)暴力搜索非常简单,下面给出代码:// KMP.cpp : 定义控制台应用程序的入口点。//

2015-03-12 10:37:20 1203

原创 看数据结构写代码(17) 串的堆式存储

// seqString.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include enum E_State{ E_State_Error = 0, E_State_Ok,};struct String{ char * base; int len;//串长度};void StringInit(String * s){

2015-03-09 17:19:40 604

原创 看数据结构写代码(16)顺序队列的实现(循环队列)

循环队列的基本结构如下:front 属性 表示 队头,rear 属性表示 队尾。在队空时 :q.rear 和 q.front 都为0 ,其余时刻q.rear 指向 队尾的后继节点,q.front指向 队头.当在队尾插入元素时,q.rear + 1 ,在删除 队头元素时 ,q.front + 1,这样的操作 会造成 “假溢出”问题。图(d) 就是一种 假溢出 问题,q.rea

2015-03-06 14:07:28 975

原创 看数据结构写代码(15)链式队列的实现(总结篇)

队列 和 栈 是 一种 受限制的 线性表。所以 他们的 实现方式 都 相差 无几。之前有过  链栈 和 链式线性表 的 实现经验,自然 写 链队 ,也毫无问题。下面详细讲解每一段代码 的技术要点下面是队列节点的数据结构struct QueueNode{ ElementType data; QueueNode * next;};//生成一个节点QueueNode *

2015-03-06 10:46:46 836

原创 定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句 以及 不用 第三个数,交换 a,b的值

无意中 一篇博文,介绍这个问题,引起了我的兴趣。博文中 介绍了 三种方法:1.#define max(a,b) ((((a)-(b))&(12.#define max(a,b) ((((long)((a)-(b)))&0x80000000)?(b):(a))3#define max(a,b) (((abs((a)-(b)))==((a)-(b)))?(a):(b

2015-03-05 13:48:57 1302

原创 用递归实现 hanoi塔

// hanoi.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"void move(int n,char moveStart,char moveEnd){ printf("move %d from %c to %c\n",n,moveStart,moveEnd);}void hanoi(int n,char moveStart,char mov

2015-03-05 11:19:56 800

原创 看数据结构写代码(13)栈的应用(四) 迷宫求解

这是一个 用 穷举法 解 迷宫问题 的一个示例,但在 效率 和 解的 最短路径上 就稍显不足了。这 两个问题,留在 以后 空闲 时刻 解答。欢迎指出代码不足下面上代码:// Maze.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include struct Postion{ int x; int y;};

2015-03-04 10:19:41 761

原创 看数据结构写代码(12)栈的应用(三) 行编辑器

所写范例为 看 严蔚敏《数据结构-c语言版》 3.2.3 小节 《行编辑程序》写的代码下面直接上代码:

2015-03-02 18:44:33 698

原创 看数据结构写代码(11)栈的应用(二) 括号匹配的检查

下面代码 可以检查  “() []”   括号不匹配的问题。这个代码 是在 第9篇 linkStack 的基础上开发的。 在开发中,遇到了3个问题。一是发现了 linkStack 在 clearStack 时 没有将头指针的后继指向NULL问题。二是 对 char * a  与 char a[] 认识不够清楚三是 对 scanf 认识不够清楚 , 当 输入 加入一些空格时,造成 我

2015-03-02 17:04:10 801

原创 看数据结构写代码(10)栈的应用(一) 数值转换

首先 修正上一节 stackPop 代码的错误E_State stackPop(linkStack * stack,elelmentType * data){ if (stack->top != stack->bottom) { //首先指向第一个元素. lStackNode * next = stack->bottom; *data = stack->top->data;

2015-03-02 14:39:03 862

原创 看数据结构写代码(9)链栈的实现

在写链栈的时候 和 顺序栈一样 犯了两个错误: 一个是 在 入栈 和 进栈顶时候 忘记 操作 linkstack.len 了,另一个是 在写 stackClear 的时候 犯了一个 低级的内存错误。这两个问题 都是 粗心造成的。希望 引以为戒。上代码:// LinkStack.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#includ

2015-03-02 13:42:07 811

原创 看数据结构写代码(8)顺序栈的实现

欢迎指出 代码 不足之处在写顺序栈的时候 犯了两个错误,:一个是 对栈的 认识不够清楚,栈顶指针的下一个位置为栈顶元素; 另一个是粗心,在用 realloc 分配内存的时候,忽略了元素本身的大小,只写了 元素的个数。 希望引以为戒。上代码:// SqStack.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include

2015-03-01 17:42:31 552

数据结构源代码 严蔚敏版本的

严蔚敏数据结构 书上的源代码 都有!MSDN只能传一个文件,蛋疼的很!!!!!!!!!!!!!!!!!!!!!

2011-03-26

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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