초보자에게 공통적 인 데이터 구조에 문제가 있습니까? [닫은]

Java에 대한 두 번째 코스를 밟고 있습니다. 우리는 데이터 구조에 들어가고 있습니다. 나는 링크 된 목록에서 과제를 수행했으며 이제는 스택입니다. 나는 연결리스트와 함께 어려움을 겪었다. 스택으로 인해 약간의 문제가 발생했지만 훨씬 쉬워졌습니다.

이러한 알고리즘과 데이터 구조로 어려움을 겪을 까봐 걱정해야합니까? 나는 그것을 정말로 이해하지 못한 것처럼 느낍니다.



답변

나는 당신이이 것들을 이해하지 말아야한다고 생각합니다. 그것들은 정말로 근본적이기 때문입니다. 그러나, 당신이 그들을 이해하지 못하는 것은 나쁘지 않습니다. 자녀에게 연결된 목록을 설명 할 수 있습니다. 선생님이 당신에게 설명하지 못했다면 그것은 잘못입니다. 따라서 걱정하는 데 시간을 소비하지 말고 설명 할 수있는 사람을 찾으십시오. 종종 동료 학생은 정규 학업보다 훨씬 더 나은 교사입니다.

열차의 생각

각 캐리지에 충분한 용량이 있고 하나의 데이터를 포함 할 수있는 철도 캐리지 세트가 있다고 가정하십시오. 각 캐리지 끝에는 다른 종류의 후크가있어 다른 캐리지의 앞면에 부착 할 수 있습니다.
이것은 실제로 당신에게 연결된 목록을 제공합니다 :

  • 빈 목록 : 마차가없는 열차 (따라서 데이터가 없음)
  • 요소 추가 : 열차 앞에 요소가 포함 된 새 캐리지를 추가하고 나머지 열차에 연결하십시오.
  • 요소 제거 : 요소가 포함 된 캐리지를 찾으십시오. 그것을 제거하고 (여기서 크레인이 필요할 수도 있습니다) 캐리지 후에 캐리지를 연결하십시오.
  • 요소 교체 : 이전 요소가 포함 된 캐리지를 찾습니다. 이전 요소를 새 요소와 교환하십시오.
  • 요소 바로 다음에 요소 삽입 : 삽입하려는 요소가 포함 된 캐리지를 찾으십시오. 그 뒤에 새 캐리지를 삽입하십시오 (열차가 떨어지지 않게하려는 경우). 새 요소를 넣습니다.

이와 달리 어레이는 주어진 수의 캐리지가있는 열차로 생각할 수 있으며 어떤 방식으로도 재배치 할 수 없습니다. 당신이 할 수있는 것은 그 안의 데이터를 변경하는 것입니다. 이 모델은 또한 배열이 가진 많은 문제를 설명합니다 :

  • 한 요소를 다른 요소 앞에 삽입하려면 다음 요소를 모두 다음 캐리지로 이동해야합니다.
  • 하나의 요소를 제거하려면 다음의 모든 요소를 ​​하나의 캐리지 앞쪽으로 이동해야합니다.
  • 더 많은 마차가있는 열차가 필요한 경우, 단지 마차를 추가 할 수 없기 때문에 새 차를 만들어야합니다. 반면에 배열에서 캐리지를 찾는 것이 훨씬 쉽습니다. 단순히 영구적으로 번호를 매길 수 있기 때문입니다 (순서는 절대 바뀌지 않습니다).

스택과 관련하여 : “스택”은 아이디어보다 데이터 구조가 적습니다. 스택의 개념은 책의 스택과 매우 유사하게 작동한다는 것입니다. 책을 스택 위에 만 놓을 수 있으며 맨 위 책을 스택에서 꺼낼 수 있습니다 (적어도 책이 충분히 무거운 경우).
즉, 캐리지의 데이터를 책으로, 첫 번째 캐리지의 책을 스택의 최상위로 생각하면 연결된 목록을 스택으로 사용할 수 있습니다.

