꾸물꾸물 졔의 개발공부
02/08(2) - 리스트 (순차리스트 ,연결리스트) 본문
리스트 : 순서를 가진 데이터의 집합
- 순차 리스트 : 배열을 기반으로 한 리스트
- 연결 리스트 : 메모리의 동적 할당 ( 즉 , 객체 ) 를 기반으로 한 리스트
[ 순차리스트 - ArrayList ]
삽입 : 중간에 값을 삽입, 기존의 있던 그 이후의 값들은 뒤로 한칸씩 밀려나게 됨
삭제 : 중간의 값을 삭제, 기존으 있던 그 이후의 값들은 앞으로 한칸씩 오게 됨
--> 연속적인 메모리 관리를 해야하기 때문에 삽입이나 삭제시 메모리의 이동이 필요
, 이러한 연산들이 많아지면 오버헤드가 발생하고 데이터 관리 소요시간이 증가하게 됨
--> 배열의 크기가 정해져 있기 때문에, 너무 크게 만들면 메모리 낭비 / 너무 작게 만들면 배열 복사 작업 많아짐
오쪼라고 ,,, 잘만들어라고 ,,,
[ 연결리스트 - LinkedList ]
데이터 즉, 자료의 논리적인 순서와 물리적인 순서가 다름
- 논리적인 순서는 서로 연결되 있더라도, 객체를 기반으로 관리하기 떄문에 , 물리적인 순서는 따로 없음
각자 독립적이고 개별적인 원소로 위치하고 있는데, 멀리 떨어져있더라도 각각의 원소를 연결하여서 하나의 자료구조 !
--> 메모리가 동적으로 할당 되어있고 객체로서 관리하기 때문에, 크기 또한 동적으로 관리가 가능
즉, 메모리의 효율적인 사용이 가능하다
- 노드 ( Node ) : 데이터 필드 ( 데이터 , 값 ) + 링크 필드 ( 다음 노드의 참조값 )
- 헤드 ( Head ) : 가장 첫 노드를 가리키고 있음, 헤드가 가장 첫 노드를 가리키므로써, 뒤의 모든 노드들이 일자로 연결
1) 단순 연결 리스트 : 가장 기본적인 연결리스트의 구조 , 선형리스트
: 각 노드가 하나의 데이터 필드와, 하나의 링크 필드로 이루어져 있음
-> 문제점 : 중간의 노드를 빼기 위해선, 그 노드의 바로 직전 값과 직후 값을 연결시켜주어야 하는데, 이전 노드에 대한 정보는 가지고 있지 않기 때문에, 그에 대한 정보를 얻기 위해선 헤드 부터 다시 읽으면서 직전 노드를 찾아내야함 !
2) 이중 연결 리스트 : 두개의 링크필드를 가지고 있어, 직전 값과 직후 값 두개를 참조 할 수 있음
: 단순 연결리스트의 문제점을 해결 할 수 있음 - 이전노드의 정보도 가지고 있기 떄문에 ,처음부터 하나하나 다시 탐색할 필요가 없어짐
-> 문제점 : 하지만 두개의 참조를 관리해야하기 때문에 단순 연결리스트 보다는 관리의 어려움이 있음
3) 원형 연결 리스트 : 마지막에서 처음으로 연결이 가능
: 기본 단순 연결리스트는 중간값을 참조하게 되면, 한방향으로만 흐르기 때문에, 그 이후값만 읽어드릴 수 있었다.
하지만 원형리스트로 마지막값과 처음값을 연결하게 되면, 그 이전값도 읽을 수 가 있다 .
'SSAFY' 카테고리의 다른 글
02/10(2) - 이진트리 (0) | 2022.02.10 |
---|---|
02/10(1) - 트리 (0) | 2022.02.10 |
02/08 - 스택 , 큐 (0) | 2022.02.08 |
02/03 - 표준입출력 , 재귀 (0) | 2022.02.04 |
01/26 - 자료구조 ( list, set, map ) (0) | 2022.01.29 |