É comum ter problemas com estruturas de dados para iniciantes? [fechadas]


17

Estou fazendo meu segundo curso em Java. Estamos entrando em estruturas de dados. Eu fiz uma tarefa em uma lista vinculada e agora uma pilha. Eu tive um tempo difícil com a lista vinculada. A pilha me deu um pequeno problema, mas foi muito mais fácil.

Deveria me preocupar em ter dificuldades com esses algoritmos e estruturas de dados? Eu apenas sinto que realmente não entendi.


Exemplo do mundo real da lista vinculada - stackoverflow.com/questions/644167/...
pramodc84

Respostas:


44

Eu acho que você não deve aceitar não entender essas coisas, porque elas são realmente fundamentais. Dito isto, você não os entende não é nada para se sentir mal. Você pode explicar uma lista vinculada a um filho. Portanto, se o seu professor falhou em explicá-las para você, a culpa é sua. Portanto, você não deve gastar tempo se preocupando, mas tente encontrar pessoas que possam explicar isso a você. Muitas vezes, um colega é um professor muito melhor do que um acadêmico em período integral.

Pense em trens

Imagine, você tem um conjunto de vagões ferroviários, em que cada vagão tem capacidade suficiente, para conter um dado. Cada carro possui algum tipo de gancho no final, que pode ser anexado à frente de outro carro.
Na verdade, isso fornece uma lista vinculada:

  • a lista vazia: o trem que não contém vagões (e, portanto, sem dados)
  • adicionando um elemento: adicione um novo carro contendo o elemento na frente do trem e conecte-o ao restante do trem
  • removendo um elemento: encontre o carro que contém o elemento. Remova-o (você pode precisar de um guindaste aqui :)), prenda o carro antes com o carro depois.
  • substituindo um elemento: encontre o carro que contém o elemento antigo. Troque o elemento antigo pelo novo elemento.
  • Inserir um elemento logo após o outro: encontre o carro que contém o elemento após o qual deseja inserir. Insira um novo carro depois dele, que seja enganchado de acordo (não queremos que o trem desmorone) e coloque o novo elemento nele.

Em contraste com isso, você pode pensar em uma matriz como um trem com um determinado número de vagões, que não pode ser reorganizado de nenhuma maneira. Tudo o que você pode fazer é alterar os dados dentro deles. Este modelo também explica muitos dos problemas que as matrizes têm:

  • Se você deseja inserir um elemento antes de outro, precisará mover todos os seguintes elementos para o próximo carro.
  • Se você deseja remover um elemento, será necessário mover todos os seguintes elementos de um carro para a frente.
  • Se você precisar de um trem com mais vagões, terá que construir um novo, porque não pode simplesmente acrescentar um vagão. Por outro lado, encontrar carruagens em uma matriz é muito mais fácil, porque você pode simplesmente numerá-las permanentemente (a ordem delas nunca muda).

Quanto à pilha: Uma "pilha" é menos uma estrutura de dados do que uma ideia. A idéia da pilha é que ela age como uma pilha de livros. Você só pode colocar livros no topo da pilha e apenas tirar o livro de cima da pilha (pelo menos se os livros forem suficientemente pesados).
Dito isto, uma lista vinculada pode ser usada como uma pilha, se você considerar os dados nos carros como livros e o livro no primeiro carro como o topo da pilha.

Então, espero que isso tenha ajudado. Talvez não. Talvez você seja mais do tipo visual. Nesse caso, sugiro que você encontre alguém que seja bom em dar explicações visuais e explique a você. Não vai demorar muito, mas valerá a pena.

Não há problema em lutar com isso agora. Mas apenas aceitá-lo, não é uma opção a longo prazo.


2
Resposta legal! Me fez perceber que era possível ensinar estruturas básicas de dados para crianças através de um jogo flash / outro com uma série de objetivos a serem concluídos. A mesma idéia de trens também pode ajudar as crianças a entenderem números binários, se cada vagão for duas vezes maior e menor que o vizinho.
Job

