一周的学习

文章讲述了作者一周内学习数据结构(如栈、队列、希尔排序、二分查找)、算法基础(包括深度优先搜索和广度优先搜索)的过程,以及在实际编程中的应用和问题解决。重点提到了循环队列、双栈、KMP算法等内容的学习和挑战。
摘要由CSDN通过智能技术生成

第一天:看了《大话数据结构 (程杰)》这本,看完了三章,这本书前面几章讲的都是数据结构,没有涉及算法,对我来说还行,算时间复杂度这里有点懵,明白了一点,还没有熟练的算出一个程序的时间复杂度 ,之后便是线性表,学习了这章我感觉把数组跟链表重新学了一遍,只不过内容没那么详细,也挺简单的,主要是五个月没接触链表,重新复习了一遍,再写了一遍链表的动态创建,不过学了新内容双链表与循环链表,挺好玩的,主要是oj上一道题卡了一个多小时,一直在想这个题。

第二天:学完了第四章栈和队列这章,还学了希尔排序和二分查找。

栈:

栈这小章我觉得有点重要的是双栈,看了b站的视频挺好理解的,简单的说是一个序列两个栈,分别把栈顶设在序列的头部与尾部,但是栈的四则运算有一点点懵,看了b站视频就懂了,主要是两个规则:1.扫描到符号优先级比栈内的符号小就先把栈内符号与栈顶的两个元素拉出来运算,再把运算结果存入栈内,再把之前符号优先级小的存入栈内。2.扫描到优先级相同的则视为栈外的比栈内的优先级小,然后符合规则1,执行操作,直到符号栈为空。

而中缀转后缀的规则是:1.遇到数字直接输出,2.栈内运算符高于栈外运算符输出栈内运算符,3.遇到()则暂时不看栈底的符号,从左括号(之后的第一个符号看

数据结构好像也没有题目练手。

队列:

1.循环队列

判断长度:(rear-front+QueueSize)%QueueSize

插入元素:Q->data[Q->rear]  =  e;     Q->rear  =  (Q->rear  +  1)  %  MAXSIZE;  

删除元素Q->front  =  (Q->front  +  1)  %  MAXSIZE;

循环队列重要的点就这么多

2.链式队列

没啥好讲的,链表学的好这个就没问题

希尔排序:插入排序的优化,

二分查找:二分查找我是学过的,但是今天让我发现一个问题,就是一个学校的oj上和洛谷上的一个原题,数据和题目都一样,但是学校的oj过了但洛谷的WA了我就一直在找原因,发现原来是判断相同元素时出了问题,在学校oj上判断相同的元素如下

学校的oj可能没那么严格,我在判断相同元素时也用了一个循环,增加了时间复杂度,而改进后直接在判断>时把相等的也判断了也就是直接>=

这样直接一个while就解决了,算是新学了一遍二分吧。

第三天:今天主要学二分查找,上午满课,然后中午抽时间写了一下洛谷团队的题,一个单向链表,我以为是简单的对链表进行插入,删除,查找工作,写出来了但是超时了,然后就在想是不是查找是不是要用二分,但是又要保证链表是有序的,然后想着用数组,但是用数组也要遍历数组才能查到,迫不得已打开了讨论区,看到一位大佬直接一维数组搞定,而且插入删除也不用遍历,思路是定义一个足够大的数组,在题目范围内。

插入的话就是a[y]=a[x],然后a[x]=y;  a[y]=a[x]就相当于链表中p->next=q->next,而a[x]=y相当于q->next=p这样就完成了插入操作,其中p为待插入的链表,而q为插入前的链表,而链表的最后一位为NULL,数组就是为0

查找就简单了,因为是查找x的后一个元素,而a[x]就是存储下一个元素的,所以直接输出a[x]就行了,如果x为最后一个元素也没事,在插入那里整理完成了,为0。

删除这里有点麻烦,a[x]=a[a[x]],相当于链表的p->next=p->next->next,而不把结点释放,在数组中就是你先把它放一边,如果后续有用到删除的数据则再给他重新赋值。

这个思路之前都没见到过,所以一直在研究。

二分查找看起来简单,但是面对不同的题思路又不同,可能一个+1或者-1答案可能就错了,要格外小心,总的来说今天算是在学算法和不同的思路,课太多了,把二分查找的一些例题看完了,二分答案还没开始,还有一个洛谷的题,本来是二分查找可以出答案的,但是去看了一下讨论区全是大佬,

这样居然也实现了,我开始看那个算法标签写了个二分,然后思维就被禁锢在二分了,仔细看这不过是一道数学题。

第四天:学了一下深搜跟广搜,顺便看了一下相关例题,然后做了几道之前学校oj上不会的,发现递归这一类好多用的都是这个算法。

第五天:上午刷了一道洛谷的搜素的入门题--填涂颜色,思路不对,开始一直想着怎么找圈里面的,写了好久,因为一直想不到怎么判断边界的1,折腾了好久后来还是看了题解,思路还是一个比一个nb,学校的oj你只能看到自己的思路,但是洛谷上面百花齐放,什么思路都有,看看别人的思路挺好的,但是一定要自己先想一遍,题解的思路就是直接找1外的0,把边界外的0全部找到后就是正解了,直接找圈里面的0应该也能求解,但我真的想不到了,需要考虑的东西太多了,直接求圈外的更好求解,但我因为一个换行卡了一个小时,提交了全wa了,然后一直在测试数据,最后才看到这个换行,挺崩溃的,最后也发现其实栈和队列要运用起来,题解方面好多都用了队列,我还以为队列不重要,然后又刷了一道简单的深搜,遇到题目——马的遍历才真正懂深搜跟广搜的区别,深搜是一条路走到黑,走不通了再回头,广搜是走一步算一步,不会再回头。

第六天:刷了一些题才发现队列运用的好才有用,不过队列的基本操作都会了,nb一点的题还没深入,还学了一些其他基本算法的大概思路,了解了一下,还把洛谷团队中会的题都刷了,学校oj上快结束的题也刷了,学了算法刷学校oj确实简单一点,磨刀不误砍柴工,星期六主要是休息一下。

第七天:上午睡到了九点,上午复习了一下高数,要考试了,不想挂,还了解了一下kmp,就是不清楚next数组怎么构建,下午参加了一个线上的比赛,就会两道签到题,第三题想了一个多小时但是最后发现思路错了..........

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值