연결리스트 (LinkedList)
- in JAVA -
저번 '자료구조'포스팅에서 다룬 연결리스트를 이번에는 자바 환경에서 이용해볼거다.
앞 포스팅에선 C언어로 연결리스트, 각 메소드들을 일일이 구현해줬는데
실무에서나 알고리즘경연대회에서 그렇게 일일이 구현하기에는 시간도 오래 걸릴뿐더러
구현하는 법을 까먹기라도 한다면 큰일나는거다.
그래서 자바나 C++언어에서는 많이 쓰이는 자료구조들 STL을 제공해주는데
오늘은 연결리스트, LinkedList STL을 이용하는 내용을 다루겠다.
그럼 먼저 연결리스트 생성부터 해 볼거다.
1 2 3 4 5 6 7 8 | import java.util.LinkedList; public class Main { public static void main(String[] args) { LinkedList<Integer> list = new LinkedList<Integer>(); } } | cs |
LinkedList<넣을 데이터형태> 변수명 = new LinkedList<데이터타입>();
이처럼 연결리스트를 생성한다.
<데이터형태> 에는 Integer, Double, String 등 데이터타입들이 들어갈 수 있다.
또한 연결리스트를 이용하기 위해선 해당 라이브러리도 포함해줘야한다.
import java.util.LinkedList;
< LinkedList 변수 생성해 준 다음 Ctrl + Shift + O 를 눌러 쉽게 import 할 수 있다. />
그리고 연결리스트에는 데이터삽입, 삭제 등 메소드들이 있다.
이러한 기능들의 이용을 다음 예제로 알아보자.
[삽입, add]
1 2 3 4 5 6 7 8 9 | public static void main(String[] args) { LinkedList<Integer> list = new LinkedList<Integer>(); list.add(10); list.add(20); list.add(30); System.out.println(list); } | cs |
다음과 같이 add를 이용해 데이터들을 추가해 주는게 기본이다.
출력 값
결과는 10, 20, 30 순서대로 삽입된 것을 알 수 있다.
그럼 10과 20사이에 또다른 데이터를 삽입하고 싶다면 어떻게 할까?
다음 예제를 보면
1 2 3 4 5 6 7 8 9 10 | public static void main(String[] args) { LinkedList<Integer> list = new LinkedList<Integer>(); list.add(10); list.add(20); list.add(30); list.add(1, 15); System.out.println(list); } | cs |
바로 add(위치번호, 넣을데이터); 이와 같이 데이터와 데이터 사이에 새로운 데이터를 넣을 수 있다.
근데 왜 위치번호를 1이라고 쓰니까 10과 20사이에 새로운 데이터가 추가되었을까?
그건 바로 위치번호가 몇번이 어디인지를 알면 쉽게 이해할 수 있다.
바로 위 그림과 같이 위치번호가 지정되기 때문에 add(1, 15); 일 때 10과 20사이에 새로운값 15를 삽입한 것이다.
위치번호는 배열의 인덱스번호와 굉장히 유사하다고 볼 수 있다.
[삭제, remove]
데이터 삭제는 remove 메소드로 할 수 있다.
바로 예제를 보자.
1 2 3 4 5 6 7 8 9 10 11 12 | public static void main(String[] args) { LinkedList<Integer> list = new LinkedList<Integer>(); list.add(10); list.add(20); list.add(30); list.add(1, 15); list.remove(0); System.out.println(list); } | cs |
remove(위치번호); 로 데이터를 삭제할 수 있는데 위 예제의 결과를 보면 알 수 있듯
0번 위치에 있던 데이터 10이 삭제된 것을 알 수 있다.
[참조, get]
다음으로 리스트에서 원하는 위치의 데이터만 가져오는 메소드 get을 알아볼 것이다.
다음 예제를 보자.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public static void main(String[] args) { LinkedList<Integer> list = new LinkedList<Integer>(); list.add(10); list.add(20); list.add(30); list.add(1, 15); list.remove(0); System.out.println(list); System.out.println(list.get(2)); System.out.println(list.get(1)); } | cs |
예제를 보면 알 수 있듯 get(위치번호); 로 원하는 위치의 데이터를 가져올 수 있다.
이렇게 자바에서 제공되는 LinkedList STL로 연결리스트를 이용하는 법을 알아봤다.
다음 '자료구조' 포스팅은 제공된 STL을 이용해 구현하는 방법과 LinkedList로 구현하는 2가지 형태의 Stack을
포스팅해보겠다.
'자료구조' 카테고리의 다른 글
[벡터] 동적인 배열 벡터 Vector (in JAVA) (0) | 2019.02.19 |
---|---|
[스택] 스택 (What's Stack?) in JAVA (0) | 2019.02.17 |
[리스트] 리스트구조 - 연결리스트의 구현 (0) | 2019.01.26 |
[리스트] 리스트구조 - 배열로 구성된 리스트 (0) | 2019.01.25 |
[배열] 1차원 배열, 2차원 배열, 배열응용 (ft. 다항식) (0) | 2019.01.20 |