CS지식/자료구조 28

TIL 정리_56

자료구조 : 자바 comparable 인터페이스/오버라이드 String one = "hello world"; String two = "hello world"; if(one.equals(two)) { System.out.println("they are the same"); 위의 코드에서 equals 메서드가 어디서 왔는가? -> 문자열에서 왔다 -> 정확히는 객체의 equals 메서드를 오버라이드 했다 (원래의 메서드 오버라이드) Object o = one; //형변환 Object t = two; if(o.equals(t)) 객체를 비교할 때는 메모리 주소를 비교하고 문자열 클래스를 비교할 때는 메모리 주소를 비교하지 않는다 객체(원숭이)가 같은지 비교 Monkey m = new Monkey(); Monk..

TIL 정리_51(Queue)

Queue 먼저 집어넣은 데이터를 먼저 꺼낸다 FIFO(First In First Out) 양쪽으로 뚫린 파이프에 한쪽은 넣고 반대쪽은 빠져나오는 구조이다 Queue의 메서드 add() : 맨 끝에 데이터를 하나 추가 remove() : 맨 앞에서 데이터를 하나 꺼낸다 peek() : 맨 앞에 있는 데이터를 본다 isEmpty() : Queue가 비었는지 확인 poll() : Queue에서 객체를 꺼내서 반환. 비어있으면 null 반환 offer() : Queue에 객체를 저장. 성공하면 true 실패하면 false 반환 Queue를 코드로 구현 import java.util.NoSuchElementException; class Queue { //queue 클래스 생성 + 데이터 타입 명시 class N..

TIL 정리_50(Stack)

Stack stack : 쌓다 LIFO(Last In First Out) 구조이다 바로 넣었다가 거꾸로 정렬된 데이터를 꺼내쓰고 싶을 때 유용하다 지원하는 기능 pop() : 맨 마지막에 넣은 데이터를 가져오면서 지운다 push() : 새로운 데이터를 맨 위에 쌓아 올리는 것이다 peek() : 맨 마지막 데이터를 본다 isEmpty() : 스택에 데이터가 있는지 없는지 확인한다 stack 코드로 구현 import java.util.EmptyStackException; class Stack { class Node { private T data; private Node data; public Node(T data) { this.data = data; } } private Node top; public T ..

TIL 정리_49(StringBuilder)

StringBuilder 클래스안에 배열공간을 만들어 놓고 append 함수가 호출되면 추가되는 문자열을 해당 배열공간에 바로 추가한다 배열공간이 부족하면 그때마다 공간을 늘려서 복사한다 속도나 공간면에서 효율적이다 StringBuffer StringBuilder와 기능은 같으나, 동기화를 보장한다 속도는 느리지만 동기화가 보장되어 멀티쓰레드 환경에서 사용된다 StringBuilder 코드 구현 class StringBuilder { private char[] value; //문자열 저장 private int size; //배열방 크기 저장 private int index; //새로 추가될 문자의 방 번호를 기억하는 함수 StringBuilder() { size = 1; value = new char[s..

TIL 정리_48(Hash Table, ArrayList)

https://www.youtube.com/channel/UCWMAh9cSkEn8v42YRO90BHA 유튜브 - 엔지니어 대한민국의 자료구조 강의를 듣고 정리한 내용입니다 해시테이블(hash table) 검색하고자하는 key값을 입력받아 해시 함수로 반환받은 해시 코드를 배열의 인덱스로 환산하여 데이터에 접근하는 방식의 자료구조이다 key -> HashCode -> Index -> Value 해시함수 : 특정한 규칙을 읽어 입력받은 key값을 값에 관계없이 동일한 코드를 반환한다 Hash Table 검색속도가 매우 빠르다 -> 배열 공간을 고정된 크기만큼 마련해놓고 해시코드를 배열의 index로 사용하기 때문이다 배열의 방을 나눌 때 규칙을 잘 만드는게 중요하다 -> Hash Algorithm을 의미 c..

TIL 정리_47(Linked List)

retrieve : 헤더 다음 데이터를 n에 할당해서 n부터 출력하도록 하는 것 Test class public class LinkedListNode { public static void main (String[] args) { LinkedList ll = new LinkedList(); ll.append(1); ll.append(2); ll.append(3); ll.append(4); ll.retrieve(); ll.delete(1); ll.retrieve } //첫 번째 헤더도 삭제가능 LinkedList 중복값 삭제 예제 정렬되어있지 않은 링크드리스트에 중복되는 값을 제거 -> 별도의 버퍼를 사용하지 않고 제거 3 -> 2 -> 1 -> 2 -> 4 버퍼를 사용하는 경우 : Hashset 중복 x ..

TIL 정리_46(Linked List)

유튜브 엔지니어 대한민국 강의를 듣고 정리한 내용입니다 https://www.youtube.com/channel/UCWMAh9cSkEn8v42YRO90BHA Linked List 개념 컴퓨터에 자료를 저장하는 구조의 한 종류 일렬로 연결된 데이터를 저장할 때 사용한다 데이터 추가 및 삭제에 용이 데이터 조회는 ArrayList가 사용하기 좋다 배열과의 비교 : 배열은 방들이 물리적으로 한 곳에 모여있어 늘이거나 줄일 수 없다 링크드 리스트는 중간에 추가하고 싶은 경우 해당 노드의 주소를 변경하여 추가가 가능하다 삭제도 동일한 방식으로 가능하다 노드(포인터)를 삭제할 경우 노드가 링크드 리스트에서 삭제되었지만 메모리가 남아있다 -> 자바는 가비지 컬렉터가 알아서 삭제하지만 C나 C++는 삭제코드를 써야 한..

자료구조 기초 정리

유튜브 강의를 듣고 개인적으로 정리한 내용입니다 자료구조란? -컴퓨터 프로그래밍에 있어, 가장 기초적인 학문분야이다 -컴퓨터 프로그램의 기본골격으로 프로그램이 효율적이고 안전하게 동작하기 위해서 반드시 필요하다. >>프로그램의 크기가 작거나 대형 프로젝트의 초기단계에서 이를 간과할 경우 구조적인 결함이 발생한다 프로그램의 수행시간 혹은 저장공간을 고려한 효율적인 자료구조의 설계 ->프로그램이 어떻게 사용되는지에 따라 목적 및 기능에 부합하는 자료구조를 설계한다. 설계의 예시) 윈도우 탐색기의 경우 폴더구조 = 트리 / 파일목록 = 리스트 자료구조의 분류 단순구조 : 프로그래밍 언어에서 제공하는 기본적인 데이터 타입으로 정수(int) 실수(float) 문자와 문자열(char)이 있다. 선형구조 : 자료들 ..