HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🐣
프론트엔드 데브코스 3기 교육생
/
📚
3기 스터디 가이드
/
🧑‍💻
CS 학습 및 면접대비 스터디
/
📦
배열, 연결리스트
📦

배열, 연결리스트

URL
발표자
수화
과목
자료구조
배열, 연결리스트설명언제, 어떤 걸 쓸까? 스택, 큐
 
 
 
면접 질문 💜
  • 스택, 큐 활용하는 곳
  • 동적배열과 연결리스트 차이
  • js 배열이 c언어 배열과 다른점
  • 연결리스트 삭제과정
  • 연결리스트 단점
  • 우선순위 큐 활용하는 곳
  • 스택, 큐 구현방법
  • 배열 : 추가,삭제 시간복잡도
  • 스택과 큐의 차이점
  • 배열과 링크드 리스트 차이점
    • 메모리 저장 방식의 차이는
 

배열, 연결리스트

데이터의 집합을 표현하는 구조 → 연속되어 존재하는 데이터를 저장하는 구조
 

설명

c언어 기준으로 설명하겠습니다
  • 배열
    • 출처: 코딩도장
      출처: 코딩도장
    • 정의: 원소들을 연속된 메모리에 저장하는 자료구조
    • 장점: index로 메모리에 O(1) 접근 ⇒ 랜덤 접근
      • 원리: 시작 메모리 주소 + (참조할 index * 데이터 형에 따른 메모리 크기)
      • TMI) js의 array는 객체라 오프셋 연산 x → 히든 클래스로 성능 개선
    • 단점: 배열의 크기가 고정
      • 런타임 시, 배열의 크기에 변동이 생긴다면? ex) 갑자기 사용자가 늘어나서 10개 추가해야함
      • 맨 앞에 새 원소를 넣고싶다면? → 최악의 경우 O(n) 걸림
  • 동적배열
    • 정의: 런타임에 배열의 크기를 조절할 수 있는 자료구조
      • 원리
        • 배열 꽉 찰 경우 → 현재 크기에 2배를 만들고, 값을 복사함
          배열 원소가 절반 넘게 빌 경우 → 현재 크기의 / 2로 만들고, 값을 복사함
    • 단점: 연속된 메모리 공간이 필요하다
  • 연결리스트
    • 정의: 포인터를 이용해 연속된 공간이 아니어도 데이터 집합을 표현할 수 있는 자료구조
    • 이미지 출처: https://atoz-develop.tistory.com/entry/자료구조-단순-연결-리스트-정리-및-연습문제
      이미지 출처: https://atoz-develop.tistory.com/entry/자료구조-단순-연결-리스트-정리-및-연습문제
    • 종류
      • 이중 연결리스트: 이전 원소, 이후 원소의 주소값을 가짐 → 탐색을 2방향으로 가능
      • 원형 연결리스트: 마지막 원소의 포인터 → 첫번째 원소의 주소값
    • 장점
      • 연속된 공간이 필요없다
      • 원소 추가 시, 최선의 경우 O(1) 걸림 ex) 맨 앞에 원소 추가 시, 새 메모리 할당 → head가 가리키는 원소 포인팅
    • 단점
      • 원소에 랜덤 접근 불가능 → 원소 찾는데 최악의 O(n) 걸림
      • 원소 추가, 삭제하는 데는 오래걸리지 않지만, 해당 원소를 찾는데 O(n) → 원소 추가, 삭제 → 최악의 경우 O(n) → 많은 데이터를 다룰경우 치명적, 이를 보완한 트리 자료구조!
 

언제, 어떤 걸 쓸까?

: 정답이 없는 문제, 상황에 따라 유리한 구조를 선택해야한다.
  • 배열 : 데이터 크기가 고정적이고, 특정 데이터 찾는 경우가 많을 때
  • 연결리스트 : 데이터 크기가 유동적일 때
 
 

스택, 큐

  • 스택 : 후입선출, 나중에 들어간 게 먼저 호출되는 자료구조
    • push: 마지막에 원소 추가 - O(1)
    • pop: 마지막 원소 꺼내기 - O(1)
    • 활용: 뒤로가기 버튼
  • 큐 : 선입선출, 먼저 들어간 게 먼저 호출되는 자료구조
    • 이미지 출처: https://galid1.tistory.com/483
      이미지 출처: https://galid1.tistory.com/483
    • 첫번째 원소, 마지막 원소를 포인팅함
    • enQueue: 마지막에 원소 추가 - O(1)
    • deQueue: 첫번째 원소 꺼내기 - O(1)
    • 활용
      • 태스크 큐: web api의 결과값을 담아두는 큐 → 이벤트 루프에 의해 콜스택으로 감
      • 우선순위 큐: 큐에 원소를 추가/삭제 할 때, 우선순위에 따라 배치하는 자료구조
        • 예제코드
          // 최소값 리턴하는 큐 class priorityQueue { constructor(arr) { this.arr = arr; } enqueue(value) { this.arr.push(value); } dequeue() { let i = 0; let min = this.arr[i]; for (let idx in this.arr) { if (min > this.arr[idx]) { min = this.arr[idx]; i = idx; } } this.arr.splice(i, 1); return min; } }