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


17

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

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


링크 된 목록의 실제 예 - stackoverflow.com/questions/644167/...
pramodc84

답변:


44

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

열차의 생각

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

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

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

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

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

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

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


2
멋진 답변! 플래시 / 기타 게임을 통해 일련의 목표를 달성하여 아이들에게 기본 데이터 구조를 가르 칠 수 있다는 것을 깨달았습니다. 같은 열차 개념은 각 열차 차량이 이웃 차량보다 2 배 크고 작은 경우 아이들이 이진수를 파악하는 데 도움이 될 수 있습니다.
Job

1
자 이제 알았으니 이제 여러 개의 링크가있는 데이터 구조로 넘어 갑시다. 따라서 열차는 측면에 장애가 발생하여 다른 차량에 연결할 수 있습니다. 그러나 그 차를위한 레일은 첫 번째 트랙 옆에있는 슬라이드들 ...
Philip Philip

12

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


6

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

"Panic, but panic early."

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

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


공황이 빠짐을 의미합니까? 데이터 구조 후에는 수학 요구 사항, 알고리즘, OS, AI, 컴파일러, 계산 이론이 있습니다 ... 어머니를 쉽게 구할 수는 없지만 더 이상 신입생이 아니거나 2 학년이 아니라는 사실조차도 도움이됩니다. 물건이 점점 어려워지고 있지만.
Job


3

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

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

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


1
당황하지 말고 계속 일하고 클릭을 기다리십시오 ...
NWS

2

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

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

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

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


1

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

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

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


또한 이러한 데이터 구조를 사용하는 프로그램과 상호 작용할 수 있으면 도움이 될 것이라고 생각합니다. 나는 내가 묻고있는 단계에 있는데 왜 이것이 유용한가?
Brock

0

나는 미적분학에 문제가 있었고 두 번째로 가져 가야했습니다. 두 번째로 내가 똑똑하다는 것을 알았지 만 첫 번째 수학 교사는 기본적으로 쓸모가 없었습니다. :)

IT에서 의사 소통을 잘 할 수없는 많은 사람들을 찾을 것입니다. 반면에 IT의 일부 사람들은 훌륭한 작가이자 마스터 커뮤니케이터입니다.

때로는 외부 독서가 실제로 도움이 될 수 있습니다. 컴퓨터 서적의 품질은 매우 다양합니다. 아마존에 올라 사람들이 실제로 좋아하는 책을 확인하십시오.

행운을 빕니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.