hyeon.s
개발로그
hyeon.s
전체 방문자
오늘
어제
  • 분류 전체보기 (150)
    • Web 및 인프라 (1)
      • Web (1)
      • Terraform (2)
      • Docker (1)
    • Android (1)
      • 공부 (28)
      • 트러블슈팅 (12)
      • 프로젝트 개발 (10)
      • Compose (2)
      • 우테코 프리코스 (0)
    • Server (5)
      • 공부 (1)
      • Spring (4)
    • 알고리즘 (68)
      • 문제풀이 (C++,Kotlin) (54)
      • 공부 (13)
    • 디자인 (3)
      • UI (3)
    • Language (5)
      • Kotlin (5)
      • JAVA (0)
    • IT 동아리 (8)
      • UMC 3기 (Android) (7)
      • Sopt 32기 (Android) (1)

Github

글쓰기 / 관리자
hELLO · Designed By 정상우.
hyeon.s
알고리즘/공부

[바킹독 알고리즘] 0x04강:Linked List

[바킹독 알고리즘] 0x04강:Linked List
알고리즘/공부

[바킹독 알고리즘] 0x04강:Linked List

2022. 12. 26. 12:53
728x90

연결리스트

성질

  1. k 번째 원소 확인/변경 위해 O(k) 필요
  2. 임의의 위치에 원소 추가, 제거가 O(1) (추가/제거하는 위치를 알고있는 경우)
  3. Cache rate hit은 낮지만 할당이 좋다.

→ 임의의 위치에 원소 추가하거나 제거하는 연산이 많을경우 연결리스트 사용 좋다.

연결리스트 종류: 단일 연결리스트/이중연결 리스트/환형 연결리스트

배열 vs 연결리스트

연결리스트 구현

#include <bits/stdc++.h>
using namespace std;

const int MX = 1000005;
int dat[MX], pre[MX], nxt[MX];
int unused = 1;

void insert(int addr, int num){
  dat[unused] = num;
  pre[unused] = addr;
  nxt[unused] = nxt[addr];
  if(nxt[addr] != -1) pre[nxt[addr]] = unused;
  nxt[addr] = unused;
  unused++;
}

void erase(int addr){
  nxt[pre[addr]] = nxt[addr];
  if(nxt[addr] != -1) pre[nxt[addr]] = pre[addr];
}

void traverse(){
  int cur = nxt[0];
  while(cur != -1){
    cout << dat[cur] << ' ';
    cur = nxt[cur];
  }
  cout << "\\n\\n";
}

void insert_test(){
  cout << "****** insert_test *****\\n";
  insert(0, 10); // 10(address=1)
  traverse();
  insert(0, 30); // 30(address=2) 10
  traverse();
  insert(2, 40); // 30 40(address=3) 10
  traverse();
  insert(1, 20); // 30 40 10 20(address=4)
  traverse();
  insert(4, 70); // 30 40 10 20 70(address=5)
  traverse();
}

void erase_test(){
  cout << "****** erase_test *****\\n";
  erase(1); // 30 40 20 70
  traverse();
  erase(2); // 40 20 70
  traverse();
  erase(4); // 40 70
  traverse();
  erase(5); // 40
  traverse();
}

int main(void) {
  fill(pre, pre+MX, -1);
  fill(nxt, nxt+MX, -1);
  insert_test();
  erase_test();
}

STL List

 

문제 풀이 현황

연습 문제 ✔ 1406 에디터 정답 코드
기본 문제 ✔ 5397 키로거 정답 코드
기본 문제 1158 요세푸스 문제 정답 코드, 별해 1, 별해 2
728x90
저작자표시 (새창열림)

'알고리즘 > 공부' 카테고리의 다른 글

[바킹독 알고리즘] 0x07강:Deque  (1) 2023.01.06
[바킹독 알고리즘] 0x06강:Queue  (0) 2023.01.04
[바킹독 알고리즘] 0x05강:Stack  (1) 2022.12.27
[바킹독 알고리즘] 0x03강:Array  (0) 2022.12.23
[바킹독 알고리즘] 0x02강:STL  (0) 2022.12.22
'알고리즘/공부' 카테고리의 다른 글
  • [바킹독 알고리즘] 0x06강:Queue
  • [바킹독 알고리즘] 0x05강:Stack
  • [바킹독 알고리즘] 0x03강:Array
  • [바킹독 알고리즘] 0x02강:STL
hyeon.s
hyeon.s
이유있는 코드를 짜자

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.