数据结构
文章平均质量分 81
dmm19930914
这个作者很懒,什么都没留下…
展开
-
线段树
线段树是描述单个或若干区间并的树形结构,属于平衡树的一种(平衡数)。使用线段树要求知道所描述的区间端点可能取到的值。线段树在一些acm题目中经常见到,这种数据结构主要应用在计算几何和地理信息系统中。下图就为一个线段树:(注:可能你见过线段树的不同表示方式,但是都大同小异,根据自己的需要来建就行。)原创 2014-10-23 10:38:13 · 344 阅读 · 0 评论 -
无向图_深度优先遍历
[练习]输入边构成无向图,求以顶点0为起点的深度优先遍历序列。 第一行为两个整数n、e,表示图顶点数和边数。以下e行每行两个整数,表示一条边的起点、终点,保证不重复、不失败。1≤n≤20,0≤e≤190,有多组测试数据)Output前面n行输出无向图的邻接矩阵,最后一行输出以顶点0为起点的深度优先遍历序列,对于任一起点,首先遍历的是终点序号最小的、尚未被访问的一条边。每个序号后输出一个原创 2014-11-02 19:36:44 · 3342 阅读 · 0 评论 -
(C语言版)链表(二)——实现单向循环链表创建、插入、删除、释放内存等简单操作
昨天写了单向链表的代码,今天上午把单向循环链表的程序给敲完了。链表的相关操作一样的,包含链表的创建、判断链表是否为空、计算链表长度、向链表中插入节点、从链表中删除节点、删除整个链表释放内存。如果单向链表理解了,那单向循环链表也就不难了。单向循环链表如下图所示:看图可以知道,单向循环链表和单向链表差不多,只不过是最后的尾节点指向的不是空,而是指向头节点。理解这一点很重要,转载 2015-02-16 12:50:24 · 10226 阅读 · 0 评论 -
(C语言版)链表(一)——实现单向链表创建、插入、删除等简单操作(包含个人理解说明及注释,新手跟着写代码)
我学习了几天数据结构,今天下午自己写了一个单向链表的程序。我也是新手,所以刚开始学习数据结构的菜鸟们(有大牛们能屈尊看一看,也是我的荣幸)可以和我一起共同学习、讨论,当然也很高兴能指出我的错误,因为这是我们一起成长的过程。本代码包含我在写程序时的一些个人理解的说明和一些注释(如果那里说错了,望大家来指正),下面就进入正题了。首先,这是个单向链表的代码,下面是我找的一张单向链表的示意图。转载 2015-02-16 12:47:59 · 9022 阅读 · 3 评论 -
一步一步理解线段树
一 概述线段树,类似区间树,是一个完全二叉树,它在各个节点保存一条线段(数组中的一段子数组),主要用于高效解决连续区间的动态查询问题,由于二叉结构的特性,它基本能保持每个操作的复杂度为O(logn)。线段树的每个节点表示一个区间,子节点则分别表示父节点的左右半区间,例如父亲的区间是[a,b],那么(c=(a+b)/2)左儿子的区间是[a,c],右儿子的区间是[c+1,b]。转载 2015-02-25 18:43:26 · 363 阅读 · 0 评论 -
(C语言版)链表(四)——实现双向循环链表创建、插入、删除、释放内存等简单操作
双向循环链表是基于双向链表的基础上实现的,和双向链表的操作差不多,唯一的区别就是它是个循环的链表,通过每个节点的两个指针把它们扣在一起组成一个环状。所以呢,每个节点都有前驱节点和后继节点(包括头节点和尾节点)这是和双向链表不同的地方。我们看下双向循环链表的示意图(我在网上找了张图片,自己画的实在难看,有时间真的要去学下怎么画图了,然后可以写出更好的博客):在程序的编写方面呢,双向循转载 2015-02-16 12:54:01 · 1124 阅读 · 0 评论 -
(C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作
上午写了下单向循环链表的程序,今天下午我把双向链表的程序写完了。其实双向链表和单向链表也是有很多相似的地方的,听名字可以猜到,每个节点都包含两个指针,一个指针指向上一个节点,一个指针指向下一个节点。这里有两个特殊的地方,第一就是头节点的一个指针指向NULL空指针(没有前驱节点),第二就是尾节点的一个指针指向NULL指针(没有后继节点)。我们可以看下双向链表的示意图(自己画的比较难看):转载 2015-02-16 12:51:57 · 1296 阅读 · 0 评论