数据结构与算法
文章平均质量分 75
xcm2yw
这个作者很懒,什么都没留下…
展开
-
指针参数传递中的玄机
之前在写数据结构(链栈)的算法实现的时候出现了一个小问题,我想要实现元素入栈的功能,函数的原型及定义如下:LinkStack* PushElem(LinkStack *linkstack,int element){ if (IsEmptyStack(linkstack)) { cout<<"该栈为空,无法插入元素"<<endl; return linkstack; } el原创 2018-02-03 10:39:57 · 156 阅读 · 0 评论 -
顺序栈
数据结构——栈,是一种先入后出的数据结构。就像一摞盘子一样,一个一个地往上摆。取盘子的时候是在最上面的盘子先被取出来,所以先放进去的就要后取出来。栈的特性具有下面两种特性:(1)组成的数据元素是相同类型的,并且数据间线性排列。(2)只能对栈顶的数据元素进行操作。栈结构,可以分为两种——分别是顺序栈和链栈。顺序栈存放数据使用的是数组的形式。这里要介绍的顺序栈。顺序栈采用的是地址连续的原创 2018-02-03 14:25:28 · 224 阅读 · 0 评论 -
链栈
链栈和顺序栈不同,链栈是采用一个个存储结点来存储数据的。它不像顺序栈在地址上是连续的线性存储结构。所有的存储单元可以占用连续或不连续的存储区域。每个存储单元在存储栈中的元素a1的同时,也存储其逻辑后继a2的存储地址。typedef struct node{ int data;//存放数据 struct node *next;//下一个结点的地址}LinkNode,*LinkStackPtr原创 2018-02-03 21:25:43 · 249 阅读 · 0 评论 -
数据结构——链队列
链队列是指采用链接存储结构实现的队列。队列中的每个元素单独占有相应大小的存储空间。每个存储单元包括所需要存储的数据,以及下个存储单元的地址指针。可以用下面图一的示意图来表示一个存储单元。datanext图一 存储单元结构示意图链队列是在对头删除数据元素、队尾插入数据元素的。所以可以分别为队头和队尾设置一个头指针和一个尾指针,头指针和尾指向该链队列的队头和队尾。我们可以用结构体来封装。链队列的基...原创 2018-01-19 21:10:11 · 1487 阅读 · 0 评论 -
链队列的应用——打印杨辉三角
链队列的一个小应用可以用来打印杨辉三角。虽然打印杨辉三角的方法有很多,也不需要使用到数据结构,但是这里可以用数据结构来实现从而达到复习的目的。下面我主要说一下这个小算法。还是应用结构体来封装数据,和下一个节点的指针。每个存储节点:typedef struct node{ int data; struct node *next;}Node;包含头指针和尾指针的链队列:原创 2018-01-20 12:25:04 · 5611 阅读 · 0 评论 -
二叉树
1、二叉树的特点每个结点最多两棵子树,所以二叉树中不存在大于2的结点。注意不是只有两棵子树,而是最多有。左子树和右子树是有顺序的,次序不能任意颠倒。即使树中某种结点只有一棵子树,也要区分它是左子树和右子树,如下图。 2、二叉树具有的五种基本形态空二叉树。只有一个根结点。根结点只有左子树。根结点只有右子树。根结点既有左子树又有右...原创 2018-02-23 22:16:19 · 226 阅读 · 0 评论 -
二叉树的遍历
1、前序遍历上一篇文章讲到二叉树的存储结构,这里使用的就是该存储结构。前序遍历的规则是:若二叉树为空,则空操作返回,否则就先访问根节点,然后前序遍历左子树,再前序遍历右子树。那么前序遍历的结果是:ABDGHCEIF。前序遍历的代码分析:下面的代码使用递归算法进行前序遍历的。先访问根结点,若根结点不为空,则打印结点的数据。然后递归访问左子树,直到所访问的左子树是最后一个。最后以此类推访问右子树。vo...原创 2018-02-25 15:48:29 · 173 阅读 · 0 评论 -
算法——冒泡排序算法
1、冒泡排序的思想 冒泡排序的思想很简单,就是相邻的两个元素进行比较,如果下标较小的元素大于下标较大的元素,交换两个元素的位置。直到最后没有反序位置。所以自然而然会想到可以使用for循环来遍历整个数组的元素来进行比较(相邻的两个元素比较)。那么代码就可以这么写:for(int i=0;i<ListSize-1;i++){ if(List[i]>Lis...原创 2018-03-13 00:20:04 · 148 阅读 · 0 评论