- 博客(102)
- 资源 (1)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 考研数据结构(每日一题)目录
考研数据结构(每日一题)目录将这些天做的题进行了一个小汇总,点击相应的链接就能找到啦。有些代码会有点小问题,各位大佬求指教。day56题目:计算二叉树中所有的叶子结点个数https://blog.csdn.net/DTRblank/article/day55:题目:已知一棵二叉树链式存储,设计一个算法,输出根结点到每个叶子结点的路径。https://blog.csdn.net/DTRblank/article/day54:题目:假设二叉树采用二叉链表结构存储,设计一个算法,求
2022-05-05 10:58:00
706
原创 考研数据结构(每日一题)day60
考研数据结构(每日一题)题目:设计一个算法用于判断带头结点的循环双链表是否对称。算法思想:让p从左向右扫描,q从右向左扫描,直到它们指向同一结点(当循环双链表中结点个数为奇数时,p==q)或相邻(当循环双链表中结点个数为偶数时p->next=q或q->prior=p)为止,若它们所指结点值相同,则继续进行下去,否则返回0。若计较全部相等,则返回1。完整代码:int Symmetry(DLinkList L){ DNode *p = L -> next,*q = L -&
2022-05-10 09:13:16
463
原创 考研数据结构(每日一题)day59
考研数据结构(每日一题)题目:已知一个整数序列A=(a0,a1,…,an-1),其中0<=a1<n(0<=i<n)。若存在ap1=ap2=…=apm=x且m>n/2(0<=pk<n,1<=k<=m),则称x为A的主元素。例如A=(0,5,5,3,5,7,5,5),则5为主元素,又如A=(0,5,5,3,5,1,5,7),则A中没有主元素。假设A中的n个元素保存在一个一维数组中,请设计一个尽可能高效的算法,找出A的主元素。若存在主元素,则输出该元素,否则
2022-05-09 11:49:39
1364
1
原创 考研数据结构(每日一题)day58
考研数据结构(每日一题)题目:设有一个带头节点的循环单链表,其结点值均为正整数。设计一个算法,反复找出单链表中结点值最小的结点并输出,然后将该结点从中删除,直到单链表为空为止,再删除表头结点。算法思想:反复找到当前的最小值结点,并删除,直到链表为空,释放头结点L。完整代码:typedef struct LNode{ int data; struct LNode *next;}void Delete_min(LinkList &L){ LNode *pre = L
2022-05-07 11:23:21
468
原创 考研数据结构(每日一题)day57
考研数据结构(每日一题)题目:后序遍历的非递归算法算法思想:沿着根的左孩子依次入栈,直到左孩子为空读栈顶元素(判定),若其右孩子不空且未被访问,将右子树执行第一步栈顶元素出栈入栈向左一直走,判定(右子树),出栈访问,标记,重置完整代码:void PostOrder(BiTree T){ InitStack(S); p = T; r = NULL; while (p || !IsEmpty(S)) { if (p) //
2022-05-06 10:26:17
368
原创 考研数据结构(每日一题)day56
考研数据结构(每日一题)题目:计算二叉树中所有的叶子结点个数算法思想:递归法:F(n)=F(左叶子结点)+F(右叶子结点)遍历(这里用先序遍历)完整代码:int count(BTNode *p){ int n1,n2; if (p == NULL) //递归边界 { return 0; } if (p -> lchild == NULL && p -> rchild == NULL) {
2022-05-05 10:09:15
865
原创 考研数据结构(每日一题)day55
考研数据结构(每日一题)题目:已知一棵二叉树链式存储,设计一个算法,输出根结点到每个叶子结点的路径。算法思想:遍历(先序遍历)对特殊的结点(叶子结点)进行处理需要借助一个栈完整代码:Elemtype stack[maxsize];void path(BTNode *p){ int i = 0,top = 0; if (p != NULL) //不为空,则结点值入栈 { stack[top] = p -> data;
2022-05-03 15:40:09
857
原创 考研数据结构(每日一题)day54
考研数据结构(每日一题)题目:假设二叉树采用二叉链表结构存储,设计一个算法,求二叉树中值为x的层号。算法思想:遍历定义一个p指针,要明确向左走层数+1,当返回时,层数要-1。关键是要知道什么时候层数加一,什么时候层数减一。完整代码:void fun(BTNode *p,int x){ int h = 1; if (p != NULL) { if (p -> data == x) //遍历 { print
2022-04-30 16:33:39
1277
原创 考研数据结构(每日一题)day53
考研数据结构(每日一题)题目:已知由n(n>=2)个正整数构成得到集合A={ak|0<=k<n},将其划分为两个不相交的子集A1和A2,元素个数分别是n1和n2,A1和A2中的元素之和分别为S1和S2,设计一个尽可能高效的划分算法,满足|n1-n2|最小且|S1-S2|最大。算法思想:将最小的n/2个元素放在A1中,其余的元素放在A2中,分组即可满足题目要求。按照快速排序的思想,基于枢轴将n个整数划分为两个子集。根据划分后枢轴所处的位置i进行处理:若i=n/2,则分组完成,算法
2022-04-29 14:12:29
2021
原创 考研数据结构(每日一题)day52
考研数据结构(每日一题)题目:荷兰国旗问题:设有一个仅有红、白、蓝三种颜色的条块组成的条块序列,请编写一个时间复杂度为O(n)的算法,使得这些条块按红、白、蓝的顺序排好,即排成荷兰国旗图案。算法思想:顺序扫描线性表,将红色条块交换至线性表的最前面,蓝色条块交换至线性表的最后面。设置三个指针,j:工作指针,表示当前扫描的元素,i以前的元素全部为红色,k以后的元素全部为蓝色。根据j所指示元素的颜色,决定将其交换至前部或尾部。初识时i=0,k=n-1完整代码:typedef enum { RE
2022-04-28 10:31:52
813
原创 考研数据结构(每日一题)day51
考研数据结构(每日一题)题目:编写一个算法,使之能够在数组L[1…n]中找出第k小的元素(即从小到大排序后处于第k个位置的元素)算法思想:首先本题可以采取排序算法对数组进行从小大的排序,然后提取L(k),如此便得到了第k小元素,但是平均时间复杂度为O(nlog2n)以上。还可采用小顶堆的方法,每次堆顶的元素都是最小值元素,时间复杂度为O(n+klog2n)以下详细写一下关于快速排序的操作方法:从数组L[1…n]中选择一个轴pivot(随机或者取第一个)进行和快速排序一样的划分操作
2022-04-27 14:34:30
260
原创 考研数据结构(每日一题)day50
考研数据结构(每日一题)题目:已知线性表按顺序存储,且每个元素都是不相同的整数型元素,设计所有奇数移动到所有偶数前面的算法。算法思想:使用快速排序思想,假设表为L[1…n],先从前向后找到一个偶数元素L(i),再从后向前找到一个奇数元素L(j),将二者交换,重复上述操作直到i大于j。完整代码:void move(ElemType A[],int len){ int i = 0; //i表示左端偶数元素的下标 int j = len - 1; //j表示右端奇数元素的下标
2022-04-26 10:22:01
1728
原创 考研数据结构(每日一题)day49
考研数据结构(每日一题)题目:编写双向冒泡排序算法,在正反两个方向交替进行扫描,即第一趟把关键字最大的元素放在序列的最后面,第二趟把关键字最小的元素放在序列的最前面,如此反复进行。算法思想:奇数趟时,从前向后比较相邻元素的关键字,遇到逆序即交换,直到把序列中关键字最大的元素移动到序列尾部。偶数趟时,从后往前比较相邻元素的关键字,遇到逆序即交换,直到把序列中关键字最小的元素移动到序列前端。完整代码:void BubbleSort(ElemType A[],int n){ int l
2022-04-25 09:21:15
383
原创 考研数据结构(每日一题)day48
考研数据结构(每日一题)题目:编写一个递归算法,在一棵有n个结点的、随机建立起来的二叉排序树上查找第k(1<=k<=n)小的元素,并返回指向该结点的指针。要求算法的平均时间复杂度为O(log2n),二叉排序树的每个结点中除data,lchild,rchild等数据成员外,增加一个count成员,保存以该结点为根的子树上的结点个数。算法思想:设二叉排序树的根结点为*t,根据结点存储的信息,有以下几种情况:t->lchild为空时若t->rchild非空且k==1,则*t
2022-04-24 10:44:58
510
原创 考研数据结构(每日一题)day47
考研数据结构(每日一题)题目:设计一个算法,求出给定二叉排序树中最小和最大的关键字设计一个算法,从大到小输出二叉排序树中所有值不小于k的关键字算法思想:在二叉排序树中,最左下结点即为关键字最小的结点,最右下结点即为关键字最大的结点。本算法只要找出这两个结点即可,不需要比较关键字。由二叉树排序树的性质可知,右子树中所有的结点值均大于根结点值,左子树中所有的结点值均小于根结点值。为了从大到小输出,先遍历右子树,在访问根结点,后遍历右子树。完整代码:KeyType MinKey(BST
2022-04-22 09:30:50
893
原创 考研数据结构(每日一题)day46
考研数据结构(每日一题)题目:判断二叉树是否是平衡二叉树的算法。算法思想:设二叉树的平衡标记为balance,以标记返回二叉树bt是否为平衡二叉树,若为平衡二叉树,则返回1,否则返回0,h为二叉树bt 的高度,采用后序遍历递归算法。若bt为空,则高度为0,balance=1若bt仅有根结点,则高度为1,balanc=1否则,对bt的左右子树进行递归,返回左右子树的高度和平衡标记,bt的高度为最高子树的高度加1若左右子树的高度差大于1,则balance=0若左右子树的高度差小
2022-04-21 14:20:35
146
原创 考研数据结构(每日一题)day45
考研数据结构(每日一题)题目:设计一个算法,求出指定结点在给定二叉排序树中的层次。算法思想:二叉树采用二叉链表存储。在二叉排序树中,查找一次就下降一层。查找该结点所用的次数就是该结点在二叉排序树中的层次。采用二叉排序树非递归查找算法,用n保存查找层次,每查找一次,n就加一,直到找到相应的结点。完整代码:int level(BiTree bt,BSTNode *p){ int n = 0; //统计查找次数 BiTree t = bt; if (bt != NULL
2022-04-20 09:38:54
444
原创 考研数据结构(每日一题)day44
考研数据结构(每日一题)题目:判断给定的二叉树是否是二叉排序树。算法思想:在二叉排序树来说,其中序遍历序列为一个递增有序序列。二叉树进行中序遍历,若始终能保持前一个值比后一个值小,则说明该二叉树是一棵二叉排序树。完整代码:KeyType predt = -987654; //predt为全局变量,保存当前结点中序前驱的值,初始值为负无穷大int JudgeBST(BiTree bt){ int b1,b2; if(bt == NULL){ //空树 ret
2022-04-19 09:57:56
434
原创 考研数据结构(每日一题)day43
考研数据结构(每日一题)题目:折半查找的递归算法。初始调用时。low为1,high为ST.length。算法思想:根据查找的起始位置和终止位置,将查找序列一分为二,判断所查找的关键字在哪一部分,然后用新的序列的起始位置和终止位置递归求解。完整代码:typedef struct{ //查找表的数据结构 ElemType *elem; //存储空间地址,建表时按实际长度分配,0号留空 int length; //表的长度}SSTable;int BinSearchRe
2022-04-18 09:23:35
954
原创 考研数据结构(每日一题)day42
考研数据结构(每日一题)题目:已知无向连通图G由顶点集V和遍集E组成,|E|>0,当G中度为奇数的顶点个数为不大于2的偶数时,G存在包含所有边且长度为|E|的路径(称为EL路径)。设图G采用邻接矩阵存储。请设计算法 int IsExistEL(MGraph G),判断G是否存在EL路径,若存在,则返回0。算法思想:采用邻接矩阵存储无向图,在邻接矩阵的每一行(列)中,非零元素的个数为本行(列)对应的顶点的度。可以依次计算连通图G中各顶点的度,并记录度为奇数的顶点个数,若个数为0或2,则返回1,否则
2022-04-15 11:26:14
1958
原创 考研数据结构(每日一题)day41
考研数据结构(每日一题)题目:设计一个算法,将给定的表达式树(二叉树)转换为等价的中缀表达式(通过括号反映操作符的计算次序)并输出。例如,当下列两棵表达式树作为算法的输入时:输出的等价中缀表达式分别为(a+b)*(c*(-d))和(a*b)+(-(c-d))算法思想:表达式树的中序序列加上必要的括号即为等价的中缀表达式。表达式树中分支结点所对应的子表达式的计算次序,由该分支结点所处的位置决定。需要在生成遍历序列的同时,在适当位置增加必要的括号。表达式的最外层(对应根结点)和操作数(对应叶结点)
2022-04-14 11:13:13
1304
原创 考研数据结构(每日一题)day40
考研数据结构(每日一题)题目:二叉树的带权路径长度(WPL)是二叉树中所有叶结点的带权路径长度之和,给定一棵二叉树T,采用二叉链表存储,结点结构为(left,weight,right),其中叶结点的weight域保存该结点的非负权值,设root为指向T的根结点的指针,请设计求T的WPL的算法。算法思想:二叉树的带权路径长度为每个叶结点的深度与权值之和的总和,可以使用先序遍历或层次遍历。先序遍历使用一个static变量记录wpl,把每个结点的深度作为递归函数的一个参数传递。若该结点是叶结点,则变量
2022-04-13 15:52:49
183
原创 考研数据结构(每日一题)day39
考研数据结构(每日一题)题目:写出在中序线索二叉树里查找指定结点在后序的前驱结点的算法。算法思想:在后序序列中:若结点p有右子女,则右子女是前驱若无右子女而有左子女,则左子女是前驱若结点p左右都无子女,设其中序左线索指向某祖先结点f(p是f右子树种按中序遍历的第一个结点)若f有左子女,则其左子女是结点p在后序下的前驱若f无左子女,则顺其前驱找双亲的双亲,一直找到双亲有左子女(这时左子女是p的前驱)若p是中序遍历的第一个结点,则结点p在中序和后序下都无前驱完整代码:
2022-04-12 11:44:30
309
原创 考研数据结构(每日一题)day38
考研数据结构(每日一题)题目:试设计判断两棵二叉树是否相似的算法。所谓二叉树T1和T2相似,指的是T1和T2都是空的二叉树或都只有一个根结点,或T1的左子树和T2的左子树是相似的,且T1的右子树和T2的右子树是相似的。算法思想:采用递归的思想。若T1和T2都是空树,则相似;若有一个为空另一个不为空,则不相似;递归的比较它们的左右子树是否相似。f(T1,T2) = 1; T1== T2 == NULLf(T1,T2) = 0; T1和T2其中一个为NULL,另一个不为NUL
2022-04-11 09:30:00
1169
原创 考研数据结构(每日一题)day37
考研数据结构(每日一题)题目:设计一个算法将二叉树的叶结点按从左到右的顺序连成一个单链表,表头指针为head,二叉树按二叉链表方式存储,链接时用叶结点的右指针域来存放单链表指针。算法思想:采用中序递归遍历。设置前驱结点指针pre,初识为空。第一个叶结点由指针head指向,遍历至叶结点时,将它前驱的rchild指针指向它,最后一个叶结点的rchild为空。完整代码:LinkedList head,pre = NULL; //设置全局变量LinkedList InOrder(BiTree b
2022-04-08 09:43:59
2193
原创 考研数据结构(每日一题)day36
考研数据结构(每日一题)题目:设有一棵满二叉树(所有结点值均不同),已知其先序序列为pre,求其后序序列post。算法图解:算法思想:对于一般二叉树,仅仅根据先序或后序序列是不能确定另一个遍历序列。但对于满二叉树,任意一个结点的左右子树均有相同的结点数。先序序列的第一个结点是后序序列的最后一个结点,由此可以得出先序序列pre[l1…h1]转化为后序序列post[l2…h2],运用递归,可得出递归模型为:f(pre,l1,h1,post,l2,h2) = 不做任何事 h1<l1时
2022-04-07 10:14:38
761
原创 考研数据结构(每日一题)day35
考研数据结构(每日一题)题目:假设二叉树采用二叉链表存储结构,求非空二叉树b的宽度(即具有结点数最多的那一层的结点个数)算法思想:采用层次遍历的方法。首先求出所有结点的层次,将所有结点和对应的层次放在一个队列中。然后依次扫描队列,并求出各层的结点总数,最大的层结点总数即为二叉树的宽度。完整代码:typedef struct{ BiTree data[MaxSize]; //保存队列中的结点指针 int level[MaxSize]; //保存data中相同下标结点的层次
2022-04-06 14:20:51
463
原创 考研数据结构(每日一题)day34
考研数据结构(每日一题)题目:设一棵二叉树的结点结构为(LLINK,INFO,RLINK),ROOT为指向该二叉树根结点的指针,p和q分别指向该二叉树中任意两个结点的指针,试编写算法ANCESTOR(ROOT,p,q,r)找到p和q的最近公共祖先结点r。算法思想:这道题的目的是了解后序遍历的特性,在遍历中,栈内元素都是当前元素的直系祖先。栈存在是意义:访问到了,但是还没有轮到它输出,因为顺序是左右根,它是根,所以现在还不能输出,入栈了,接下来访问它的左右孩子。采用后序非递归算法,栈中存放二叉树结点的
2022-04-02 10:07:20
314
原创 考研数据结构(每日一题)day33
考研数据结构(每日一题)题目:在二叉树中查找值为x的结点,编写算法打印值为x的结点的所有祖先,假设值为x的结点不多于一个。算法思想:采用非递归后序遍历,最后访问根结点,访问到值为x的结点时,栈中所有元素均为结点的祖先,依次出栈打印即可。完整代码:typedef struct{ BiTree t; int tag;}stack; //tag=0表示左子女被访问,tag=1表示右子女被访问void Search(BiTree bt,ElemType x){ stack s
2022-04-01 11:11:48
1316
原创 IIC通信协议
IIC原理IIC总线是一种两线式串行总线,用于连接微控制器及其外围设备,半双工通信方式。它由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。连接在IIC总线上的器件分为主机和从机,主机有权发起和结束一次通信,而从机只能被主机呼叫。当总线上有多个主机同时启用总线时,IIC也具备冲突检测和仲裁的功能来防止错误的产生。每个连接到IIC总线上的器件都有一个唯一的地址(7bit),且每个器件都可以作为主机也可以作为从机(同一时刻只能有一个主机),总线上的器件增加和删除不影响其他器件正常工作。
2022-04-01 10:20:12
1204
原创 考研数据结构(每日一题)day32
考研数据结构(每日一题)题目:已知二叉树以儿茶链表存储,编写算法完成:对于树中每个元素值为x的结点,删去以它为根的子树,并释放相应的空间。算法思想:采用递归后序遍历。删除值为x的结点,将其父节点的左(右)子树指针置空,用层次遍历找到某结点的父节点完整代码://递归void Del_all(BiTree &T,char x){ if(T == NULL){ return; } if(T -> data == x){ Del
2022-03-31 11:15:38
739
原创 考研数据结构(每日一题)day31
考研数据结构(每日一题)题目:假设二叉树采用二叉链存储结构存储,设计一个算法,求先序遍历序列中第k(1<=k<=二叉树中结点个数)个结点的值算法思想:设置一个全局变量i(初始值为1)来表示进行先序遍历先用先序遍历二叉树,当二叉树b为空时,返回特殊字符‘#’当k==i时,即为要找的结点,返回b->data当k不等于i时,递归在左子树中查找,若找到则返回该值,否则继续递归在右子树中继续查找,并返回其结果完整代码:int i = 1; //全局变量ElemType Pr
2022-03-30 10:23:42
1498
原创 考研数据结构(每日一题)day30
考研数据结构(每日一题)题目:设树B是一棵采用链式结构存储的二叉树,编写一个把树B中所有结点的左右子树进行交换的函数。算法图解:算法思想:递归的交换左右子树。先交换b结点左孩子的左右子树,然后交换b结点的右孩子的左右子树,最后交换b结点的左右孩子,当结点为空时递归结束。完整代码:void swap(BiTree b){ if(b){ swap(b -> lchild); //递归交换左子树 swap(b -> rchild);
2022-03-29 09:32:45
1493
原创 UART通信协议
并行通信串行通信单工通信双工通信:半双工全双工UART波特率:用于描述UART通信时的通信速度,其单位为bps(bit per second)即每秒钟传送的bit的数量。UART帧格式
2022-03-28 16:09:24
4925
原创 考研数据结构(每日一题)day29
考研数据结构(每日一题)题目:假设二叉树采用二叉链表存储结构存储,试设计一个算法,计算一棵给定二叉树的所有双分支(度为2)结点个数。算法思想:用递归,设置递归函数模型f(b):f(b)=0 为空结点f(b)=f(b->lchild)+f(b->rchild)+1 是双分支结点,+1是本身f(b)=f(b->lchild)+f(b->rchild) 不是双分支结点完整代码:int DoubleNodes(BiTree b){ if(b == NULL)
2022-03-28 11:17:18
673
原创 考研数据结构(每日一题)day28
考研数据结构(每日一题)题目:二叉树按二叉链表形式存储,写一个判别给定二叉树是否是完全二叉树的算法。算法思想:完全二叉树定义:一棵深度为k的有n个结点的二叉树对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树。采用层次遍历,将所有结点加入队列(包括空结点)。遇到空结点时,查看其后是否有费控结点,若有则二叉树不是完全二叉树。完整代码:bool IsComplete(BiTree T){
2022-03-25 14:16:50
467
原创 考研数据结构(每日一题)day28
考研数据结构(每日一题)题目:设一棵二叉树中各结点的值互不相同,其先序遍历序列和中序遍历序列分别存于两个一维数组A[1…n]和B[1…n]中,试编写算法建立该二叉树的二叉链表。算法思想:由先序遍历和中序遍历可以确定唯一的一棵二叉树。1.根据先序遍历确定树的根结点2.根据根结点在中序遍历序列中划分出二叉树的左右子树包含哪些结点,然后根据左右子树结点在先序遍历序列中的次序确定子树的根结点。重复上述步骤,直到每棵子树仅有一个结点(根结点)如图完整代码:BiTree PreInCreat(Elem
2022-03-24 11:49:18
1325
原创 考研数据结构(每日一题)day27
考研数据结构(每日一题)题目:假设二叉树采用二叉链表存储结构,设计一个算法求二叉树的高度(递归和非递归)算法思想:递归:递归求左子树高度、右子树高度,取较大者+1非递归:采用层次遍历算法,变量level记录二叉树层数,指针last指向最右结点,每次层次遍历出队时与last指针比较,若两者相等,则层数加1,并让last指向下一层的最右结点,直到遍历完成。level的值即为二叉树的高度。完整代码://递归int Btdepth(Bitree T){ if(T == NULL){ //
2022-03-23 17:11:25
1388
原创 考研数据结构(每日一题)day26
考研数据结构(每日一题)题目:设有两个栈s1、s2都采用顺序栈方式,并共享一个存储区[0,…,maxsize-1],为了尽量利用空间,减少溢出的可能,可采用栈顶相向、迎面增长的存储方式。试设计s1、s2有关入栈和出栈的操作算法。算法图解:算法思想:此题的关键在于,两个栈入栈和退栈时的栈顶指针的计算。s1栈是通常意义下的栈;而s2栈入栈操作时,其栈顶指针左移(减1),退栈时,栈顶指针右移(加1)。两个栈共享向量空间,将两个栈的栈底设在向量两端,初始时,s1栈顶指针为-1,s2栈顶指针为maxsiz
2022-03-22 11:33:44
1581
原创 考研数据结构(每日一题)day25
考研数据结构(每日一题)题目:设单链表的表头指针为L,结点结构由data和next两个域构成,其中data域为字符型,试设计算法判断该链表的全部n个字符是否中心对称,例如xyx、xyyx都是中心对称。算法思想:此题可以用栈来判断数据是否中心对称。1.首先让链表的前一半元素依次进栈,当n为偶数时,前一半和后一半的个数相同;当n为奇数时,链表中心结点字符不比较,移动链表指针到下一字符开始比较2.处理链表的后一半元素时,访问链表的一个元素后就从栈中弹出一个元素3.两个元素进行比较,若相等,则将链表中的
2022-03-21 10:51:50
1633
爱普生XP245清零软件官方版
2022-03-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人