复旦961-(不正规版)数据结构笔记

前言

这篇记得比较乱,都是自己比较私人的问题,很多回答基本也只是自说自话。大家觉得没参考性就略过好了

真题总结

  1. 关于“L→next”的解释:既然这么表达,证明L本身就是一个指针,L→next是(指向(L目前所指结点的)下一个结点的)指针

笔记

  1. 数据操作可视化网站
  2. for循环如何使用的:在这里插入图片描述在这里插入图片描述
  3. 趁手的可以编写C或C++的IDE:Codeblocks ; DevC++ ; VC++6.0 ; Visual Studio 201x 。后期有时间要用软件自己跑一遍大题,不然答题时候不好写
  4. 动态内存分配:void* malloc(unisgned int size)----表示在内存的动态存储区中分诶长度为size的连续空间并返回所分配的第一个字节的地址----例:Student* S1_p=(Student*)malloc(sizeof(Student))。malloc经常和sizeof一起用
  5. 本来想用sizeof(A[ ])这样的形式计算数组长度,但sizeof计算的是占内存大小,用这个结果除以每个元素所占内存大小才是length。既int len = sizeof(array)/sizeof(array[1])
  6. 常用排序算法&查找算法的时间复杂度、空间复杂度及适用
  7. 向上取整:即向“大”取整,符号开口向下!!
  8. for循环和while循环的区别----但961考试范畴里面可以互换,没那么严格
  9. 看到一种表达:T[i]!=’#’ 此处由于T[i]代表树中一个节点,所以不是int型,不能用!=null来表示,用‘#’替换null。但要注意,单独使用#后面加上关键字的话,是表示预处理指令,比如#include
  10. typedef struct LNode
    { ElemType data;
    struct LNode* next;
    }LNode,LinkList
    上面的意思是把从第一个struct到括号外LNode的整个结构体的指针重新定义为LinkList指针类型,即LNode
    node1就是LinkList node1
  11. C、C++头文件一览,包括STL标准模板

作业答疑

20190813

  • 2.2.(8)----第10题也用了递归算法为什么这个要写递归边界那个不用写?(答:没理解递归边界的意思啊。递归边界就是递归到最里面,肯定存在一个条件的)为什么for循环判断语句中不是<而是<=,=的时候是自己和自己交换,有必要写吗?(必须带=,因为for循环中i的数据类型是整型,如果<=后面的算式得出结果是小数的话)
  • 2.2.(9)----最后一条语句不应该是A[i]=x吗?(最后一句是跳出循环之外的,也就是最后一个循环结束之后i=low的时候。别混淆)
  • 2.2.(11)----求中值的语句不是一次就可以执行完吗,条件为什么要用while循环而不是if判断?(这个题是不断求中值的,相当于一个递归过程,肯定是循环判断而不是判断一次的)
  • 2.3.(5)----是对链表本身的逆置,为什么不传引用?(王道书上写的不规范)
  • 2.3.(8)----while(dist--)可以替换成for吗?(可以,考试的范畴内可以替换,就是while字数少点)后面的//while什么意思?(与前面的的while对应,表示这是一个完整的循环,没别的意思)
  • 2.3.(22)----为什么要重定义一个SNode类型,而不是像前面一样直接用Linklist L这样表示?(408要求写的比较规范,我们不用,除非题里要求写)最后面的while循环为什么不限制(q->next!=null) ?(写上也对,是这个意思但不用写这么细)为什么SNode* find_addr里面要有*?(王道不规范写法)
  • 2.3.(11)不太会,结合2.3.(10)看了答案也没太懂(解决惹!)

20190902

  • 4.3.(4)----出队入队(Q,p)中的p用不用在前面定义一下?需要定义。为什么前面先声明了一遍栈和队然后又写一遍初始化栈和队?完整写法。
  • 4.3.(5)----没懂 √ 这个题答案可改造为求二叉树最大宽度
  • 4.3.(7)----while循环里又出现了一遍while循环的限制条件,是有什么特殊需要吗?没有 就是为了满足else里面的条件。
  • 4.3.(14)----后面的“注意”中提到:队列中的结点出队后仍保留在队列中,但是从算法里面没看出有表现这个特征的语句呀?这是所有非环形队列的特征,出队入队改变的只是指针,里面的元素没有动也没有消除。但环形队列编制真的同时元素会覆盖。
  • 4.3.(19)----既然wpl作为一个数值一直在循环增加,最后也直接返回wpl值,那么设置static变量的意义是什么呢?这一句可以放到两个主函数外面来写,也不用这么写,写成int wpl=0就行,因为这样定义之后wpl就成了一个全局变量,当进入每一个递归循环的时候都是把上一次递归的wpl结果继续带入下一次循环,而不是把wpl重置为0(就是说如果int wpl=0这句写在主函数中,每一次循环wpl都是初值0,达不到递归的效果了)。算法中第一段语句是把只有一个结点的情况单独拉出来表示一下吗,还是有其他什么含义?不是,只是封装一下,相当于后面BST删除时你的算法里面提前定义一下找前驱找后继一样,封装之后可以保证如果你传入的不是总的根节点
  • 4.5.(6)----为什么前驱结点的值保存为负无穷?后续比较的结点都是有值的,为了与它们区分所以取一个比较drama的值。predt是指代前驱结点的特定词语吗,没怎么见过这么表达的?predt是需要自己定义的,王道少写了。“predt=bt->data,保留当前结点的关键词”-这条语句什么意义,为什么要暴露当前结点的值?自己从里到外跑一边地柜就会知道,更新当前结点的值是为了进行下一次的比较,不可能一直拿结点与predt初值负无穷进行比较,这个predt每一次更新的都是按中序遍历更新为目前遍历过的结点中的最大值。

20190916

  • BFS和DFS写的和书上的答案不太一样,想知道这样写对不对?
  • Prim算法----for循环语句为什么都是++i而不是i++?两个都行。对一个数组引用----比如++i和i++表示下标的时候有区别,别的没啥;最后一个for循环里面为什么是<lowcost[j] 而不是 <lowcost[v] (此处不是要找到从v顶点出发所有路径中的最小值吗)?跟上面的表达一致,看终点
  • Kruskal没太看懂----第一个while循环里面a=v[a]是什么意思?最后一个if语句里面v[a]=b是把b节点并入数组吗?
  • 拓扑排序–p=G->adjlist[i].firstarc ?王道P186

20190924

  1. 会考各排序算法时间/空间复杂度的具体推算过程吗?
  2. 希尔排序算法中为什么规定每次的步长必须是dk/2?那比如例题中的5,3,1就不成立了,在这种算法下会变成5,2,0??
  3. 堆排序中建成大顶堆之后的排序步骤没太懂?
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值