初学者常见的数据结构有麻烦吗?[关闭]


17

我正在上第二门Java课程。我们正在进入数据结构。我已经在一个链表上做了一个分配,现在是一个堆栈。我在链接列表上遇到了麻烦。堆栈给我带来了一些麻烦,但要容易得多。

我应该担心使用这些算法和数据结构时遇到困难吗?我只是觉得我不太了解它。


链表的现实世界的例子- stackoverflow.com/questions/644167/...
pramodc84

Answers:


44

我认为,您一定不能接受不了解这些内容,因为它们确实是基础。话虽如此,您对它们的不了解并不令人感到难过。您可以向孩子解释链接列表。因此,如果您的老师未能向您解释它们,那也是他们的错。因此,您不应该花时间担心,而应该尝试寻找可以向您解释的人。通常,与全日制学生相比,同伴学生要好得多。

想想火车

想象一下,您有一组铁路运输车,其中每个运输车都有足够的容量来容纳一个数据。每个托架的末端都有某种挂钩,可以将其连接到另一个托架的前面。
实际上,这为您提供了一个链接列表:

  • 空列表:不包含车厢(因此不携带数据)的火车
  • 添加元素:在火车前面添加一个包含该元素的新车架,并将其挂接到火车的其余部分
  • 删除元素:找到包含该元素的笔架。卸下它(您可能在这里需要吊车),先钩住支架,再把支架钩住。
  • 替换元素:找到包含旧元素的笔架。用新元素替换旧元素。
  • 紧接着插入一个元素:找到包含要在其后插入元素的笔架。在它后面插入一个新的托架,该托架相应地挂了钩(我们不希望火车掉下来),然后将新的元件放入其中。

与此相反,您可以将数组视为具有给定数量的车厢的火车,无法以任何方式重新排列。您所要做的就是更改其中的数据。此模型还说明了数组存在的许多问题:

  • 如果要在另一个元素之前插入一个元素,则必须将以下所有元素移至下一个笔架。
  • 如果要删除一个元件,则需要将以下所有元件向前移动一个托架。
  • 如果您需要一列载有更多车厢的火车,那么您将不得不建造一架新的火车,因为您不能仅仅在车厢前添加一个。另一方面,在阵列中查找支架要容易得多,因为您可以简单地对其进行永久编号(它们的顺序永远不会改变)。

至于堆栈:“堆栈”不是一个数据结构,而是一个想法。堆叠的想法是,它的行为很像一堆书。您只能将书堆放在堆栈顶部,也只能将顶书从堆栈中取出(至少在书足够重的情况下)。
话虽如此,如果您将笔架中的数据视为书籍,而将最前面的笔架中的书视为堆栈的顶部,则可以将链接列表用作堆栈。

所以我希望这对您有所帮助。也许不是。也许您更喜欢视觉类型。在这种情况下,我建议您找一个擅长给出视觉解释并向您解释的人。不会花很长时间,但是绝对值得。

现在可以为此作斗争。但是,从长远来看,仅仅接受它不是一个选择。


2
很酷的答案!让我意识到,可以通过Flash /其他游戏向孩子传授基本数据结构,并完成一系列目标。如果每辆火车的车厢大小都比其邻居大2倍或2倍,那么同样的想法也可以帮助孩子们掌握二进制数。
工作

1
好的,现在您已经了解了,让我们进入具有多个链接的数据结构。因此,火车侧面有挂车,可以挂在另一组车上。但是这些车的轨道在第一条轨道旁滑动……
菲利普(Philip)

12

我不会说您“应该为此担心”,但是您承认自己的弱点这一简单事实表明,您确切地知道该在哪里学习。我认为您会以这种态度得到很好的服务,从长远来看会没事的。


6

引用我最喜欢的CSCI老师:

"Panic, but panic early."

数据结构听起来很难,对吗?对我来说,听起来很抽象,有点复杂,而且最重要的是……很重要!

数据结构是至关重要的课程。挣扎是很常见的,但是要继续努力!只要您吃掉了Wheaties并坚持下去,下面就会bag充满彩虹,到达彩虹generic items


恐慌过早意味着退学?在数据结构之后,还存在数学要求,算法,OS,AI,编译器,计算理论……这并没有变得那么容易,但是也许不再是大一或大二的事实甚至可以帮上忙。虽然事情变得越来越难。
工作


3

数据结构是我学习的第一门“硬”课。我们使用Fortran 77代替Java,但是概念基本相同。

我比同班同学花了一个星期多的时间来理解链接列表的概念。我宽恕了作业,但在与教授进行了几次令人沮丧的交谈后,它终于发出了响声(字面意思;当我终于理解时,我听到了“喀哒”声)。

每个人都有困难的地方在他们的CS课程(除非他们是怪胎)。如果您了解自己的弱点在哪里以及如何解决这些弱点,那么您真的不必担心。


1
不要惊慌,继续工作,等待点击……
NWS

2

您是否在理解链表时遇到麻烦,还是在实现方面遇到麻烦?

新程序员在那里遇到困难并不罕见,因为这可能是您第一次考虑在编写时的真正含义:

list.head = null;
Element e = new Element(...);
e.next = list.head;
list.head = e;

在同一练习中,我全神贯注地使用ALGOL / W,因为我不太了解语言语义。一年后,我几乎不记得为什么会有困难。


1

您肯定会发现某些软件开发领域比其他领域更难。无论是某些算法,某些设计模式还是某些程序,都将因人而异。我发现我必须在真正的程序上使用某些东西,才能完全理解它。

如果有人声称自己知道这一切并且从未经历过学习问题的经历,我会更担心。

就个人而言,我似乎从来没有遇到过链表问题,但是后来我从事了一个程序工作了8年,该程序在所有地方都使用过,因此我每天都在与他们一起工作。只要您知道在哪里可以找到需要刷新信息的信息,并且知道“问题”所在的区域,就可以了。


我还认为,如果我可以与使用这些数据结构的程序进行交互,也会有所帮助。我正要问自己一个问题,为什么这些有用?
布鲁克(Brock)

0

我在微积分方面遇到麻烦,不得不第二次参加。第二次我发现自己很聪明,但是第一位数学老师基本上没用:)

您将在IT中找到很多沟通不好的人,甚至是老师。另一方面,IT领域的某些人确实是伟大的作家和大师沟通者。

有时,户外阅读确实有帮助。电脑书籍的质量差异很大。上亚马逊,看看人们喜欢什么书。

祝好运。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.