数据结构(C语言)
沈二月
← ←
展开
-
数据结构(二)——单链表的概念和读取元素
线性表的链式存储结构的特点:用一组任意存储单元存储线性表的数据元素,存储单元可以是连续的,也可以是不连续的。在链式结构中,不仅要存储数据元素,还有存储其后继元素的地址。我们将数据元素的域称为数据域,后者的域称为指针域,两者组成的数据元素ai的存储映像称为结点(Node)。通常我们将第一个结点的存储位置叫做头结点,规定最后一个结点的指针为空(通常用NULL或“^”原创 2016-11-13 21:57:20 · 469 阅读 · 0 评论 -
数据结构(十)——二叉树
二叉树的定义:二叉树是n个结点的有限集合,该集合或者为空集,或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。如下图:二叉树的特点:1.每个结点最多有两棵子树,所以二叉树中不存在度大于2的结点。2.左子树和右子树是有顺序的,次序不能任意颠倒。3.即使树中某结点只有一棵树,也要区分它是左子树还是右子树。二叉树的五种基本形原创 2016-11-27 21:57:46 · 672 阅读 · 0 评论 -
数据结构(9)——树
树的定义:树是n个结点的有限集。n=0时称为空树。在任意一棵非空树中:1.有且仅有一个特定的称为根结点2.n > 1时,其余结点可分为m个互不相交的有限集T1、T2、......Tm,其中每个集合本身有时一棵树,并且称为根的子树。如下图:子树T1,T2是上面的子树关于树的定义要注意以下两点:1.n>0时根结点是唯一的。2.m>0时原创 2016-11-25 23:34:52 · 321 阅读 · 0 评论 -
数据结构(八)—— 串
串的定义:串是由零个或者多个字符组成的有限队列,又名叫字符串。一般记为s = "a1a2......an"(n >= 0),其中s是串的名称,n是串的长度。子串与主串,串中任意个数的连续字符组成的子序列称为该串的子串,相应地,包含子串的串称为主串。子串在主串中的位置就是子串的第一个字符在主串的序号.串的比较:给定两个串:s=“a1a2......an”,t=原创 2016-11-24 21:04:20 · 322 阅读 · 0 评论 -
动态链表和静态链表的区别
静态链表是用数组实现的,是顺序的存储结构,在物理地址上是连续的,而且需要预先分配大小。动态链表是用申请内存函数(C是malloc,C++是new)动态申请内存的,所以在链表的长度上没有限制。动态链表因为是动态申请内存的,所以每个节点的物理地址不连续,要通过指针来顺序访问。*所有结点都是在程序中定义的,不是临时开辟的,也不能用完后释放,这种链表称为“静态链表”。*/struct Student原创 2016-11-23 12:21:12 · 6429 阅读 · 1 评论 -
数据结构(七)——队列
队列的定义: 队列是只允许在一端进行插入操作,在另一端进行删除操作的线性表。允许插入的一端称为队尾,另一端为队头队列有两种存储方式,先来看队列的数序存储结构:循环队列定义:头尾相接的顺序存储结构称为循环队列。那怎么判断队列是空还是满呢?方法1:设置一个flag标志变量,当front==rear且flag==0时队列为空,当front==rear原创 2016-11-22 22:05:28 · 399 阅读 · 0 评论 -
数据结构(六)——栈的应用
栈的应用:递归栈有一个很重要的应用:在程序设计语言中实现了递归。下面介绍一个经典的递归例子:斐波那契数列。1,1,2,3,5,8,13,21,34,45,........这样的数列有很明显的规律,前两项和为第三项的值。用数学函数就是这样的:如果想打印前40位数字,我们首相想到的就是用迭代法来实现,这里代码就不演示了,而用递归就能比迭代更加简单一些。代码如原创 2016-11-19 14:35:44 · 314 阅读 · 0 评论 -
数据结构(五)——栈
栈的定义:栈是限定仅在表位进行插入和删除操作的线性表。允许插入和删除的一端称为栈顶,另一端为栈底,不含任何数据元素的栈称为空栈。栈的插入操作,叫做进栈,也叫做压栈,入栈,打个比方,像子弹如弹夹;栈的删除操作,叫做出栈,有的叫做弹栈,如同子弹出弹夹。示意图如下:栈的顺序存储结构及实现:[cpp] view plain copy原创 2016-11-18 23:23:47 · 555 阅读 · 0 评论 -
数据结构(四)——单链表的整表创建与删除
单链表整表的创建思路:1.说明一结点p和计数器变量i;2.初始化一空链表L;3.让L的头结点的指针指向NULL,即建立一个带头结点的单链表4.循环生成一新结点赋值给p;赋值;将p插入到头结点与千亿新结点之间;代码:(这里的赋值采用随机数赋值)[cpp] view plain copy v原创 2016-11-15 16:50:05 · 398 阅读 · 0 评论 -
数据结构(十一)——二叉树的遍历和建立
二叉树的遍历是指从根节点出发,按照某种次序依次访问二叉树中所有结点,使得每个结点被访问一次且仅被访问一次。其中关键词是访问和次序。二叉树的遍历方法1.前序遍历规则:若二叉树为空,则 空操作返回,否则先访问根结点,然后前序遍历左子树,在前序遍历右子树。下图的遍历顺序为ABDGHCEIF。2.中序遍历规则:若树为空,则空操作返回,否则从根原创 2016-11-30 22:38:45 · 300 阅读 · 0 评论 -
数据结构(三)——单链表的插入与删除
单链表的插入:假设存储元素e的结点为s,要实现p、p->next和s直间逻辑关系的变化,只需要将s插入到p和p->next之间即可。也就是说,让p的后继结点称为s的后继结点,s变成p的后继结点,如下图:这个操作的代码只需要两行:[cpp] view plain copy s->next = p->next; p->nex原创 2016-11-14 22:44:09 · 1229 阅读 · 0 评论 -
数据结构(四)——循环链表与双向链表
什么是循环链表?将单链表中终端结点的指针端由空指针改为指向头结点,整个链表就形成了一个环,这种头尾相接的单链表称为循环单链表,简称循环链表。如下图:循环单链表和单链表的差异就在循环的判断条件上,原来是判断p->next是否为空,现在则是判断p->next是否等于头结点。双向链表:双向链表是在单链表的每个结点中,再设置再设置一个指向其前原创 2016-11-17 15:05:13 · 417 阅读 · 0 评论 -
线索二叉树
概念这种加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树(Threaded BinaryTree)。根据线索性质的不同,线索二叉树可分为前序线索二叉树、中序线索二叉树和后序线索二叉树三种 注意: 线索链表解决了无法直接找到该结点在某种遍历序列中的前趋和后继结点的问题,出现了二叉链表找左、右孩子困难的问题。线索二叉树结构二叉树的遍历本质上是将一个复杂的非线原创 2016-12-17 23:50:18 · 409 阅读 · 0 评论