数据结构(C语言版)
复习数据结构时碰到的一些问题
y_din
Being dazzling.You are qualified.
展开
-
【树】树、二叉树、森林的转化与遍历
一、树、二叉树、森林之间的转化1.树转化成二叉树树转化成二叉树是通过父亲兄弟结点的转化,即将一个树的左儿子变成其长子,右儿子变成其兄弟举例:将树以兄弟父亲的方式连接起来将多余连接线擦掉调整角度变成二叉树2.二叉树转化为树原来的例子连接父亲与儿子擦去多余的连接线将树旋转过来3.二叉树森林转为二叉树举例:方法: 每一棵二叉树作为前一棵二叉树的右孩子插入4.将含有多叉树的森林转化为二叉树先利用多叉树转化为二叉树的方法将每棵树转化成二叉树利原创 2020-06-04 13:13:31 · 466 阅读 · 0 评论 -
【二叉树的非递归遍历】用堆栈实现中序遍历
规则从根结点出发沿着左子树往下走,遇到一个结点就放入堆栈中,走到最底走到底后,若当前结点有右子树,则将该结点从堆栈中取出后输出,再沿着右孩子的左子树往下走同1若当前结点无右子树,则开始向上回溯,将该结点pop并输出一个结点第二次被走到时就输出详细见下例举例...原创 2020-06-03 14:27:26 · 635 阅读 · 3 评论 -
【循环队列】循环队列使用过程中的问题及解决方案
一、定义循环队列是用一个数组来实现队列,是对原来基础上的一个优化初始front=rear=-1,front表示队列的最前端的前一个位置,rear表示队列的最后一个位置循环队列可以使得数组中的每一个空间都被充分利用循环队列中的循环可以通过rear = (rear + 1) % MAXSIZE实现举例如图(虽然有亿点点丑,凑合着看吧…)二、存在的问题问题:如何判断一个循环队列满了?1.矛盾当循环队列为空的时候,我们用front=rear来判断,但是我们发现当队列为满的时候front=re原创 2020-06-02 19:51:10 · 2763 阅读 · 0 评论 -
【堆栈】中缀表达式转化为后缀表达式以及后缀表达式的计算
一、中缀表达式转化为后缀表达式1.规则从头到尾读取,对不同的对象操作不同数字:直接输出左括号(:直接压入堆栈,不用管优先级,但在左括号压入堆栈之后,左括号默认为优先级最低右括号):遇到右括号以后就一个一个pop运算符,直到遇到左括号,把右括号pop以后停止操作运算符:与栈顶运算符比较:大于压栈,小于将栈顶pop(while)所有的处理完后,把堆栈中的一个一个输出2.例题解析:二、后缀表达式的计算1.规则碰到数字:放进栈中碰到运算符:取出栈顶原创 2020-06-02 18:55:26 · 498 阅读 · 0 评论 -
【线性表】线性表的随机存取和顺序存储?
问:为什么顺序存储就可以随机存取了呢?随机存取是什么意思?那顺序存储又是什么呢?课本解释:顺序表中每一个数据元素的存储位置都和线性表的起始位置相差一个和数据元素在线性表中的位序成正比的常数。由此,只要确定了存储线性表的起始位置,顺序表中任一数据元素都可随机存取个人理解:随机存取 指的是当存储器中的消息被读取或写入时,所需要的时间与这段信息所在的位置无关在顺序存储的线性结构中,数据元素存储的位置是连续的,这意味着我们只需要知道每一个数据元素的起始位置和一个数据元素所占的存储空间,就...原创 2020-06-02 14:41:16 · 12864 阅读 · 3 评论 -
【线性表】在矩阵的多重链表表示中,第i行的head和第i列的head实际上是同一个结点?
在复习线性表时视频中突然碰到了一个多重链表的题,给我整懵逼了通过查找资料,在自己的理解上写一下原因,首先,如图所示,该十字链表是矩阵A的链表表示观察一下每一个列head和头head会发现:1.行head(左边的一排head)的左边指针域未被利用,行head的右边指针域未被利用2.左边指针域是指向同一列的数据元素循环,右边的指针域是指向同一行的数据元素那么既然两者都各有所缺,且可以互相补充,为了将空间充分利用起来(在一些数据十分庞大的情况下),对于第i个head,我们可以利用它的左指针域来指向原创 2020-06-02 13:51:15 · 1398 阅读 · 11 评论