用C语言实现这些算法的一些小思考
来源:1-5 关于课程的其他语言支持:Python,C++,JS,Go
weixin_慕设计1308382
2020-01-30
老师您好,我已经学完了一半这个课程的知识了。大体上没有任何问题。老师讲解的非常好,让我对算法领域有了初步的认知。只是有一个自己的和代码并没有联系的小思考:
Java和C是我最常用的编程语言,因为Java是完全面向对象的,C是面向过程的。
我的想法:如果这些算法与数据结构全部都用C语言来实现的话,尤其是运用到C语言特有的指针的概念,这些问题是变得复杂还是简单的呢?
如果我就是按照已经写好的Java程序直接去写C语言,会不会特别的麻烦:
我初步设想了几个麻烦:(因为我的C语言学的还不够深入,所以有些问题可能比较幼稚)
- 如何去比较大小,类似于Comparable
- 如何继承以及连接接口interface
- 会不会运用到指针的指针类似的概念
- 如何去设置Java中类似于private protected(虽然可能用不到)
- C语言有类似于E这样的泛型吗?
【因为我发现老师您所给的其他语言的代码案例中,没有给到C语言的,即便是C++,大体上我个人感觉也是面向对象的】
谢谢老师!
1回答
-
首先,必须纠正一下,C 语言绝不是最常用的编程语言。现在,除了一些底层应用(操作系统,编译器等)和嵌入式应用,近乎不会有人使用 C 语言做开发了。一个核心原因,就是 C 不支持的语言特性太多了,最典型的就是面向对象。
而即使从系统底层开发的角度看,C 语言也有被“代替”的风险,rust 的使命就是如此。
我个人 200% 的不建议使用 C 语言学习算法和数据结构,核心原因就是因为,由于 C 语言缺失太多语言特性,使得在具体实现的时候,需要关注太多和算法和数据结构的逻辑本身无关的语言细节,比如内存管理,从而淹没了对算法和数据结构本身的理解。
至于你提到的问题,大多涉及面向对象的概念,如果真的有兴趣,我推荐一本书,专门讲如何使用 C 语言实现很多面向对象的概念。这本书在网上完全公开,不过只有英文版。
https://www.cs.rit.edu/~ats/books/ooc.pdf
不过依然是,如果不是非常有兴趣,或者不是因为需要把 C 语言研究到很深的地步,我并不建议在这个问题上花过多时间。
继续加油!:)
112020-01-31
相似问题