¿Tener problemas con las estructuras de datos es común para los principiantes? [cerrado]

17

Estoy tomando mi segundo curso sobre Java. Estamos entrando en estructuras de datos. He hecho una tarea en una lista vinculada, y ahora una pila. Tuve un momento difícil con la lista vinculada. La pila me dio un pequeño problema, pero fue mucho más fácil.

¿Debería preocuparme por tener dificultades con estos algoritmos y estructuras de datos? Siento que realmente no lo entendí.

Brock
fuente
Ejemplo del mundo real de la lista vinculada: stackoverflow.com/questions/644167/…
pramodc84

Respuestas:

44

Creo que no debes aceptar no entender estas cosas, porque son realmente fundamentales. Dicho esto, no entenderlos no es nada por lo que sentirse mal. Puede explicar una lista vinculada a un niño. Entonces, si su maestro no se los explicó, es culpa suya. Por lo tanto, no debería pasar tiempo preocupándose, sino más bien tratar de encontrar personas que puedan explicárselo. A menudo, un compañero de estudios es un maestro mucho mejor que un académico de tiempo completo.

Piensa en trenes

Imagine que tiene un conjunto de vagones de ferrocarril, donde cada vagón tiene suficiente capacidad para contener una pieza de datos. Cada carro tiene algún tipo de gancho en su extremo, que se puede conectar al frente de otro carro.
De hecho, esto le da una lista vinculada:

  • la lista vacía: el tren que no contiene vagones (y por lo tanto no transporta datos)
  • agregar un elemento: agregue un nuevo carro que contenga el elemento en frente del tren y conéctelo al resto del tren
  • eliminar un elemento: encuentre el carro que contiene el elemento. Retírela (es posible que necesite una grúa aquí :)), enganche el carro antes con el carro después.
  • reemplazando un elemento: encuentre el carro que contiene el elemento antiguo. Intercambie el elemento antiguo con el nuevo elemento.
  • insertando un elemento justo después de otro: busque el carro que contiene el elemento después del cual desea insertar. Inserte un nuevo carro después, que se engancha en consecuencia (no queremos que el tren se desmorone) y coloque el nuevo elemento en él.

En contraste con eso, podría pensar en una matriz como un tren con un número determinado de vagones, que no se puede reorganizar de ninguna manera. Todo lo que puede hacer es cambiar los datos dentro de ellos. Este modelo también explica muchos de los problemas que tienen las matrices:

  • Si desea insertar un elemento antes que otro, deberá mover todos los siguientes elementos al siguiente carro.
  • Si desea eliminar un elemento, deberá mover todos los siguientes elementos un carro al frente.
  • Si necesita un tren con más vagones, tendrá que construir uno nuevo, porque no puede anteponer un vagón. Por otro lado, encontrar carruajes en una matriz es mucho más fácil, porque simplemente puede numerarlos permanentemente (su orden nunca cambiará).

En cuanto a la pila: una "pila" es menos una estructura de datos que una idea. La idea de la pila es que actúa como una pila de libros. Solo puede poner libros en la parte superior de la pila y solo puede sacar el libro superior de la pila (al menos si los libros son lo suficientemente pesados).
Dicho esto, una lista vinculada se puede usar como una pila, si piensa en los datos de los vagones como libros, y el libro en el primer carro como la parte superior de la pila.

Así que espero que esto te haya ayudado. Quizás no lo hizo. Tal vez eres más de un tipo visual. En ese caso, le sugiero que encuentre a alguien que sea bueno para dar explicaciones visuales y se las explique. No tomará mucho tiempo, pero valdrá la pena.

Está bien luchar con esto ahora. Pero simplemente aceptarlo no es una opción a largo plazo.

back2dos
fuente
2
Buena respuesta! Me di cuenta de que uno podía enseñar estructuras básicas de datos a los niños a través de un juego flash / otro con una serie de objetivos que completar. La misma idea de trenes también puede ayudar a los niños a comprender los números binarios, si cada vagón de tren es 2 veces más grande y más pequeño que su vecino.
Trabajo
1
Ok, ahora que lo tienes, pasemos a las estructuras de datos con múltiples enlaces. Por lo tanto, el tren tiene un enganche a su lado, que puede engancharse a otro conjunto de vagones. Pero el riel para esos autos se desliza junto a la primera pista ...
Philip
12

