본문 바로가기

Basic/자료구조,알고리즘

Queue - 큐의 개념과 특성들 1. Queue의 정의 - Queue는 먼저 들어간 데이터가 먼저 나오는 자료구조이다.- 입구와 출구가 다르다.- 파이프 구조이다. 2. Queue의 기본연산 offer - 큐의 입구에 데이터 추가poll - 큐의 출구로부터 데이터의 반환과 + 삭제peek - 큐의 출구로부터 데이터의 반환isEmpty - 데이터의 유무 확인 Method Description boolean isEmpty() Queue가 비어있는지 알려준다. boolean offer(Object o) Queue에 객체를 저장. 성공하면 true, 실패하면 false를 반환. Object poll() Queue에서 객체를 꺼내서 반환+삭제. 비어있으면 null을 반환. Object peek() 삭제없이 요소를 읽어 온다. Queue가 비어있..
Stack의 다양한 구현 1. 순수 배열로 직접 구현 배열에서 인덱스를 활용해 topIndex의 값을 바꿔주는것이 포인트이다. POP을 호출해도 배열에서 값을 실제로 삭제하지는 않고 인덱스만을 활용한다. 1234567891011121314151617181920212223package Stack; public class ArrayStackMain { public static void main(String[] args) { ArrayStack st = new ArrayStack(); st.push("0");//삽입 st.push("1"); st.push("2"); System.out.println("= MyStack1 peek="); System.out.println(st.peek());//마지막 값 리턴 System.out.pri..
Stack 스택의 개념과 특성들 1. Stack의 정의 - Stack은 쌓아 올린다는 의미로서 마지막에 들어간 데이터가 먼저 나오는 자료구조 입구와 출구가 같다 2. Stack의 기본연산 push - 스택의 맨 위에 데이터 추가pop - 스택의 맨 위 데이터의 반환과 + 삭제peek - 스택의 맨 위 데이터의 반환empty - 데이터의 유무 확인 Method Description boolean isEmpty() Stack이 비어있는지 알려준다. Object peek() Stack의 맨 위에 저장된 객체를 반환. pop()과 달리 Stack에서 객체를 끼내지는 않음.(비었을 때는 EmptyStackException발생) Object pop() Stack의 맨 위에 저장된 객체를 삭제후 반환한다. (비었을 때는 Empty StackExce..
원형 연결리스트(CircularLinkedList)직접 구현 1. 원형 연결리스트(CircularLinkedList)란? 모든 노드가 원의 형태를 이루면서 연결되어 있는 리스트이다. 단방향 연결리스트처럼 머리와 꼬리를 가리키는 변수를 각각 두지 않아도, 하나의 변수만으로 머 리 또는 꼬리에 노드를 간단히 추가할 수 있다. 위 그림을 보면 head변수없이 tail 변수만으로 new node를 마지막 꼬리에 추가하였고, new node는 다시 맨 앞의 노드를 가리키면서 원의 형태로 연결되어있다. 원형 연결리스트의 노드의 삽입, 조회, 삭제를 구현해보겠다. 2. 원형 연결리스트의 구현 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565..
Doubly linked list(이중 연결 리스트) 직접 구현 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859package DoublyLinkedList; public class DoublyMain { public static void main(String[] args) { DoublyLinkedList numbers = new DoublyLinkedList(); numbers.addFirst(30);//맨 앞에 추가 numbers.addFirst(20); numbers.addFirst(10); System.out.println(numbers); System.out.println(numbers.removeLast());..
단방향 연결리스트 직접구현 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667package LinkedList;public class LinkedListMain { public static void main(String[] args) { LinkedList numbers = new LinkedList(); numbers.addFirst(30);//맨 앞에 추가 numbers.addFirst(20); numbers.addFirst(10); System.out.println(numbers);//출력 numbers.addLast(40);//맨 뒤에 추가 number..
양방향 연결리스트(Doubly LinkedList) api 예제 1. 양방향 LinkedList api 자바는 Doubly LinkedList 를 제공한다. https://docs.oracle.com/javase/8/docs/api/java/util/LinkedList.html?noframes=true#LinkedList 2. DoublyLinkedList 예제 123456789101112131415161718192021222324252627282930313233343536373839package DoublyLinkedList; import java.util.LinkedList;import java.util.ListIterator; public class DoublyLinkedListApi { public static void main(String[] args) { ..
Linked list 와 Doubly linked list 의 개념과 차이점 1. Linked list 란 Array list의 경우 리스트의 엘리먼트가 배열의 엘리먼트인 반면에 linked list의 엘리먼트는 노드 객체를 사용 한다. 그래서 엘리먼트(노드 객체)와 엘리먼트(노드 객체)를 연결(link),레퍼런스를 통해서 리스트를 구현 한 것을 의미한다. Linked list 에서는 이 연결이 중요하다! 2. 단방향 Linked list 의 구조 - 각 노드는 다음 노드를 가리킨다 Node객체 안에 변수들을 봐보자 1) Data field : 저장되는 실제 값을 가리킨다 - 노드의 값(보통 value라는 변수 사용) 2) Link field : 다음 노드의 참조값, 주소값(보통 next라는 변수 사용)을 가리킨다. 이렇게 링크 필드로 노드와 노드를 연결시키는 방법을 사용 3) ..