[随便扯几句] 关于数据结构
2017-10-30 20:42
211 查看
吐槽一下
学校这学期开始使用“SPOC+翻转课堂”的模式来教数据结构这门课。就我这段时间的体验来说,这种模式非常非常非常不负责任。虽说学习本就是自己的事情,不能寄希望于别人来督促,但这种模式让不想学习的人失去了最后的负罪感:自己不会?组内别人帮忙解答呗~
没写作业?反正是一组交一份作业,别人肯定会写的嘛~
期末挂科?平时分占比那么高,拿头挂科?
当然了,我并不关心这个模式的教学效果怎样,这交给教育学家去头疼,我对此只能抱怨一下它在某种程度上加重了我不必要的课业负担(一个人做一组的作业真的是……)。
但是就这门课而言,据我在SPOC答疑区看到的一系列令人匪夷所思的问题来看,很多人,根本不知道自己在学什么。
所以,什么是数据结构?
几乎所有讲述数据结构的书中都开章明义的说:数据结构是指对数据(操作对象)的描述。
所以,一切就这么简单,就这么一句话而已啊。计算机存储数据只能靠01两个数字,一些高级语言又为我们提供了
int、
double之类的基本数据类型,我们就是要靠这些东西,构建出来一套表示更复杂、更高级东西的接口。比如说,我们现在想要在计算机中表示一个方阵,那么我们想一下,怎样才能确定一个方阵呢?对了,我需要知道这个方阵有几行几列,这个方阵中每一行每一列到底是谁。那么,已知一个方阵,我们一般会对他做什么呢?不改变行数列数的情况下,应该只有需要改变某一行某一列中到底是谁了吧。好了,这样我就完成了对一个“方阵”的描述。然后用我熟悉的语言写出代码,使得我可以通过这些代码轻易的知道这个方阵的信息,轻易地做到我想对方阵做的事情,这样就完成了!具体他怎么实现的,我根本就不关心!我既可以这样实现:
struct 方阵 { int 行数, 列数; std::vector<std::vector<人>> 内容; };
我也可以这样实现:
struct 方阵 { int 行数, 列数; std::vector<人的链表结点 *> 内容; };
或者更多更古怪的实现都无所谓,只要可以完美的满足我的需求就好了。
那么,“栈”、“队列”这些又是些什么呢?它们是经常用到的“模型”。它们就像一个工具箱一样,当我们想要拧螺丝(描述一个数据)的时候,由于螺丝有很多不同的种类(不同的数据类型),每个种类都需要单独的“螺丝刀”(专用的数据结构),但是我们渐渐发现,我们通过工具箱里一些特定的工具组合起来(也就是“模型”),就能拧上几乎所有的螺丝了,那么我在想要拧上螺丝的时候,就会先想到,能不能先用工具箱(“模型”)来解决呢?
一定要用C语言实现吗?
虽然很多语言已经提供了一些基本的数据结构,但是显然的,这些数据结构也并不是凭空出来的,至少Java和
C++都以自己本身实现了这些数据结构,所以说没有必要因为C语言不行,就抗拒学习数据结构。
何况,语言是工具,而不是束缚你的枷锁。数据结构,目的是为了描述数据,不是为了练习语言!你虽然确实有必要知道一些常用的数据结构究竟应该怎么实现(记得要自己实现而不是调用语言本身的功能),但这个实现并不限于C语言。
抽象
在讨论区看到这样一个问题:抽象是什么?抽象有什么好处?
实际上,当你使用了编译器随手敲下
gcc a.c这种命令时,你已经在享受抽象的便利。例如,变量,就是一个抽象出来的概念。内存中的数据并不以字符串作为标识符,而是以
0x****作为唯一标识符,你能把一个名字
a和一个内存单元联系起来,这是语言给你提供的抽象。同理
9a86
,数据结构里面,你也可以通过抽象这种技法,将难以理解的东西换成容易理解的东西。
一些令我匪夷所思的问题
Q:请问全栈是什么意思?A: 这里应该是数据结构的讨论区吧……
Q:自从上了数据结构便走火入魔,茶饭不思,日渐消瘦!
A:心疼你喔……
Q:汉诺塔问题利用栈有啥意义?
A: 能解决问题啊!
Q:汉诺塔问题利用递归有啥意义?
A:你和上面的那个是一个人发的吧!
Q:如何用C语言声明一个循环数组?
Q:如何声明一个循环栈?
Q:什么是循环树?
A:强制提问题的规定,把人都逼疯了……
相关文章推荐
- 随便说几句 —— 关于USB主机系列
- 随便聊几句关于UE3的Navigation Mesh
- 4.1 随便说几句 —— 关于USB主机系列
- 数据结构关于AOV与AOE网的区别
- 数据结构中关于链表的一个简单问题
- 关于数据结构
- 关于DEVMODE的数据结构--显示设备的属性(转)
- 回家前随便叨叨几句
- 数据结构:关于重建二叉树的三种思路
- 跪求一道关于c语言和数据结构的问题
- 关于数据结构中的一些排序算法
- 随便写几句,先熟悉熟悉。
- 关于Java的数据结构中物理结构和逻辑结构的理解(早期)
- 【数据结构学习1】关于数据结构的栈的理解
- 关于SparkMLlib的基础数据结构Spark-MLlib-Basics
- 关于java数据结构hashSet与TreeSet重写方法的格式
- 关于数据结构的学习经验分享 (字符串相关的)
- 关于数据结构的学习经验分享 (二叉树相关的内容)
- 关于unity安装简单说几句
- 自己看的,随便写,贴。关于Android里面的Style(样式)和主题(Theme)资源