一、C语言
C语言真的算是我编程之路一切一切的起点了,从6月高考完,那个暑假没有想象中的吃喝玩乐,而是早睡早起地学习C语言,练习打代码,踏上我的编程之路的第一步。一开始在b站听鹏哥的网课,真的受益匪浅,鹏哥真的算是我计算机的引路人,讲课真的通俗易懂,一下子就点燃了学习的火苗,我真的哭死……
下面我想分享一下令我印象深刻的事情或者知识点。
1.1 写博客
学计算机,一定要学会写博客,整理自己的思路,也方便别人学习模仿。
还记得我在CSDN写下第一篇博客之时,不知道怎么布局文章,也不知道怎么排版,导致排版很丑,思路稀烂,但至少我勇敢地踏出了这一步!
要写出高质量的博客还是要花费一番心思的,可能两三天才能完成一篇博客,但不用怕久,那都是你思想的结晶,将来的你一定会感谢写在认真写博客的自己。
1.2 上传git
每天写的代码按时上传gitee(或者github),保持这样的习惯,方便以后自己或者别人了解你的代码量和成长经历。
最好分类建立仓库,时常维护你的git,那就像是程序员的朋友圈,记录每天遇到或写下的好代码。
1.3 三子棋和扫雷
学习完数据类型与变量、分支与循环、数组、函数章节,我在鹏哥的指引下成功做出第一款像模像样的小游戏——三子棋。虽然页面很简陋,玩法和规则很简单,但我知道,那是独属于我的成功。
后续类似的经验,又成功写出来最为经典的小游戏之一——扫雷,那可把我给开心坏了,我仿佛是我自己小世界里的英雄,无所不能。在学习完函数递归的知识,我又成功的优化了扫雷的自动展开空白的功能,为其添上了浓墨重彩的一笔。
1.4 精妙的机关术——位操作
在了解计算机中原码、反码、补码的存在,我不得不佩服当初设计这种存储模式的人的天赋异禀,原码和补码经过相同操作居然能相互转换?!
在位操作符中,令我印象最深的便是^异或,简简单单一句,相同为0,相异为1,包含了多少精妙绝伦的思想在里面。在看到利用异或完成两个变量的互换时,我整个人都惊呆了,妙,妙,实在是太妙了!
a = a ^ b; b = a ^ b; a = a ^ b;
1.5 C语言的利剑——指针
说起指针,可能很多学习C语言的同学头都大了,一级二级指针,数组名,数组指针,函数指针……其实,指针也并没有想象中的那么难,我在学习的时候,记清楚关键要点,也就可以正确地使用这把利剑,大杀四方!
正是拥有了指针,C语言才能自由地访问和操作内存,缔造出属于自己的世界。就如同仙侠小说中的飞剑术一般,万里之外取敌人首级,千里寻踪。
1.6 C语言的铠甲——结构体
将多种内置类型熔铸在一起,打造专属于你的铠甲,它有着更为强大的信息存储功能,能够描绘更加复杂的对象。
不过,作为打造它的匠师,你需要了解它的比例配方(内存对齐)、使用方法(结构体访问)、特殊技巧(位段)等。
1.7 C语言的内功心法——动态内存管理
说到内存,那可就是咱们程序员的法力源泉了。一个内功深厚的程序员,一定是会正确高效使用内存空间的,就如同拥有顶级的内功心法,能够随心所欲地汲取法力,操纵并运用,威力无穷。
C语言中广泛流传天下的基础心法——malloc/free,被一代又一代程序员学习,不同的人运用出来的效果也大相径庭,有人可以一剑开天门,有人却练得走火入魔。
【C语言】动态内存管理(C语言的难点与精华,数据结构的前置知识,你真的掌握了吗?)
二、初阶数据结构
在C语言学完后,我带着虔诚的心,叩开了数据结构的大门。我仿佛打开了一扇新世界的窗,那里的一切都令我深深着迷。在这里,我才发现C语言只是一种手段来辅助自己,而数据结构里的思想才是我真正要学习的精华所在。
2.1 画图,一定要画图!
数据结构学习的阶段,一定要动手画图,千万不要凭空想象,相信我,这会让你将来受益无穷。
本来一个问题,画图10分钟能解决,结果硬是盯着屏幕看了半个小时都没有思路,都是血与泪的教训……
2.2 顺序表
由数组升级而来的顺序表,首先映入眼帘,用函数来操作封装后的动态数组,实现增删查改,这一切仿佛既熟悉又陌生,熟悉的是对数组操作,不熟悉的是以这样新奇的方式进行。
如何进行定义,如何实现功能,之前C语言学习的知识大展拳脚,有力地帮助我学习的高效进行。
2.3 链表
这几乎像是一个全新的领域,从未接触过的链式结构,指针在链表里就像一个英雄。指针指向的不断改变,还时常伴随着NULL的突然出现,确实让我很长一段时间摸不着头脑。
但是,经过大量的刷题和总结,终于还是将其驯服成功。
链表三板斧:
- 哨兵位
- 快慢指针
- 多设置指针变量(千万别省变量!)
【数据结构】【版本1.2】【线性时代】——链表之王(双向带头循环)
2.4 栈和队列
栈和队列其实只是满足特定需求的线性表,底层实现还是使用顺序表和链表。但是一般栈用顺序表实现,队列用链表实现会比较方便。
开玩笑地说,栈是最不公平的,因为后进先出,而队列是最公平的,因为先进先出。
2.5 二叉树
这又是一个全新的概念——树形结构,和之前讲的线性结构又不相同了。不知道多少学习数据结构的同学,对“树”又头疼不已。而二叉树,就是一种特殊的树,更是无数同学的噩梦呢(哈哈哈~)
二叉树又分为堆(顺序表实现)和链式二叉树(链表实现),所以平常说的二叉树其实就是链式二叉树啦。二叉树其实就是不断玩递归,而递归一般分为两步:
- 终止条件
- 子问题
当然,后续二叉树还有进阶(这部分用C++比较好实现,所以在C++学习):
二叉树
二叉搜索树
AVL树
红黑树
2.6 排序
大人一桌:希尔排序、堆排序、快速排序、归并排序
小孩一桌:插入排序、选择排序、冒泡排序
这里计数排序有些飘忽不定,有时候在大人那桌最能喝,能把其他排序都干趴下,有时又只能在小孩那桌玩泥巴。
哈哈哈,上面是形象地开个玩笑,总体来说,排序是一种算法思想,学习它的过程中能有效锻炼自己的逻辑思维能力,以后再也不用担心不会排序啦!
【算法】七大经典排序(插入,选择,冒泡,希尔,堆,快速,归并)
三、C++
终于,最后的最后,穿过山川和人海,经历了C和数据结构,我还是与你相见——C++。此刻,眼中仿佛有激动的泪光,一切的一切都是值得的,这是一个全新的起点,亦是通天大道之始。
3.1 从namespace开始的C++生活
相信不少学C++的小伙伴,都是从这里入坑的吧。C++练级之路从此开始,缺省参数、函数重载、引用、内联函数等引入,对原本C缔造的世界带来了翻天覆地的变化,填补C语言的不足,增加便利。
C++11引入auto,范围for,nullptr,进一步增加简便的语法,体验感直接爆棚。
3.2 C++的机甲——类
C++是面向对象编程的语言,而C是面向过程编程。所以C++就引入了类的概念,其实类是结构体的升级版,集变量与函数于一身,从铠甲变成了机甲,从此我们只要设计好类,就可以操纵它大杀四方了!
同样,作为机甲设计师,你要完全发挥出它的性能,就必须了解其内部构造,例如类的定义,访问限定符,this指针等。在了解完基础部分,就必须掌握最为重要的部分——类的默认成员函数,这样你才能在不同场景根据需求进行不同的设计,使你的与机甲的同步率达到1000%哦~
3.3 C++的动态内存管理——new/delete
针对类和对象,C++推出了自己的动态内存管理的方式,可以在开辟空间时对类调用相应的默认成员函数,进行初始化和销毁。
其实,new和delete的底层也用到了malloc和free,只不过对它们进行了封装。另外,new写起来也真的更加简便,不用强转类型,因为C++会自动识别类型哦,相信我,使用new后,你会发自心底地爱上它的!
3.4 C++的终极杀器——STL
为什么说它是大杀器呢?因为你在刷题时会有明显感觉,在做数据结构的某些题目,比如需要一个栈,而C语言并没有现成的库,需要手动造轮子,但是,C++有现成的库,直接调用就行!你根本想不到这对一个刷题的人是一种多大的诱惑,终于不用每次拷贝写了上百行代码的栈,而是可以直接使用了啊啊啊……
目前还在继续学习,刚刚学了string类,居然有100多个接口,真是不要太复杂冗余!幸好常用的不多,剩下的就等着以后有需要时查文档咯~
结语与祝福
记录一下我踏入计算机世界的起始年,分享一路上的感悟与酸甜苦辣,这一路有志同道合的伙伴同行,留下了太多的美好,我很珍惜。2023,我与C/C++相遇的奇迹之年就此落下帷幕,而希望,仍在远方眺望。
最后,提前祝福大家新年快乐啦,新的一年写代码没有bug,写题目秒出思路哦!
真诚点赞,手有余香