No diría que "debería estar preocupado" al respecto, pero el simple hecho de que reconozca sus puntos débiles muestra que sabe exactamente dónde estudiar más. Creo que esa actitud te servirá bien y que a la larga estarás bien.

Dave Nay
fuente
6

Para citar a mi profesor favorito de CSCI:

"Panic, but panic early."

Estructuras de datos suena difícil, ¿verdad? Para mí, suena abstracto y un poco complejo y sobre todo ... ¡importante!

Las estructuras de datos son un curso vital. Y es común luchar, ¡pero sigue adelante! Mientras comas tus Wheaties y sigas así, llegarás al arco iris con un bagrelleno generic items debajo.

Adel
fuente
¿El pánico temprano implicaría abandonar? Después de las estructuras de datos también hay requisitos matemáticos, algoritmos, sistema operativo, inteligencia artificial, compiladores, teoría de la computación ... no es más fácil volverse loco, pero tal vez el hecho de que uno ya no sea un estudiante de primer año o un estudiante de segundo año ayuda incluso aunque las cosas se están poniendo más difíciles.
Trabajo
3

Muy buenos puntos en otras respuestas, solo una nota para agregar: las listas vinculadas de la OMI pueden ser más difíciles que, por ejemplo, las pilas para muchas personas porque se basan en la indirección (expresada a través de referencias / punteros ). Y estos conceptos subyacentes pueden ser difíciles de comprender .

Péter Török
fuente
3

Data Structures fue la primera clase "dura" que tomé; Utilizamos Fortran 77 en lugar de Java, pero los conceptos son en gran medida los mismos.

Me tomó una semana más que mis compañeros de clase comprender el concepto de una lista vinculada; Hice la tarea, pero después de un par de sesiones ligeramente frustrantes con mi profesor, finalmente hizo clic (literalmente; escuché un "clic" en mi cabeza cuando finalmente entendí).

Todos tienen problemas en algún lugar de su plan de estudios de CS (a menos que sean fanáticos). Si comprende dónde están sus debilidades y cómo abordarlas, realmente no tiene nada de qué preocuparse.

John Bode
fuente
1
No entre en pánico, siga trabajando y espere el clic ...
NWS
2

¿Tuvo problemas para comprender la lista vinculada o simplemente problemas con su implementación?

No es inusual que un nuevo programador tenga dificultades allí, porque puede ser la primera vez que tenga que pensar en lo que realmente significa cuando escribe:

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

Me retorcí en ALGOL / W en el mismo ejercicio, porque no entendía la semántica del lenguaje. Un año después, apenas podía recordar por qué tenía dificultades.

Kevin Cline
fuente
1

Es probable que algunas áreas de desarrollo de software le resulten más difíciles que otras. Ya sea que se trate de ciertos algoritmos, o ciertos patrones de diseño o ciertos procedimientos, variarán de persona a persona. Me parece que tengo que usar algo en un programa real antes de entenderlo completamente.

Estaría más preocupado si alguien afirmara saberlo todo y nunca hubiera tenido problemas para aprender algo.

Personalmente, nunca tuve problemas con las listas vinculadas, pero luego trabajé en un programa durante 8 años que las usaba en todas partes, así que trabajaba con ellas a diario. Siempre que sepa dónde encontrar la información que necesita para actualizar su memoria y las áreas donde tiene "problemas", debería estar bien.

ChrisF
fuente
También creo que ayudaría si pudiera interactuar con un programa que también utiliza estas estructuras de datos. Estoy en la etapa donde me pregunto, ¿por qué serían útiles?
Brock
0

Tuve problemas con el cálculo y tuve que tomarlo por segunda vez. La segunda vez descubrí que era inteligente, pero el primer profesor de matemáticas era básicamente inútil :)

Encontrará a muchas personas en TI que no pueden comunicarse bien, incluso maestros. Por otro lado, algunas personas en TI son realmente excelentes escritores y comunicadores maestros.

A veces, la lectura externa realmente puede ayudar. Los libros de computadora varían enormemente en calidad. Entra en Amazon y mira qué libro le gusta a la gente.

Buena suerte.

Glen P
fuente