일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- AWS EC2 구현
- 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 2장
- 오늘도
- jpa
- Flexbox
- 테스트코드
- 트랜지스터
- 스프링부트와 AWS로 혼자 구현하는 웹서비스
- 기술면접
- 그래도일단
- 자바스크립트
- CS
- 내가해냄
- 운영체제
- 개발자기술면접
- 스프링부트와 AWS로 혼자 구현하는 웹 서비스
- 어찌저찌해냄
- 스프링부트
- 스프링 부트와 AWS로 혼자 구현하는 웹 서비스
- 스프링부트 테스트코드
- Today
- Total
목록자료구조와 알고리즘 (7)
개발 공부
peek : 연결 리스트의 특정 node를 살펴보는 메소드 peekFirst() 리스트가 비어 있으면 NullPointerException 에러가 발생하므로 미리 처리한다. public E peekFirst(){ if (head == null) return null; return head.data; } peekLast() 임시 포인터 tail을 사용하여 시간복잡도가 O(n)로 처리될 수 있도록 한다. public E peekLast(){ if (tail == null) return null; return tail.data; }
remove() : 임의의 위치의 노드를 제거하는 메소드 1. 제거하고 싶은 요소의 위치를 찾을 때, head == tail처럼 비교연산을 쓰지 않고 Comparable 인터페이스의 compareTo()를 오버라이딩 해서 사용한다. ==는 객체들에 할당된 메모리값을 비교하게 되기 때문이다. 2. 바로 앞 노드(A)의 next 포인터가 다음 노드(C)를 가리키게 만들어 가운데 노드(B)를 제거한다. previous, current 2가지 포인터를 사용하여 각각 바로 앞의 노드(A)와 제거하고자 하는 노드(B)를 가리키게 한다. 노드가 1개만 있는 경우, 첫 번째 노드를 제거하는 경우 -> removeFirst(); 마지막 요소를 제거하는 경우 -> removeLast(); 리스트가 비어 있을 경우 -> h..
removeFirst : 연결 리스트의 첫 노드를 제거하는 메소드 첫 노드(A)를 제거하고자 한다면, 첫 노드를 가리키는 head가 head.next(B)를 가리키도록 하여 A를 가리키는 포인터가 없게 하고, 그 안에 있는 데이터에 저장된 객체를 제거한다. 하지만 경계 조건을 고려하지 않으면 에러가 발생하므로 코드를 추가해야 한다. https://paradiseiswhereiam.tistory.com/124 자료구조의 경계 조건 : 연결 리스트를 문제없이 사용하기 위해 고려해야 하는 것 1. 자료 구조가 비어 있을 때 ex. 만약 연결리스트의 요소 하나를 제거했을 때, 연결 리스트가 비게 된다면 어떻게 해야 paradiseiswhereiam.tistory.com 경계 조건1. 자료 구조가 비어 있는 경우..
addFirst 메서드 : 새로운 노드를 연결 리스트의 앞부분의 추가하는 방법 1. 새로운 노드를 만든다. 2. 새로운 노드의 next가 현재 head를 가리키도록 한다. 3. head 포인터가 다시 새로운 노드를 가리키도록 한다. public void addFirst(E obj){ Node node = new Node(obj); node.next = head; // 새로 생긴 노드의 next를 기존의 노드를 가리키는 head로 설정 head = node; // 기존의 노드를 가리키는 head를 새로 생긴 노드를 가리키도록 설정 currentSize++; } (두 번째 줄 왜 자꾸 공백이 들어가는,,,) 위의 순서는 잘 지켜줘야 한다. head가 가리키는 값을 node로 바꾸는 것을 먼저 한다면, 기존에..
: 연결 리스트를 문제없이 사용하기 위해 고려해야 하는 것 1. 자료 구조가 비어 있을 때 ex. 만약 연결리스트의 요소 하나를 제거했을 때, 연결 리스트가 비게 된다면 어떻게 해야 하는가? 또 무언가를 추가할 때 비어있을 때와 그렇지 않을 때 추가하는 작업이 어떻게 다를 것인가? 2. 자료 구조에 단 하나의 요소가 들어있을 때 3. 자료 구조의 첫 번째 요소를 제거하거나 추가할 때 ex. 자료 구조의 맨 앞에 요소를 추가하는 경우 헤드를 주의해야 하고 헤드를 어떻게 처리할지도 생각해야 함 4. 자료 구조의 마지막 요소를 제거하거나 추가할 때 5. 자료 구조의 중간 부분을 처리할 때
연결 리스트 연결 리스트의 기본 구성 요소는 노드라는 작은 블록이다. 노드에는 인접한 노드를 가리키는 next라는 이름의 포인터와 우리가 노드에 넣는 데이터를 가리키는 포인터 총 2가지 정보가 들어 있다. 마지막 노드의 경우, next는 null을 가리키고 있다. 포인터는 어떤 공간을 가리키는 것이다. 위에서 말한 데이터도 사실은 포인터이다. 어떤 객체의 요소를 가리키는 것이다. 리스트는 head라는 이름으로 시작한다. head는 리스트의 첫 번째 노드를 가리킨다. 힙에서는 이 연결 리스트의 head만 알고 있기 때문에, head.next, head.data 이런 식으로 노드의 내용을 찾는다. 연결 리스트의 길이가 길다면, head.next.next.next... next와 같이 찾는다는 듯이다. 하지만..