数据结构
文章平均质量分 79
yingmuliuchuan
这个作者很懒,什么都没留下…
展开
-
数据结构入门学习系列-9(二叉树遍历的算法实现)
二叉树是一种非常重要的数据结构,很多其他数据机构都是基于二叉树的基础演变过来的。二叉树有前、中、后三种遍历方式,因为树的本身就是用递归定义的,因此采用递归的方法实现三种遍历,不仅代码简洁且容易理解,但其开销也比较大,而若采用非递归方法实现三种遍历,则要用栈来模拟实现(递归也是用栈实现的)。下面先简要介绍三种遍历方式的递归实现,再详细介绍三种遍历方式的非递归实现。一、三种遍历方式转载 2017-11-08 09:49:48 · 259 阅读 · 0 评论 -
数据结构入门学习系列-8(栈的经典算法用例)
栈的经典使用:1.进制转换十进制向其他进制转换,涉及到一个基本算法,除模取余。及如下图所示:假如从十进制n向八进制o转换:n n(div)8 n(mod)8964 120 4120 15原创 2017-11-03 15:14:34 · 436 阅读 · 0 评论 -
数据结构入门学习系列-7(栈的结构以及存储方式和算法)
本章来讲一下线性表的特殊结构之一:栈栈是只能在表的一段进行插入和删除的线性结构,所有具有后进先出的特点。栈顶:top端,允许插入删除,表尾。栈尾:bottom端,固定端,表头。如下图所示: 栈结构分为三种存储方式:动态数组存储,静态数组存储,链表存储动态一维数组方式如下图:1.用bottom原创 2017-11-03 09:42:08 · 1112 阅读 · 0 评论 -
数据结构入门学习系列-6(链表合并与多项式合并算法)
由之前对单链表的熟悉,本文章结合一个经典例子总结一下,即合并有序的单链表,如图所示:将La,Lb合并生成新的单链表Lc。基本思路如下:将La赋值给Lc然后对比La的第一个元素和Lb的第一个元素,对比之后,开始钩链的过程。最终对比完成之后,生成Lc链表,删除Lb链表。同时记得在出现相同值得情况下,删掉一个元素,释放内存。先看一下链接了两个链表第一个元素的情况:这个时候La原创 2017-10-28 16:16:03 · 994 阅读 · 0 评论 -
数据结构入门学习系列-5(链表的基本操作算法)
链表的基本操作算法: 链表的创建,分为两种,一种是队尾插入,一种是队头插入: typedef struct LNode { ElemType data; struct LNode *next;} LNode;//创建链表(头插入法)LNode *create_LinkList_Head(){ int data; LNode *head,原创 2017-10-23 19:09:36 · 598 阅读 · 0 评论 -
数据结构入门学习系列-4(线性表的链式存储)
上一篇讲了线性表中的线性存储,改文章学习一下线性表的链式存储结构。 链式存储:一组任意的存储单元来存储数据,而不必须是连续的存储的单元。因此为了正确表示数据间的逻辑关系,除了数据域域外,我们还需要一个指针域。 当一个节点只包含一个指针域的时候,该指针指向数据的后继节点,我们称为单链表。如下图所示: data*next原创 2017-10-23 10:47:39 · 207 阅读 · 0 评论 -
数据结构入门学习系列-3(线性表的顺序存储)
空间复杂度:算法写成程序后,运行时占用的电脑内存空间。S(n)=O(f(n)) 这个比较好理解,比如一维数组a[n]占用空间复杂度是:S(n)=O(n), 二维数组a[n][m]占用空间复杂度是:S(n)=O(n*m) 线性结构中的线性表:存在唯一的第一个元素和最后一个元素。除了这两个特殊数据之外,中间元素都有原创 2017-10-19 17:05:36 · 314 阅读 · 0 评论 -
数据结构入门学习系列-2(算法的时间复杂度)
算法: 有穷性 确定性 可行性 输入(可选) 输出算法效率: 事后统计:计算机上的运行时间 事前分析:求出该算法一个时间界限函数 算法中基本操作重复执行的次数是问题规模n的某个函数,T(n)=O(f(n)),时间复杂度。用最深层循环内的语句中原操作的执行频度。 如果T(n) 和 f(n) 是n 的函数,当n →∞ 时,有T(n) /原创 2017-10-17 17:29:26 · 451 阅读 · 0 评论 -
数据结构入门学习系列-1(基本数据结构)
在做项目的经验中发现数据结构与算法基本决定了一个程序员所能达到的上限,因为最新发现技术上遭遇瓶颈,无法有效提升最终是由于数据结构与算法的限制。所以想从头学习一遍数据结构与算法,该系列可以作为入门级教程。新手参考,大牛就不用浪费时间看了。 首先数据结构包含以下几种基本关系(逻辑结构): 集合--数据同属于一个集合 线性结构--一对一的关系 树形结构--一对多的原创 2017-10-17 10:47:08 · 247 阅读 · 0 评论 -
数据结构入门学习系列-10(霍夫曼树)
什么是哈夫曼树呢?哈夫曼树是一种带权路径长度最短的二叉树,也称为最优二叉树。下面用一幅图来说明。它们的带权路径长度分别为:图a: WPL=5*2+7*2+2*2+13*2=54图b: WPL=5*3+2*3+7*2+13*1=48可见,图b的带权路径长度较小,我们可以证明图b就是哈夫曼树(也称为最优二叉树)。一般可以按下面步骤构建:1,将所有左,右子树都转载 2017-11-09 14:08:46 · 267 阅读 · 0 评论 -
使用typedef定义struct的作用
typedef是类型定义的意思。typedef struct 是为了使用这个结构体方便。具体区别在于:若struct node {}这样来定义结构体的话。在申请node 的变量时,需要这样写,struct node n;若用typedef,可以这样写,typedef struct node{}NODE; 。在申请变量时就可以这样写,NODE n;区别就在于使用时,是否可以省去str转载 2017-10-31 16:32:43 · 2419 阅读 · 1 评论 -
红黑树
前言 红黑树,对不少人来说是个比较头疼的名字,在网上搜资料也很少有讲清楚其演变来源的,多数一上来就给你来五条定义,红啊黑啊与根节点距离相等之类的,然后就开始进行旋转、插入、删除这些操作。一通操作下来,连红色和黑色怎么来的,是什么含义,有什么作用都云里雾里的,能搞清楚就怪了。 本文介绍红黑树,暂时不涉及任何代码,只是帮助你理解红黑树的演变来源,树结构中红黑色具体含义,保证你理解转载 2017-11-21 19:07:44 · 126 阅读 · 0 评论