第二章内容小结以及资料分享
第二章内容小结
顺序表很简单就不说了,链表的构思很简单,但难在于它的具体实现,例如操作的特殊情况:在头尾操作,链表为空等,寒假在acm敲了很多代码所以学习过程中基本并没有遇上什么问题,这里我就归纳几个鄙人认为的需要注意的点。
- Linklist 和 LNode* 的数据类型都是指向LNode的指针,只是用前者强调定义头指针
- 增加首节点的用意在于使对第一个结点进行操作会和其他结点相同
- 在遍历链表时,若某个date域的值成为判断条件时,while(p!=NULL&&p->date!=x),括号内两个判断不能交换,因为当p为空时p就没有date域,只会访问别的内存空间造成错误。
在学习过程中,老师讲得很详细,特别是“如果将这个这样了会怎么样呢”,等问题会很有趣,想通了会十分舒服~,然后老师严谨性的思维值得我们学习,具体问题需要具体分析等,链式结构顺序表没啥好学的,链表的话得时不时敲一敲,巩固一下记忆,还要研究一下链表问题的变种,像老师的那题反向链表就很好玩。
资料分享
资料分享的话我推荐上学期唐明董老师推荐的《编码•隐匿在计算机软硬件背后的语言》,这本书生动有趣(真滴很有趣),能学到很多好玩的知识,对编程思维很有帮助,在这里我就分享一下它的一小部分内容。
上学期我们上cpp课时学到负数在计算机内是以补码形式存在的,通过补码可以实现加负数,实现减法,但为什么可以这样子,以及这个思维是怎么出现的呢,上学期我们并没有深入了解。
先来看看模的概念——模是指一个计量系统的计数范围。如时钟等。计算机也是一个计算器,它也是有一个计量范围,即都存在一个“模”,让我们举几个例子:钟表的计算范围是0到11,它的模是12,“模”是计量器产生“溢出”的量,它的值在计量器上表示不出来,计量器上只能表示出模的余数。
再来看一下在有模的计量系统中的运算:要把指向11点的时针拨向8点,要怎么调捏?Frist key:逆时针调3小时。Second key:顺时针调9小时。用数字表示就是11-3=8和11+9=8,但明显右边式子不成立,那怎么样才会成立呢,没错,时钟的计量系统是带模的,所以式子应该是(11-3)%12=8和(11+9)%12=8,是不是很神奇,所以我们得到了第一个结论:即在有模的计量系统中,减一个数等于加上它的补数,从而实现将减法运算转化为加法运算的目的。
计算机显然是带模的,例如32位计算机的计量范围是2^32,模 = 2^32,那么减去一个数就是加上它的补数了,咦?二进制的补码不是取反加一吗?补数是模减那个数呀,这好像不一样呢!看上去的确不一样,其实是一样的。先让我们忘掉补码的定义,先按上文说的方式来:
这里就会引出使用补码的思想:避免错位。回想一下,使用十进制算减法的时候:
现在让我们重新回忆起补码操作:取反,然后加一。现在试试用同位数的1111···减它,你会神奇的发现这就是取反,现在回到刚刚的例子:
总结,二进制的取反加一就是它在该模计量系统的“补数”,可以实现用加法实现减法的目的,从而简化电路设计等等,模就像一个太极,周而复始,就鄙人而言,不断优化解决问题的方法,不断深入问题的本质是学计算机最有趣的地方,最后记录一下我第一篇在博客园写的博客,3月17日,还要记录一下昨天的广工校赛,被虐惨了,就a出一题,月底天梯赛前一定要把T1级全刷完,追上fcm大佬。
以上内容是对推荐书目第147页到152页和https://blog.csdn.net/leonliu06/article/details/78685197的个人的补充,本博客如有不正确的地方请多多指正。