자료구조 + 알고리즘

visualgo.net을 통해서 Linked list가 어떻게 동작하는지 살펴보는 시간이다.. Linked list를 시각화해서 보여주는 페이지로 이동한다. 노드 다음 노드 다음 노드.. 이런식으로 연결되어 있는 것을 시각적으로 확인할 수 있다. 85를 헤드에 넣어보자. 그럼 이런 그림을 볼 수 있다! 85를 헤드에 추가하는 과정을 하나하나 확인해보자. 코드를 보자. Vertex vtx = new Vertex(v) Vertex라는 객체를 new로 만들었다. 또한 Vertex라는 객체를 생성할 때, 'v'라는 값을 매개변수로 줬다. 우리가 방금 입력한 85라는 숫자가 저 v의 값으로 들어가서, 85라는 값을 가지고 있는 노드가 만들어졌다. 그 노드의 이름은 vtx라고 보면 된다. 저 vtx라는 노드가 그림..
Linked list를 이해하기 위한 사전지식을 간단히 정리해보자. Storage (hdd, ssd, 플로피디스크) - 데이터를 이곳에 저장하게 된다. ㅇ 특징: 가격이 저렴하다. 용량이 크고, 전원이 꺼져도 데이터 저장되어 있다. Memory ㅇ비싸고, 용량이 스토리지보다 작고, 끄면 데이터가 휘발된다. ㅇ스토리지보다 훨씬더 빠르게 데이터를 저장하고 가져온다. Cpu 생각하고 계산하고 연산하는 것.. ㅇ처리속도가 가장 빠르다. -> 상대적으로 스토리지가 너무 느리다. 그래서 스토리지에 있는 데이터를 메모리로 넘긴 후, 그 메모리에 있는 데이터를 CPU가 처리하는 방법으로 동작한다 그래서 데이터 스트럭쳐의 관심 대상은 메모리다! 메모리를 효율적으로 사용하는 것이 자료구조에 가장 중요하고, 공부하는 이유이..
흑흑 나 너무 부족하다 빨리 공부를 더 열심히 해야겠다 앞서 만든 ArrayList는 배열의 크기를 지정해 줬기 때문에, 무한정 추가할 수는 없다. (참고: 여기서 LinkedList의 장점이 드러난다. LinkedList는 메모리가 감당하는 한, 무한정 데이터를 추가할 수 있다. 반면에, ArrayList는 애초에 배열의 크기를 지정하기 때문에 무한정 추가할 수 없다. 또한, 배열의 크기를 과도하게 크게 설정한 경우 공간의 낭비가 생긴다.) 그래서 나는 아래 코드처럼 resize() 메서드를 구현해보았다. 모든 부분을 잘 알아두자. resize()를 void로 선언하여서 Object[] newArray = new Object[size+50]으로 새로운 ArrayList를 정하고 그것의 크기를 size보..
오잉? 여기서 변수로 직접 접근하지 않고 메소드를 사용하는 이유는? >>그래야지 외부에서 저 size라는 변수값을 마음대로 수정하지 못하기 때무니. 그래서 이전에, 저 size값은 private로 선언했다. System.out.println(numbers.indexOf(20)); 20의 값을 가지는 인덱스가 몇번이냐? 를 알아보고 싶다. .indexOf() 이것도 구현해보자. 자 일단 쭉 순회하면서 해당 값이 있는지 없는지 체크하는과정이 필요하겠지 public int indexOf(Object o){ for(int i=0; i return -1; 더보기 오케이~~ !! sting.equals(Object other) 메소드를 사용하면 string객체의 문자열을 비교할 수 있으나, ==연산자를 사용하면 문..
Object클래스가 가진 메소드 중 toString메소드가 있다. 물론 Object 클래스의 모든 메소드는 모든 클래스가 사용이 가능하다. toString 메소드는 객체의 정보나 값들을 문자열로 만들어 리턴하는 메소드 "클래스 또는 객체를 대표하는 문자열을 커스터마이즈" 지금까지는 배열에 저장한 데이터를 확인하려면 System.out.println(arraylist.get(0))와 같이 일일이 데이터를 불러와야 했다. toString 메소드를 오버라이드 해서 System.out.println(arraylist)로 저장된 데이터를 한 번에 확인해보자. toSting을 구현해보자 배열 numbers의 요소들이 []안에 표시되게끔 해보자. 여기서 for문을 이용해서 모든 list의 값을 순회할 필요가 보여야 ..
엄청 간단하다. puble Object get(int index) { return elementData[index]; } 그치그치 으아아아유ㅠㅠㅠ 아니 근데 왜 null이 뜨는거지?? 분명히 똑같이 했는데.. ㅇNPE : NullPointerException 자바 데이터 타입은 기본 타입(privmitive type)과 참조 타입(reference type)이 있다. 참조 타입은 객체의 생성 이전에는 할당된 메모리 주소가 없는 null을 참조하는 변수이며, 이를 가지고 작업을 수행하면 NPE가 발생하게 된다. 자바에서는 기본 데이터형을 제외한 모든 데이터 타입을 참조 데이터형이라고 한다. (참조 자료형) new를 사용해서 객체를 만드는 모든 건 참조 데이터형이라고 생각해도 ㅇㅇ (단 String은 제외라..
add를 구현하고, 이를 활용하여 addFirst를 구현해보자. 중간에 넣으면 하나씩 하나씩 뒤로 땡긴다 -> 시간이 많이 걸린다. Array를 통한 List의 최대 단점이다. LinkedList배울때 왜 저게 단점인지 극명하게 드러난다. 자 중간에 어떤 값을 넣으려면.. (예를들어 numbers.add(1, 15);) 맨 끝에 있는 data를 한 칸씩 뒤로 빼서 자리를 만들어 주어야 한다. 그러려면 코드를 어떻게 짜줘야 할까? 참고: ArrayList에 내재된 배열 이름을 elementData로 정해줬었다. elementData[4] = elementData[3]; elementData[3] = elementData[2]; elementData[2] = elementData[1]; 이렇게 써줘야 뒤로 ..
ㅇ데이터를 끝에다가 추가 -> .addLast()라는 메서드를 구현해보자~! addLast를 구현해주기 위해서, ArrayList클래스로 가보자. 아!! 이제 알았다 ArrayList클래스에는 구현을 해주는 거였구나 아 그럼 아까는 ArrayList의 배열인 elementData와 size를 만들어 준거구나
이번 목표: List datastructure를 배열을 이용하여 어떻게 만들 것인가? 이클립스에서 list.arraylist.implementation package를 만들고, class를 두개 만들어 줬다. 1. public static void main(String[] args)가 들어있는 Main class > 이 클래스에서 ArrayList를 실행해보자. 2. ArrayList class (여기는 public static void main(String[] args)를 안넣었다.) > ArrayList객체를 여기에 구현해보자. Main에 들어가서 ArrayList객체를 생성한다. 숫자들을 요소로 하는 리스트를 만드려고 한다. 이름을 numbers라고 해주자 >>지금 내가 생성한 ArrayList.j..
리스트라는 완제품 안에 배열이라는 부품을 사용한다. array list 데이터를 삭제/추가할 때마다 데이터를 앞으로 한칸씩 땡기거나 뒤로 밀어야 함. 단: 배열을 이용해 리스트를 만들게 되면 데이터 추가 삭제할때 오래 걸림 장: 가져올 때. -> 인덱스 값으로 데이터를 가져올 때. --> 기본적으로 배열을 이용하기 때문에, 인덱스를 이용할 때 유리. +배열의 사이즈 구하듯 arraylist의 사이즈를 찾을 수 있음. (요소가 몇개인가) 자바에서는 arraylist 자료구조가 내장되어있기 때문에 내가 직접 구현해서 사용할 일은 x 나는 어레이리스트를 사용하는 방법을 알아야 함 사용방법을 정확히 인지했을 때, 구현방법에서 길을 잃지 않을 수 있음. 이번목표: Array List를 어떻게 사용하는가. 자바는 ..
히어로맛쿠키
'자료구조 + 알고리즘' 카테고리의 글 목록 (4 Page)