자료구조 + 알고리즘

ㅇsize() ㄴ자료를 갱신할때마다 size 필드값을 변경해왔기 때문에, 간단히 size 필드값만 리턴하면 된다. ㄴ만약 size필드값을 그때그때 수정해주지 않았더라면, size()메소드를 호출할 때 모든 노드의 인덱스를 돌면서 카운팅해야 해서 매우 무거웠을 것이다. ㅇget ㅇindexOf
++자바에서는 '삭제된' 노드가 갖고있었던 값을 리턴한다는거~! 기억하고 시작 ㅇremoveFirst() ㅇremove() ㄴ첫번째 인덱스, 끝 인덱스를 고려해 tail과 head를 따로 처리 ㅇremoveLast() LinkedList에서 하나의 노드는 next노드만 알고, 이전노드를 알 수 있는 정보는 없다. ㄴ다음에 배울 Doubly Linked List 이중연결리스트를 배울거다. 연결되는 방향이 양방향이다! 각각의 노드가 이전노드, 다음노드 가리키는 변수 다 가지고 있다. ㄴ근데 왜 LinkedList 쓰는데?? 다 장단점이 있는거다~! 공간(메모리)효율성 관련.
toString()을 재정의하지 않았다면 System.out.println(numbers); 했을 때 정제되지 않은 그런 문자열이 출력된다. (toString 복습하기) 그래서 LinkedList API에서 toString()을 직접 재정의해보자.
LinkedList에서 중간에 어떤 노드를 추가시키려면 1. 추가시키려는 인덱스의 이전 노드를 알아야 한다 2. 그 이전 노드의 넥스트로 연결을 해야 한다
Node class를 리턴하는 노드API를 작성해보자. Node클래스는 내부적으로 작동되기 때문에 public으로 선언하지 않는다고 한다. 일단 실행클래스에서 System.out.println()으로 numbers.node(0)값을 테스트해보려고 public으로 선언했다고 한다. 확인 후에 public을 지울 것이다. >>Node 객체를 직접 리턴하지 않을 것이다. 일단 작성한 Node 메소드 부분을 보자. x라는 노드 변수를 하나 만든다. 첫 값인 head값을 넣는다. 그리고 사용자가 입력한 index 수만큼 x=x.next라는 코드를 반복한다. x = x.next; x = x.next; x = x.next; . . . x에 계속 다음값, 다음값, ... 넣는 개념이다. 그럼 head값에서부터 inde..
하이~~자료구조 오랜만!! 살짝 복습하고 왔다. 요즘 맨날 하체근력운동하는 것처럼 꾸준히 자료구조 공부하자 으쌰으쌰 새로 추가한 addLast 메소드를 살펴보자. 확실히 필드, 메소드, 생성자, 도트연산자 등 학습하고 나니까 자료구조를 공부하기 수월해졌다.
(cf. linkedlist ---head, tail, size, node) addFirst를 구현해보자. 오타난걸 캡쳐했다.. 화살표가 가리키는 곳에 imput 아니고 input이다. 가장 먼저 input을 받아서 노드 객체를 생성해야 하므로 Node newNode = new Node(input); >>만들어 놓은 Node 클래스를 객체화한 것이다! "노드 객체를 생성" addFirst()가 호출 될 때마다 새로운 노드를 만든다. Node newNode = new Node(input); 이게 있으니까! ^-^ addFirst로 노드 객체를 만드는 거다. Node 클래스의 생성자인 public Node(Object input) 부분에 input값이 들어갈 거고, (자바: 객체의 생성과 동시에 인스턴스 변..
자바에서 LinkedList를 구현하는 방법을 보자. ArrayList와 내부적인 구현방법이 다르다는 것에 집중해서 배워보자. linkedlist는 arryalist처럼 내부적으로 배열을 사용하지 않는다. 객체를 만들고, 객체와 객체를 참조(연결)하는 방식의 linkedlist 노드(버텍스/엘리먼트)... 만들 거다 각각의 노드는 링크필드(변수)를 통해 연결될 것이다. 헤드 - 링크드리스트에서 누가 첫번째 노드인가? 테일 - 누가 끝 노드인가?
두 가지 데이터 조회 방법이 있다. 1. 77이라는 값을 가진 노드를 조회하겠다. 2. 네번째 자리 (인덱스3)에 있는 값을 가져오고 싶다. 순서대로 알아보자. 77이라는 값을 가진 노드를 조회하겠다. ( v = 77 이라고 visualgo.net에서 설정하고 간다. ) 간단하다. index = 0, temp = head while (temp.item !=v) index++, temp = temp.next if temp == null return NOT_FOUND 그냥 코드 읽어보면 다 알거다. 네번째 노드의 데이터를 조회하고 싶다면 어떻게 할까? 첫번째 노드로 접속하고, 넥스트하고 인덱스 카운트, 넥스트하고 인덱스 카운트.. 하면서 해당 인덱스로 왔을 때, 그 노드에 있는 값을 출력해주면 된다. '물어..
visualgo.net 접속하기! Linked List에서 데이터를 삭제하는 과정을 시각적으로 확인해보고, 코드도 살펴보자. 1. Vertex pre = head >>pre라는 노드를 헤드로 지정한다. '현재 head와 pre는 똑같이 15라는 노드를 가리키고 있다' 2. for (k=0 ; k < i-1 ; k++) pre = pre.next 먼저, 나는 인덱스3에 있는 데이터를 삭제하려고 i=3으로 입력했다. 그럼 인덱스2에 pre라는 자리를 줘야 한다. 인덱스3 이전 노드의 정보가 필요하니까! 그럼, 첫번째 노드부터, 인덱스2 노드까지 .next를 이용하여 가야 한다. pre = pre.next가 그것이다. k=0,1에서 수행이 된다. 3. Vertex del = pre.next, aft = del..
히어로맛쿠키
'자료구조 + 알고리즘' 카테고리의 글 목록 (3 Page)