이것이 도움이 되었기를 바랍니다. 아닐 수도 있습니다. 아마도 당신은 더 시각적 인 유형일 것입니다. 이 경우 시각적 설명을 잘 해주고 설명해 줄 수있는 사람을 찾으십시오. 오래 걸리지는 않지만 절대적으로 가치가 있습니다.

지금이 문제를 해결해도 괜찮습니다. 그러나 단지 그것을 받아들이는 것은 장기적으로 옵션이 아닙니다.


답변

나는 당신이 그것에 대해 “걱정해야한다”고 말하지는 않겠지 만, 당신이 약점을 인정한다는 단순한 사실은 당신이 어디에서 더 열심히 공부해야하는지 정확히 알고 있다는 것을 보여줍니다. 나는 당신이 그 태도에 잘 적응하고 장기적으로 괜찮을 것이라고 생각합니다.


답변

내가 좋아하는 CSCI 선생님을 인용하려면 :

"Panic, but panic early."

데이터 구조가 어렵게 들립니까? 나에게는 그것이 추상적이며 약간 복잡하고 무엇보다도 중요합니다!

데이터 구조는 필수 과정입니다. 그리고 싸우는 것이 일반적이지만 계속 진행하십시오! 당신이 당신의 Wheaties를 먹고 그것을 유지하는 한, 당신은 아래에 bag가득 채워진 무지개에 도달합니다 generic items.


답변

다른 답변에서 아주 좋은 점은 추가 할 한 가지 참고 사항입니다 .IMO 연결 목록은 간접 참조 ( 참조 / 포인터 를 통해 표현 됨)를 기반으로하기 때문에 많은 사람들에게 스택보다 더 어려울 수 있습니다 . 그리고 이러한 기본 개념은 이해하기 어려울 수 있습니다 .


답변

데이터 구조는 내가 처음으로받은 “하드”클래스였습니다. 우리는 Java 대신 Fortran 77을 사용했지만 개념은 거의 동일합니다.

링크 된 목록의 개념을 이해하는 데 반 친구보다 일주일이 걸렸습니다. 과제를 연기했지만 교수와 약간 실망스러운 두 번의 회의를 마친 후 마침내 클릭했습니다 (마침내; 마지막으로 이해했을 때 머리에서 “클릭”소리가 들렸습니다).

CS 커리큘럼 어딘가에 문제 가 있습니다. 약점이 어디에 있는지, 어떻게 해결해야하는지 이해한다면 걱정할 필요가 없습니다.


답변

연결된 목록을 이해하는 데 어려움이 있었거나 구현에 문제가 있었습니까?

새로운 프로그래머가 어려움을 겪는 것은 드문 일이 아닙니다 . 글을 쓸 때 실제로 무엇을 의미 하는지 생각해야 할 수도 있습니다 .

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

언어 의미를 제대로 이해하지 못했기 때문에 동일한 연습에서 ALGOL / W에서 모두 뒤틀 렸습니다. 1 년 후, 나는 왜 어려움을 겪었는지 간신히 기억할 수있었습니다.


답변

소프트웨어 개발 분야에는 다른 분야보다 어려운 분야가 있습니다. 특정 알고리즘이든, 특정 디자인 패턴 또는 특정 절차인지에 따라 사람마다 다릅니다. 나는 그것을 완전히 이해하기 전에 실제 프로그램에서 무언가를 사용해야한다는 것을 알았습니다.

누군가가 모든 것을 알고 있다고 주장하고 무언가를 배우는데 문제가 발생하지 않았다면 더 걱정할 것입니다.

개인적으로 나는 연결리스트에 문제가있는 것 같지 않았지만, 8 년 동안 어느 곳에서나 사용했던 프로그램 에서 일하면서 매일 같이 일했다. 만큼 당신이 알고있는 곳에 당신이 당신의 기억을 상기하고 “문제”가 영역을 알고 필요한 정보를 찾을 수 당신은 확인을해야합니다.