스택(Stack): 마지막에 쌓은 것을 가장 먼저 꺼내는 구조
·
자료구조
0. 글을 쓰게 된 이유자료구조를 다시 공부하면서 스택(Stack)이 무엇인지는 알고 있었습니다.“마지막에 들어간 데이터가 가장 먼저 나온다”라는 LIFO(Last In, First Out) 특성 정도는 익숙했습니다.그러다가 ccommit 멘토링을 진행하면서 개념은 알고 있는데 왜 스택을 쓰는지 / 스택의 장점과 단점은 무엇인지 / 어떤 상황에서 스택이 정말로 적합한지에 대해서는 막연하게만 이해하고 있었다는 생각이 들었습니다.예를 들어 “괄호 검사할 때 스택 쓰지” 수준에서 멈춰 있었지호출 스택이 왜 그렇게 중요한지Undo/Redo 같은 기능이 왜 스택 없이 설계하기 어려운지스택이 오히려 맞지 않는 경우가 언제인지이런 부분은 정리가 안 되어 있더라고요.그래서 이번 글은 단순히 “스택이 뭔가요?”라는 ..
연결리스트 - 배열이 더 빠른데 왜 굳이 연결 리스트를 배울까?
·
자료구조
1. 들어가며 연결 리스트(Linked List)는 데이터를 노드(Node) 단위로 저장하고 각 노드가 다음 노드의 참조(reference) 를 통해 서로 연결된 선형 자료구조입니다. 배열처럼 메모리에 연속적으로 저장되지 않으며 메모리의 임의 위치에 존재하는 노드들이 포인터(pointer) 를 통해 논리적으로 연결됩니다.이 구조는 메모리의 불연속성을 극복하면서 유연하게 데이터를 관리할 수 있게 해줍니다.2. 연결리스트 내부 구조 이해각 노드는 일반적으로 다음 두 가지 정보를 가집니다.data: 저장할 실제 데이터next: 다음 노드의 주소(참조)class Node { int data; Node next; // 다음 노드를 가리킴 Node(int data) { this.dat..
배열(Array): 가장 기본적이지만 가장 중요한 자료구조
·
자료구조
배열이란 무엇인가?배열(Array)은 동일한 자료형의 데이터를 연속된 메모리 공간에 저장하는 자료구조입니다.각 원소는 인덱스(index) 로 구분되며 대부분의 언어에서는 0부터 시작합니다.즉 배열은 연속된 메모리 덩어리 속에 데이터를 가지런히 놓고 arr[i] 라는 표현만으로 곧바로 특정 원소를 O(1) 시간에 접근할 수 있게 해주는 구조입니다.int[] numbers = {10, 20, 30, 40};System.out.println(numbers[2]); // 30 출력 (O(1))배열의 핵심 개념 – "연속된 메모리"배열이 빠른 이유는 데이터가 메모리에 연속적으로 저장되기 때문입니다.컴퓨터는 배열의 첫 번째 주소(base address)만 알면arr[i] = base_address + (i * el..