일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 오라클
- ORACLE JOIN
- 오라클 제약조건
- 백준 자바
- 자료구조
- oracle constraints
- 백준 2437
- 오라클 인라인뷰
- 도서관 관리
- 자바 자료구조
- 오라클 쿼리 함수
- 자바 예제
- JAVA공부
- 오라클 기본 쿼리
- 제약조건 확인
- JAVA 예제
- 오라클 쿼리문
- java실습
- java 도서관관리프로그램
- java 백준
- 백준 저울
- 코딩
- 제약조건 설정
- 자바 알고리즘
- 백준 문제
- 자바
- java프로젝트
- 도서관관리프로그램
- java
- 오라클 그룹 함수
- Today
- Total
DEVELOPER NOMAD
[JAVA 자료구조 LinkedList] 만들기 실습 (JAVA 자료구조 연결리스트 만들기 실습) 본문
[JAVA 자료구조 LinkedList] 만들기 실습 (JAVA 자료구조 연결리스트 만들기 실습)
DEVELOPER NOMAD 2019. 1. 4. 16:16안녕하세요 ~!
java로 연결리스트를 만들어 보았습니다.
먼저 메소드 정의 부분은 다음과 같습니다.
public interface MyLinkedList<E> {
public int size(); // 데이터 개수 구하기
public void addFirst(E e); // 첫번째 위치에 데이터 추가
public boolean add(E e); // 마지막 위치에 데이터 추가
public boolean add(int index, E e); // 특정 위치에 데이터 추가
public boolean remove(E e); // 데이터 삭제
public E remove(int index); // 데이터 삭제
public E removeFirst(); // 처음 데이터 삭제
public E removeLast();// 마지막 데이터 삭제
public void clear();// 모든 데이터 삭제
public E get(int index); // 특정 인덱스의 데이터 반환
public int indexOf(E e); // 데이터의 인덱스 반환
public E set(int index, E e); // 특정 인덱스의 데이터 수정
public MyIterator<E> iterator(); // 반복자
}
구현부분은 아래와 같습니다 ~!
public class MyLinkedListImpl<E> implements MyLinkedList<E>{
private Node<E> head;
private Node<E> tail;
private int size = 0;
private class Node<T> {
private T data; // 데이터
private Node<T> next; // 다음 데이터의 주소
public Node(T e) {
this.data = e;
this.next = null;
}
}
private Node<E> node(int index) {
if(index<0 || index>size)
return null;
Node<E> node = head;
for(int i=0; i<index; i++) {
node = node.next;
}
return node;
}
@Override
public int size() {
return size;
}
@Override
public void addFirst(E e) {
Node<E> node = new Node<>(e);
if(size==0) {
head = tail = node;
tail.next = null;
} else {
node.next = head;
head = node;
}
size++;
}
@Override
public boolean add(E e) {
if(size==0) {
addFirst(e);
} else {
Node<E> node = new Node<>(e);
tail.next = node;
tail = node;
size ++;
}
return true;
}
@Override
public boolean add(int index, E e) {
if(index < 0 || index > size)
throw new ArrayIndexOutOfBoundsException("size:"+size+", index="+index);
if(index==0) {
addFirst(e);
} else {
Node<E> t1 = node(index-1);
Node<E> t2 = t1.next;
Node<E> newNode = new Node<>(e);
t1.next = newNode;
newNode.next = t2;
size++;
if(newNode.next==null) {
tail = newNode;
}
}
return true;
}
@Override
public boolean remove(E e) {
Node<E> node = head;
Node<E> before = null;
while(node != null) {
if(node.data.equals(e)) { // 만약 삭제할데이터라면 실행.
if(node == head) {
head = node.next;
if(head == null) {
head = tail = null;
}
} else {
before.next = node.next;
if(before.next == null) {
tail = before;
}
}
size--;
node = null;
return true;
}
before = node;
node = node.next;
}
return false;
}
@Override
public E remove(int index) {
if(index >= size)
throw new ArrayIndexOutOfBoundsException("size:"+size+", index="+index);
Node<E> node = node(index);
if(node == null)
return null;
E e = node.data;
if(remove(e)) {
return e;
}
return null;
}
@Override
public E removeFirst() {
return remove(0);
}
@Override
public E removeLast() {
return remove(size-1);
}
@Override
public void clear() {
Node<E> t1=head;
Node<E> t2;
while(t1 != null) {
t2 = t1.next;
t1 = null;
t1 = t2;
}
head = tail = null;
size = 0;
}
@Override
public E get(int index) {
if(index >= size)
throw new ArrayIndexOutOfBoundsException("size:"+size+", index="+index);
Node<E> node = node(index);
return node.data;
}
@Override
public int indexOf(E e) {
Node<E> node = head;
int index = 0;
while(node.data != e) {
node = node.next;
index++;
if(node ==null) {
return -1;
}
}
return index;
}
@Override
public E set(int index, E e) {
if(index >= size)
throw new ArrayIndexOutOfBoundsException("size:"+size+", index="+index);
Node<E> node = node(index);
E oldNode = node.data;
node.data = e;
return oldNode;
}
@Override
public MyIterator<E> iterator() {
return new MyIteratorImpl();
}
private class MyIteratorImpl implements MyIterator<E> {
private Node<E> lastReturned;
private Node<E> next;
private int nextIndex;
public MyIteratorImpl() {
next = head;
nextIndex = 0;
}
@Override
public boolean hasNext() {
return nextIndex < size();
}
@Override
public E next() {
lastReturned = next;
next = next.next;
nextIndex++;
return lastReturned.data;
}
@Override
public void remove() {
if(nextIndex==0)
throw new IllegalStateException();
MyLinkedListImpl.this.remove(nextIndex-1);
nextIndex--;
}
}
}
'JAVA(자바) > JAVA(자바) 실습' 카테고리의 다른 글
JAVA 숫자 야구 게임 (자바 숫자 야구 게임) (0) | 2019.01.07 |
---|---|
[JAVA 자료구조 STACK 만들기] 실습 (자바 자료구조 STACK 만들기 실습) (1) | 2019.01.04 |
JAVA Calendar 만들기 실습 (자바 달력 만들기 실습) (2) | 2019.01.04 |