数据结构
文章平均质量分 82
阿鲁拔
宁静致远
展开
-
重建二叉树
引言这两天偶然看到一道题,应该是《剑指offer》上的,原题如下:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。解题思路在解题之前我们需要知道前序,中序,后序是怎么遍历的,这原创 2017-07-02 21:43:13 · 383 阅读 · 0 评论 -
线性结构——单链表
线性表的顺序存储结构是逻辑地址和物理地址都连续,而链式存储结构是逻辑地址连续,但物理地址不一定连续,相比顺序存储结构,它不能随机存取,但在插入和删除操作时不需要移动元素,大大提高了插入和删除元素的效率。本文主要讲一下单链表。单链表的逆序输出单链表的逆序输出不同于反转单链表,逆序输出并不会改变单链表本身的顺序,所以直接使用递归实现:/* * 单链表的逆序输出 */void Prin原创 2017-07-11 15:52:56 · 424 阅读 · 0 评论 -
线性结构——栈
栈是只能在表尾进行插入或删除操作的线性表,栈既然也是线性表,那么它也有顺序存储结构和链式存储结构两种表示方法,一般它被表示为顺序存储结构。十进制正整数转换为二进制/* * 十进制正整数转换为二进制 */void convert(SqStack S, int number){ int temp; while(number) { temp = n原创 2017-07-15 17:00:21 · 373 阅读 · 0 评论 -
线性结构——队列
前言:基本所有的代码都是在Linux环境下运行,若遇到文件类型问题,在Linux系统下可以使用dos2unix,unix2dos命令改变,在Windows系统下可以使用UltraEdit文本编辑器改变。两个队列实现栈一般的实现方法有两种,其一,只维护一个队列,另一个队列作为临时存放队列;其二,维护两个队列,需要用判断来分辨队列是否为空,避免了多余的进、出队列操作。首先来说说第一种方法:原创 2017-07-16 09:28:15 · 299 阅读 · 0 评论 -
非线性结构——树
二叉树的深度求解二叉树的深度比较简单,只要分别计算出左、右子树的深度,然后取较大者加1即为二叉树的深度。直接上代码:/* * 二叉树的深度 */int PostTreeDepth(BiTree root){ int leftheight, rightheight, max; if(root != NULL) { leftheight = PostTreeDepth(原创 2017-07-22 10:17:36 · 335 阅读 · 0 评论 -
非线性结构——图
图的表示表示图的方法通常有矩阵,邻接表,十字链表和邻接多重表。其中十字链表是有向图的一种链式存储结构,邻接多重表是无向图的一种链式存储结构。本篇文章主要就以邻接表为例,如下图:图的遍历通常图的遍历有两种:深度优先和广度优先。深度优先遍历是树的先根遍历的推广,它的基本思想是:从图G的某个顶点开始,选择一个与起始顶点相邻且没被访问过的顶点Vi进行访问,再从Vi出原创 2017-07-30 20:48:56 · 2792 阅读 · 0 评论 -
散列查找
简要步骤若找到元素与其在数据集中的位置存在的某种对应关系,那么就能通过这种关系找到数据的位置。这种对应关系被称为散列函数(哈希函数),通过这种函数简历的表被称为散列表(哈希表)。在构建哈希表的过程中也可能会产生冲突(也就是产生了相同的哈希值),所以解决冲突也是构建哈希表重要的组成部分。构造哈希表1. 直接定址法根据哈希函数f(key) = a * key + b建立原创 2017-08-13 09:31:03 · 487 阅读 · 0 评论 -
二分查找
简要步骤二分查找也被称为折半查找,它是比顺序查找效率高的一种查找方法,但是它只适用于有序数据序列。我们以升序序列为例,首先,将序列中间位置的元素与查找元素比较,如果相等则查找成功;若不相等,就从中间位置将序列分为左、右两个子序列,当中间元素大于查找元素时,则在左子序列中继续二分查找,否则在右子序列中继续二分查找。重复上述步骤直到中间元素与查找元素相等,则查找成功;若出现已经无法分为左、原创 2017-08-13 09:21:52 · 295 阅读 · 0 评论