数据结构
文章平均质量分 84
介绍数据结构的基础性知识
kayyyuan
这个作者很懒,什么都没留下…
展开
-
一步一步学数据结构之n--n(Prim算法)
在这里说下最小连通网的Prim算法:而Kruskal算法,http://blog.csdn.net/nethanhan/article/details/10050735有介绍,大家可以去看下! Prim算法代码:#include #include /* run this program using the console pauser or add your原创 2013-08-19 02:45:30 · 2775 阅读 · 2 评论 -
一步一步学数据结构之n--n(kruskal算法)
#include //闹了好长时间才闹好,如果有不懂的地方可以留言//里面判断环的地方用到并查集//并查集资料:http://dongxicheng.org/structure/union-find-set/#define ENUM 15//边的数量 #define VNUM 9//顶点的数量 #define MV 0typedef struct _ta原创 2013-08-18 19:16:04 · 2281 阅读 · 2 评论 -
一步一步学数据结构之(动态申请二维数组)
在实现图操作的时候,因为用邻接矩阵法实现,所以就用到二维数组,而在这里,就着重说下怎么样动态申请二维数组,它的原理是:申请完毕后,就类似于在一个一维数组中,每一个元素都为一个指针,而这个指针正好指向一个一维数组(或者说就是这个一维数组的首地址):当然,动态申请二维数组和动态申请二级指针内存是一个道理,其实从动态申请二级指针也可以试着延伸到动态申请三级指针,甚至到n级指针。现在截原创 2013-08-17 13:08:09 · 2174 阅读 · 0 评论 -
一步一步学数据结构之n--n(图遍历--深度优先遍历--非递归实现)
前面已经说了图的深度优先遍历算法,是用递归实现的,而在这里就讲一下用非递归实现,需要借助栈: 算法思想: 1. 栈初始化 2. 输出起始顶点,起始顶点改为“已访问”标志,将起始顶点进栈 3. 重复下列操作直到栈为空: 3.1 取栈顶元素顶点 3.2 栈顶元素顶点存在未被访原创 2013-08-17 12:52:41 · 2592 阅读 · 1 评论 -
一步一步学数据结构之1--n(二叉树遍历--非递归实现)
这里只发代码,思路在代码注释里有,二叉树和二叉树遍历定义可在本博客数据系列中查找,所有代码加在二叉树操作博文中的代码均可正常运行。 一. 前序遍历: 前序遍历按照“根结点-左孩子-右孩子”的顺序进行访问。 递归实现: //递归实现前序遍历 void pre_order_traversal(BTreeNode* root){ if(NULL != root原创 2013-08-17 08:38:15 · 1939 阅读 · 2 评论 -
一步一步学数据结构之n--n(图遍历--广度优先遍历)
今天给大家说下图的广度优先遍历(BFS): 图的广度优先搜索是树的按层次遍历的推广,它的基本思想是:首先访问初始点vi,并将其标记为已访问过,接着访问vi的所有未被访问过的邻接点 vi1,vi2, …, vi t,并均标记已访问过,然后再按照vi1,vi2, …, vi t的次序,访问每一个顶点的所有未被访问过的邻接点,并均标记为已访问过,依次类推,直到图中所有和初始点vi有路径相通的顶原创 2013-08-16 19:06:31 · 2097 阅读 · 1 评论 -
一步一步学数据结构之n--n(图遍历--深度优先遍历--递归实现)
今天来介绍下图的遍历,首先说定义: 而在这里,就给大家叙述下深度优先遍历。本来是要用自己的话来给大家讲解的,但是搜了下网上的定义,觉得还是网上的定义更可靠和严谨,所以就摘取了百度百科的说明: 假设给定图G的初态是所有顶点均未曾访问过。在G中任选一顶点v为初始出发点(源点),则深度优先遍历可定义如下:首先访问出发点v,并将其标记为已访问过;然后依原创 2013-08-16 10:24:23 · 2497 阅读 · 0 评论 -
一步一步学数据结构之n--n(图--邻接链表法实现)
在上篇文章已经介绍过图的内容,而且还介绍了用邻接矩阵实现的图,而在本篇文章,就说下用邻接链表实现的图。 常做的操作可以在上篇文章中查找,因为两中方法实现的图操作都是一模一样的。 代码总分为三个文件:(LGraph.h , LGraph.c , Main.c )。整体结构图为: 简单说下邻接链表法: 如果对原创 2013-08-15 18:15:19 · 2845 阅读 · 2 评论 -
一步一步学数据结构之1--n(二叉树)
既然树已经熟悉了,那我们就来学习学习二叉树吧,二叉树是由n(n>=0)个结点组成的有限集合,该集合或者为空,或者是由一个根结点加上两棵分别称为左子树和右子树的﹑互不相交的二叉树组成。 如图 有两个定义需要大家知道下:1.满二叉树 如果二叉树中所有分支结点的度数都为2,且叶子结点都在同一层次上,则称这类二叉树为满二叉树。原创 2013-08-13 01:50:58 · 2593 阅读 · 0 评论 -
一步一步学数据结构之1--n(通用树)
今天来看大家介绍通用树结构,树是一种非线性的数据结构,树是由n个结点组成的有限集合,如果n=0,称为空树;如果n>0,则:有一个特定的称之为根的结点,它只有直接后继,但没有直接前驱;除根以外的其他结点划分为m个互不相交的有限集合,每个集合又是一棵树,并且称之为根的子树。 如图 树的一些基本概念l 树的结点包含一个数原创 2013-08-12 16:57:32 · 2096 阅读 · 0 评论 -
一步一步学数据结构之1--1(队列--单链表实现--含队头尾指针)
在前面,相信大家也已经感觉到,如果用单链表实现队列,不含队头队尾指针,每次入队操作都要遍历单链表,所以极不方便。那么在这里,就给大家介绍下含有队头队尾指针的队列(单链表实现)。 如图 这里介绍双向链表的常用操作:l 创建队列l 销毁队列l 清空队列l 入队l 出队l 返回队首元素l 返回队的大小原创 2013-08-06 13:18:44 · 2694 阅读 · 0 评论 -
一步一步学数据结构之1--1(队列--单链表表实现--不含队头尾指针)
这里介绍下用单链表实现的队列,不包含队头队尾指针。 如图这里介绍双向链表的常用操作:l 创建队列l 销毁队列l 清空队列l 入队l 出队l 返回队首元素l 返回队的大小代码总分为三个文件:LinkQueue.h : 放置功能函数的声明,以及表的声明 LinkQueue.c : 放置功能函数的定义,以及表结点的定原创 2013-08-06 12:28:37 · 2137 阅读 · 0 评论 -
一步一步学数据结构之1--1(循环队列--线性表实现)
为充分利用内存空间,克服"假溢出"现象的方法是:将内存空间想象为一个首尾相接的圆环。存储在其中的队列称为循环队列。 如图这里介绍双向链表的常用操作:l 创建队列l 销毁队列l 清空队列l 入队l 出队l 返回队首元素l 返回队的大小l 返回队的最大长度代码总分为三个文件:SeqQueue.h原创 2013-08-06 12:05:51 · 1971 阅读 · 0 评论 -
一步一步学数据结构之1--1(队列--线性表实现--不存在循环)
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。 这次给大家介绍用线性表实现的队列,且不存在循环。 如图 这里介绍双向链表的常用操作: 创建原创 2013-08-06 11:37:23 · 1498 阅读 · 0 评论 -
一步一步学数据结构之1--1(栈--单链表实现)
这次给大家介绍用单链表实现的栈。如图 这里介绍双向链表的常用操作:l 创建栈l 销毁栈l 清空栈l 压栈l 出栈l 返回栈顶元素l 返回栈的大小 代码总分为三个文件:LinkStack.h : 放置功能函数的声明,以及表的声明 LinkStack.c : 放置功能函数的定义Main.c原创 2013-08-06 10:12:32 · 2028 阅读 · 1 评论 -
一步一步学数据结构之1--1(栈--线性表实现)
栈的定义:栈是一种特殊的表这种表只在表头进行插入和删除操作。因此,表头对于栈来说具有特殊的意义,称为栈顶。相应地,表尾称为栈底。不含任何元素的栈称为空栈。 而本次给大家介绍用线性表实现的栈。如图这里介绍双向链表的常用操作:l 创建栈l 销毁栈l 清空栈l 压栈l 出栈l 返回栈顶元素l 返回栈的大小l 返回栈的原创 2013-08-06 09:24:32 · 1595 阅读 · 0 评论 -
一步一步学数据结构之1--1(双向链表)
双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。而之前的单链表为单向链表,双向链表也就是在单链表的结点中增加一个指向其前驱的pre指针。 如图 这里介绍双向链表的常用操作:原创 2013-08-01 20:48:26 · 1693 阅读 · 0 评论 -
一步一步学数据结构之1--1(循环链表)
今天记录下循环链表,其实循环链表也就是将单链表中最后一个数据元素的next指针指向第一个元素。 这里有一个概念需要说明下: 游标:在循环链表中可以定义一个“当前”指针,这个指针通常称为游标,可以通过这个游标来遍历链表中的所有元素 如图 这里介绍静态链表的常用操作:原创 2013-08-01 17:11:29 · 2200 阅读 · 0 评论 -
一步一步学数据结构之1--1(静态链表)
用数组描述的链表,即称为静态链表,它的表现形式即为结构体数组,结构体变量包括数据域data和指针域next。这种存储结构,仍需要预先分配一个较大的空间,但在作为线性表的插入和删除操作时不需移动元素,仅需修改指针,故仍具有链式存储结构的主要优点。而且在不具有指针类型的高级语言中,无法使用指针类型,也就无法用指针实现单链表结构,所以静态链表是个不错的选择。 静态链表的定义为:原创 2013-08-01 11:46:19 · 2543 阅读 · 0 评论