
算法与数据结构
文章平均质量分 52
纳兰小僧属马
希望牛人多指导
展开
-
树的基本知识
树树是数据结构最基础的东西,下面杂说下树的一些基本知识。树中的一个结点拥有的子树数称为该结点的度(Degree)。一棵树的度指的是树中所有结点中,结点的最大度数作为树的度。度为零的结点称为叶子结点或者终端结点。度不为零的结点称为分支结点或者非终端结点。其中,除根节点之外的分支节点称为内部结点。原创 2015-06-26 20:42:20 · 602 阅读 · 0 评论 -
单链表的整表创建和删除(四)
单链表的整表创建和删除原创 2015-08-18 21:11:07 · 2670 阅读 · 0 评论 -
静态链表(五)
静态链表单链表是一种动态链表。用数组描述的链表是静态链表。静态链表的存储结构如下:#define MAXSIZE 1000typedef int ElemType;typedef struct{ ElemType data;//数据 int cur;//游标}Component,StaticLinkList[MAXSIZE];下面的为一静态链表的实原创 2015-08-19 09:54:28 · 628 阅读 · 0 评论 -
静态链表的插入和删除(六)
静态链表的插入和删除静态链表相当于是用一个数组来实现线性表的链式存储结构,在静态链表中操作的是数组。一、静态链表的插入操作静态链表的插入操作包含两部分,首先是获得空闲量的下标,程序代码如下;int getCur(StaticLinkList tan){ int i = tan[0].cur; if(tan[0].cur)tan[0].cur = t原创 2015-08-19 21:35:59 · 5235 阅读 · 0 评论 -
树的存储结构
树的存储结构树的结构很强大,操作系统的文件管理、操作系统的目录管理、网络系统中的域名管理、数据库系统中的索引都利用了树的结构。树的存储结构有以下三种常见的表示法:1、双亲表示法 2、孩子表示法 3、孩子兄弟表示法 双亲表示法-以双亲作为索引关键词的一种存储方式。双亲表示法的存储结构如下;#define MAX_TREE_SIZE 100typedef int E原创 2015-09-06 17:12:33 · 571 阅读 · 0 评论 -
基于循环链表的约瑟夫问题(八)
基于循环链表的约瑟夫问题约瑟夫问题具体细节可以百度百科下。下面给出基于循环链表的约瑟夫问题的代码typedef struct CLinkList{ int data; struct CLinkList* next;}node;node *create(int n){ node *head = (node*)malloc(sizeof(node)) ;原创 2015-08-21 21:29:28 · 447 阅读 · 0 评论 -
循环链表(七)
循环链表之前讲的单链表只能索引后继结点,不能索引前驱结点,这样的话若不从头结点出发的话,就无法访问到全部结点。如何解决单链表出现这种缺点呢,我们将单链表中终端结点的指针由空指针改为指向头结点,这样就使整个单链表形成一个环,这种头尾相接的单链表为单循环链表,简称为循环链表。原创 2015-08-21 16:46:37 · 468 阅读 · 0 评论 -
树的基本知识前传
树的基本知识之前我们讲述的线性表、栈和队列都是一对一的结构,但是实际中的实例往往没有那么简单,比如存在很多一对多,多对多的结构。我们现在讲的树就是一种一对多的结构。后面我们要讲的图是一种多对多的结构。树是n(n>=0)个结点组成的有限集合T。当n=0时称为空树,在任意一颗非空树中,有且只有一个根节点。另外,当数的结点大于1时,子树的个数是没有限制的,但它们互相是一定不会相交的。原创 2015-09-06 15:36:12 · 456 阅读 · 0 评论 -
二叉树(一)
二叉树小述二叉树是n(n>=0)个结点的有限集合,该集合或者为空集(空二叉树),或者由一个根节点和两颗互不相交的,分别称为左子树和右子树的二叉树组成。特点:1、原创 2015-09-16 08:36:13 · 552 阅读 · 0 评论 -
二叉树的存储结构
二叉树的存储结构二叉树的存储结构也包含顺序存储结构和链式存储结构。二叉树的顺序存储结构就是用一维数组存储二叉树中的各个结点,并且结点的存储位置能体现结点之间的逻辑关系。具体存储方法就是在一维数组中存储二叉树中的各个结点,每个结点对应的数组下标为二叉树中按层序遍历的编号,此外数组中下标为0存放结点的个数。对于按照层序遍历过程中不存在的结点,在其对应的数组中存放-1等特殊标志表示这个结原创 2015-09-16 09:11:09 · 650 阅读 · 0 评论 -
二叉树的建立和遍历算法
二叉树的建立和遍历算法原创 2015-09-17 09:39:25 · 808 阅读 · 0 评论 -
栈的小述
栈的小述栈是一种重要的线性结构,栈其实就是线性表的一种具体形式。栈是一种后进先出的数据结构。栈的特性如下:1)栈是一个后进先出的线性表,它要求只在表尾进行删除和插入的操作。2)栈顶是这种特殊形式线性表的表尾,栈底是线性表的表头。3)栈的插入操作(push)称之为进栈、压栈或者入栈。栈的删除操作(pob)称之为出栈或者弹栈。4)入栈操作要在栈顶进行。每次向栈中压入一个原创 2015-08-24 22:25:44 · 469 阅读 · 0 评论 -
二叉树的几种遍历
二叉树的几种遍历前序遍历:先访问根节点——左子树——右子树。如下二叉树:原创 2015-08-17 21:48:27 · 698 阅读 · 0 评论 -
循环队列
循环队列前面队列小述中我们讲到了队列的链式存储结构,下面我们介绍下队列的顺序存储结构。假设一个队列有n个元素,则顺序存储的队列需要建立一个大于n的存储单元,并把队列的所有元素存储在数组的前n个单元,数组下标为0的一端则是队头。队列的顺序存储结构中,入队列就是在队尾追加一个元素,不需要任何移动,时间复杂度为O(1)。出队列则不同,我们已经假设下标为0的位置是队列的队头,因此,原创 2015-08-29 11:16:19 · 609 阅读 · 0 评论 -
循环链表的特性以及判断单链表是否有环(九)
基于尾指针的循环链表原创 2015-08-23 22:29:04 · 1315 阅读 · 0 评论 -
双向链表(十)
双向链表双向链表的结点结构typedef struct LinkList{ int data; struct LinkList* prior;//前驱结点 struct LinkList* next;//后继结点}node,*DualLinkList;双向链表对于单链表来说,要复杂一点,每个结点都多了一个指向前驱结点的指针。另外,双向链表可以有效的提高算法的时间性能。原创 2015-08-24 21:06:42 · 338 阅读 · 0 评论 -
基于栈的一些操作
基于栈的一些操作下面给出清空一个栈、销毁一个栈和计算栈的当前容量的操作。清空一个栈,就是将栈中的元素全部作废,但栈本身物理空间并不发生改变。清空一个栈的代码如下:typedef struct{ ElemType *base;//栈底指针 ElemType *top;//栈顶指针 int stacksize;//栈当前可使用的最大容量原创 2015-08-25 09:25:54 · 504 阅读 · 0 评论 -
基于栈二进制转化为八进制
基于栈二进制数转化为八进制数的代码如下#include#include# include # include #define STACK_INIT_SIZE 20#define STACKINCREMENT 10typedef char ElemType;typedef struct{ ElemType *base;//栈底指针 ElemType原创 2015-08-25 17:16:07 · 1577 阅读 · 1 评论 -
栈的链式存储结构
栈的链式存储结构栈主要是顺序存储结构,但是栈也有链式存储结构,栈的链式存储结构我们只需要了解下即可。栈的链式存储结构中,栈顶指针和单链表的头指针合二为一。栈的链式存储结构中,栈顶是单链表的表头,栈底是表尾。栈的链式存储结构如下:typedef struct StackNode{ ElemType data; struct StackNode *next原创 2015-08-26 10:22:09 · 631 阅读 · 0 评论 -
线性表初探(一)
数据结构之线性表线性表(List)-由0个或多个数据元素组成的有限序列。首先,它是一个序列,也就是元素之间是有个先来后到的。若元素为多个,则第一个元素无前驱,最后一个无后继,其它元素有且只有一个前驱和后继。线性表的元素的个数n定义为线性表的长度,当n = 0时,线性表为空表。线性表有两种物理存储结构:顺序存储结构和链式存储结构。此外,对于原创 2015-08-11 09:50:16 · 437 阅读 · 0 评论 -
线性表的顺序存储结构(二)
线性表的顺序存储结构对于顺序存储结构的线性表我们这里直接称之为线性表,后面一系列关于数据结构的文章中都这样声明。(我们为了后面的方便,才这样声明的)线性表中的元素类型都是一样的,假设线性表中的每个元素占用c个字节的存储单元。那么线性表中第i + 1个数据元素和第i个数据元素的存储地址的关系是addr(a(i + 1)) = addr(ai ) + c,其中addr表示求得原创 2015-08-12 08:39:58 · 542 阅读 · 0 评论 -
基于逆波兰表达式的计算器
基于逆波兰表达式的计算器首先我们需要了解下一般表达式如何转化为逆波兰表达式。如下:1+(20-3)*4+10/5 如何转化为逆波兰表达式 1 20 3 - 4 * + 10 5 / +一般表达式转化为逆波兰表达式的步骤如下:从左到右遍历一般表达式的每个数字和符号,若是数字则直接输出,若是符号,则判断其与栈顶符号的优先级,是右括号或者优先级低于栈顶符号,则栈顶元素依次原创 2015-08-27 12:54:40 · 616 阅读 · 0 评论 -
线性表的链式存储结构(三)
线性表的链式存储结构线性表的链式存储结构特点是用一组任意的存储单元存储线性表的数据元素。它除了要存储数据元素信息外,还要存储它的后继元素的存储地址。线性表的链式存储结构中,存储数据元素信息的域称为数据域,把存储直接后继位置的域称为指针域。指针域中存储的信息称为指针或链。这两部分信息组成数据元素称为结点(n个结点联接成一个链表,即为线性表的链式存储结构)。此链表每个结点只包含原创 2015-08-12 21:16:38 · 786 阅读 · 0 评论 -
单链表的逆置
单链表的逆置下面是对带有头结点的空链表进行逆置的代码:#include#include#include# include # include #includetypedef int ElemType;typedef struct Node{ ElemType data;//数据域 struct Node *next;//指针域}Node;typedef str原创 2015-08-28 09:16:29 · 515 阅读 · 0 评论 -
队列小述
队列小述原创 2015-08-29 09:33:59 · 435 阅读 · 0 评论 -
图的定义
图的定义以及相应的术语图的定义:是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图中顶点的集合,E是图中边的集合。注意:线性表中我们把数据元素叫做元素,树中我们把数据元素称之为结点,图中我们相应的把数据元素称之为顶点。图结构中,任意两个顶点之间都可能有关系,顶点之间的逻辑关系用边来表示。无向图和有向图:原创 2015-09-20 19:52:06 · 911 阅读 · 0 评论