1
Ok, agora que você conseguiu, vamos passar para estruturas de dados com vários links. Portanto, o trem tem um problema do lado, que pode ser ligado a outro conjunto de carros. Mas o trilho para aqueles carros tipo de desliza ao longo ao lado da primeira faixa ...
Philip

12

Eu não diria que você "deveria estar preocupado" com isso, mas o simples fato de reconhecer seus pontos fracos mostra que você sabe exatamente onde estudar mais. Eu acho que você será bem servido por essa atitude e ficará bem a longo prazo.


6

Para citar meu professor favorito da CSCI:

"Panic, but panic early."

Estruturas de dados parece difícil, certo? Para mim, parece abstrato e um pouco complexo e acima de tudo ... importante!

Estruturas de dados é um curso vital. E é comum lutar, mas continue! Contanto que você comer seu Wheaties e mantê-la, você vai chegar ao arco-íris com um bagpreenchido com generic items baixo.


O pânico cedo implicaria o abandono? Depois das estruturas de dados, também existem requisitos matemáticos, algoritmos, SO, IA, compiladores, teoria da computação ... não fica mais fácil enlouquecer a mãe, mas talvez o fato de que não seja mais um calouro ou um aluno do segundo ano ajude embora as coisas estejam ficando mais difíceis.
Job


3

O Data Structures foi a primeira classe "difícil" que fiz; usamos o Fortran 77 em vez do Java, mas os conceitos são basicamente os mesmos.

Levei uma semana mais do que meus colegas de classe para entender o conceito de uma lista vinculada; Eu atrapalhei a tarefa, mas depois de algumas sessões um pouco frustrantes com meu professor, ela finalmente clicou (literalmente; ouvi um "clique" na minha cabeça quando finalmente entendi).

Todo mundo tem problemas em algum lugar do currículo de CS (a menos que sejam loucos). Se você entende onde estão suas fraquezas e como resolvê-las, não precisa se preocupar com nada.


1
Não se apavore, continuar a trabalhar e esperar que o clique ...
NWS

2

Você teve problemas para entender a lista vinculada ou apenas problemas com sua implementação?

Não é incomum para um novo programador ter dificuldade lá, porque pode ser a primeira vez que você precisa pensar no que realmente significa quando escreve:

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

Fiquei todo distorcido no ALGOL / W no mesmo exercício, porque não entendia bem a semântica da linguagem. Um ano depois, eu mal conseguia me lembrar por que tinha dificuldade.


1

É provável que algumas áreas do desenvolvimento de software sejam mais difíceis que outras. Sejam determinados algoritmos, certos padrões de design ou certos procedimentos, variarão de pessoa para pessoa. Acho que tenho que usar algo em um programa real antes de entendê-lo completamente.

Eu ficaria mais preocupado se alguém alegasse saber tudo e nunca tivesse tido problemas para aprender alguma coisa.

Pessoalmente, nunca pareci ter problemas com listas vinculadas, mas depois trabalhei em um programa por 8 anos que as usava em todos os lugares, então estava trabalhando com elas diariamente. Contanto que você saiba onde encontrar as informações necessárias para atualizar sua memória e conheça as áreas em que há "problemas", você deve ficar bem.


Eu também acho que ajudaria se eu pudesse interagir com um programa que também usa essas estruturas de dados. Estou no estágio em que me pergunto: por que isso seria útil?
Brock

0

Eu tive problemas com o cálculo e tive que fazer uma segunda vez. A segunda vez que descobri que era inteligente, mas o primeiro professor de matemática era basicamente inútil :)

Você encontrará muitas pessoas em TI que não conseguem se comunicar bem, até mesmo professores. Por outro lado, algumas pessoas em TI são realmente grandes escritores e comunicadores principais.

Às vezes, a leitura externa pode realmente ajudar. Os livros de informática variam enormemente em qualidade. Entre na Amazon e veja de que livro as pessoas realmente gostaram.

Boa sorte.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.