
浙大版《数据结构(第2版)》题目集
Amokr_
这个作者很懒,什么都没留下…
展开
-
「是否二叉搜索树」
参考了一些博主的思路,自己一开始想到的是中序遍历输出一个数组,再for循环逐个比较是否为升序,奈何超时了...明天再试试 0x00:从定义出发 //判断中序输出是否为升序 int Traverse_mid_Left(BinTree p,int val) { if(!p) return true; else return (p->Data < val && Traverse_mid_Left(p-&原创 2021-08-09 00:01:59 · 83 阅读 · 0 评论 -
「邻接矩阵存储图的深度优先遍历 」
void DFS( MGraph Graph, Vertex V, void (*Visit)(Vertex) ) { Visited[V]=true; Visit(V); for(int i=0;i<Graph->Nv;i++) { if(Graph->G[V][i] == 1 && Visited[i]==false) DFS(Graph,i,Visit); } }原创 2021-08-05 01:35:29 · 301 阅读 · 0 评论 -
「 单链表分段逆转 」
最近速成学到了图,复习一下前面的链表,因此找到了这道题。 可是我发????这似乎有一定的难度,也是看了好多题解才写出来。 一定要画图!画图yyds! void K_Reverse( List L, int K ) { int sum=0,i,j; List o=L->Next; while(o) {o=o->Next; sum++;} //计算链表中结点数量 if(K==0 || K== 1 || L->Next == NULL原创 2021-08-03 13:41:36 · 1349 阅读 · 0 评论 -
「还原二叉树」
学了半个月数据结构了,学到了哈夫曼树,也不算特别快吧...中间还有三天在划水 这道题目有头绪,但是难点在于自己对于递归的理解和运用还不到位,对于先序中序创建二叉树的技术还不到家...参考了大佬createTree部分的代码 第一次提交还报了一次错,因为没有写T->left和T->right而导致返回值没有送上来,只有一个测试点过了。后来发现了改过来了。 #include <stdio.h> #include <stdlib.h> //定义树的结点类型 typed原创 2021-08-02 01:29:31 · 104 阅读 · 0 评论 -
「先序输出叶结点」
void PreorderPrintLeaves( BinTree BT ) { if(BT) { if(BT->Left == NULL && BT->Right == NULL) printf(" %c",BT->Data); PreorderPrintLeaves(BT->Left); PreorderPrintLeaves(BT->Right); } }原创 2021-08-01 22:04:15 · 117 阅读 · 0 评论 -
「二叉树的遍历」
不知道为什么我用循环队列他就不给我过..... 我不是怕他数据太多越界嘛,虽说给的实例才9个结点 注释掉的是我想用的步长递增方式,看了别人大佬的我改成了++才给我过 void InorderTraversal( BinTree BT ) { if(BT) { InorderTraversal(BT->Left); printf(" %c",BT->Data); InorderTraversal(BT->Right);原创 2021-08-01 21:56:56 · 113 阅读 · 0 评论 -
「求二叉树高度」
递归真的绕死我了...... int GetHeight( BinTree BT ) { int LH,RH; //计数器 if(BT == NULL) return 0; //若为空树,即上一层递归中的根结点无左孩子或右孩子,计数为0 else { LH = GetHeight(BT->Left); //递归计算左子树的深度 RH = GetHeight(BT->Right); //递归计算右子树的深度原创 2021-08-01 21:05:15 · 92 阅读 · 0 评论 -
「最长连续递增子序列」
想了好久 本来搞了两个循环,stack overflow了...... 后来想想用一个循环来实现 每次看大佬题解都不敢细看,总是幻想能有一些新思路然后自己去写 比如这次,看别人只用了一个循化,自己也去思考如何用一个循环写出来 总而言之,菜是原罪...... #include <stdio.h> const int max = 100005; int main() { int start,length,maxlength=1,i,j,n; int a[max];原创 2021-07-29 20:55:00 · 168 阅读 · 0 评论 -
「最大子列和问题 」
本人最原始的暴力破解方法,外层循环不断回溯。测试点是通过了,但数字一旦很大运行时间也非常长。 #include <stdio.h> int main() { int sum,n,i,j,max=0; int a[100005]; scanf("%d",&n); //共n个测试数据 for(i=0;i<n;i++) scanf("%d",&a[i]); //扫入数据,下标0~n-1 for(i=0;i<n;i++) //原创 2021-07-29 13:36:32 · 108 阅读 · 0 评论 -
「求链表的倒数第m个元素」
用了很傻的方法,先一个while循环求出这条链表的长度 在用条件判断找到倒数第n个元素 接下来想想怎么优化吧... //L是给定的带头结点的单链表;函数Find要将L的倒数第m个元素返回,并不改变原链表。 //如果这样的元素不存在,则返回一个错误标志ERROR。 ElementType Find( List L, int m ) { int cnt=0,sum=0; List p=L; //傀儡指针 while(p->Next) //求得整个链表的长度 .原创 2021-07-29 17:57:58 · 617 阅读 · 0 评论