Skip to content

Files

Latest commit

70f2391 ยท Jan 24, 2022

History

History
261 lines (183 loc) ยท 10.6 KB

ArrayVSLinkedList.md

File metadata and controls

261 lines (183 loc) ยท 10.6 KB

Array and LinkedList

Array

Array vs List

LinkedList

Array

์ˆœ์ฐจ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ

  • ์ฃผ๋กœ ์„œ๋กœ ์—ฐ๊ฒฐ๋œ ๋ฐ์ดํ„ฐ๋“ค์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ €์žฅํ•  ๋•Œ ์‚ฌ์šฉ
  • ์‚ฝ์ž… ์ˆœ์„œ๋Œ€๋กœ ์ €์žฅ (์ƒˆ๋กœ ์‚ฝ์ž…๋˜๋Š” ์š”์†Œ๋Š” ๋ฐฐ์—ด์˜ ๋งจ ๋์— ์œ„์น˜)
  • ์ด๋ฏธ ์ƒ์„ฑ๋œ ๊ฒƒ๋„ ์ˆ˜์ • ๊ฐ€๋Šฅ(mutable)
  • ๋™์ผํ•œ ๊ฐ’ ์—ฌ๋Ÿฌ๋ฒˆ ์‚ฝ์ž… ๊ฐ€๋Šฅ
  • ๋‹ค์ค‘์ฐจ์› ๋ฐฐ์—ด(Multi-dimentional Array): ๋ฐฐ์—ด ์•ˆ์— ๋ฐฐ์—ด์ด ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ์Œ
  • ๊ณ ์ •๋œ ํฌ๊ธฐ๋ฅผ ๊ฐ–๋Š” ๊ฐ™์€ ์ž๋ฃŒํ˜•์˜ ์›์†Œ๋“ค์ด ์—ฐ์†์ ์ธ ํ˜•ํƒœ๋กœ ๊ตฌ์„ฑ๋œ ์ž๋ฃŒ๊ตฌ์กฐ

์ˆœ์ฐจ์  ์ž๋ฃŒ๊ตฌ์กฐ(Sequential Data Structure): ๋ฐ์ดํ„ฐ๋“ค์ด ์ˆœ์ฐจ์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๊ตฌ์กฐ

Array ํŠน์ง•

Untitled

  1. ์ธ๋ฑ์Šค(index)๋กœ ํ•ด๋‹น ์›์†Œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
  2. ์ถ”๊ฐ€์ ์œผ๋กœ ์†Œ๋ชจ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์–‘(overhead)์ด ๊ฑฐ์˜ ์—†๋‹ค.
  3. Cache hit rate๊ฐ€ ๋†’๋‹ค.
  4. ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•˜๋ ค๋ฉด ๋ฉ”๋ชจ๋ฆฌ ์ƒ์— ์—ฐ์†ํ•œ ๊ตฌ๊ฐ„์„ ํ• ๋‹นํ•ด์•ผํ•ด์„œ ํ• ๋‹น์— ์ œ์•ฝ์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ๋‹ค.

Array ์—ฐ์‚ฐ๋“ค๊ณผ ์‹œ๊ฐ„ ๋ณต์žก๋„

  • ์ž„์˜์˜ ์œ„์น˜์— ์žˆ๋Š” ์›์†Œ๋ฅผ ํ™•์ธํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•˜๋Š” ์—ฐ์‚ฐ: O(1)
  • ๋ฐฐ์—ด์˜ ๊ฐ€์žฅ ๋์— ์›์†Œ ์ถ”๊ฐ€: O(1)
  • ๋ฐฐ์—ด์˜ ๊ฐ€์žฅ ๋ ์›์†Œ ์‚ญ์ œ: O(1)
  • ์ž„์˜์˜ ์œ„์น˜์— ์›์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ : O(n)
  • ์ž„์˜์˜ ์œ„์น˜์— ์žˆ๋Š” ์›์†Œ ์ œ๊ฑฐ: O(n)

Array ์žฅ์ 

  • ๋žœ๋ค ์•ก์„ธ์Šค๊ฐ€ ๋น ๋ฅด๋‹ค.
  • index๋ฅผ ํ†ตํ•ด ์›์†Œ์— O(1) ์‹œ๊ฐ„๋ณต์žก๋„๋งŒ์— ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

Array ๋‹จ์ 

Untitled

  • Array์˜ ์ค‘๊ฐ„ ์š”์†Œ๋ฅผ ์‚ญ์ œํ•œ ๊ฒฝ์šฐ, ๋’ค์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•œ ์š”์†Œ ์ˆ˜ ๋งŒํผ shiftํ•ด์ค˜์•ผ ํ•˜๋Š” ๋น„์šฉ์ด ๋ฐœ์ƒํ•˜๊ณ  ์ด ๊ฒฝ์šฐ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(n)์ด ๋œ๋‹ค. (์‚ฝ์ž…์˜ ๊ฒฝ์šฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€)
  • ์—ฐ์†๋œ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์— ์›์†Œ๋“ค์ด ์กด์žฌํ•˜๋ฏ€๋กœ ์ฒ˜์Œ ๋ฐฐ์—ด์„ ์„ ์–ธํ•œ ํฌ๊ธฐ๋งŒํผ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

Dynamic Array ๋ฌธ์ œ

  • ๋ฐ์ดํ„ฐ๋ฅผ ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•  ๋•Œ Resizing ๋ฌธ์ œ(๋ฉ”๋ชจ๋ฆฌ์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ๋‹ค์‹œ ์กฐ์ •ํ•˜๋Š” ๋ฌธ์ œ)๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.

๋ฐฐ์—ด์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฑ„์šฐ๋ฉฐ, ์ฒ˜์Œ ์ƒ์„ฑ๋  ๋•Œ ์–ด๋А ์ •๋„ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ฏธ๋ฆฌ ํ• ๋‹น(pre-allocation)ํ•œ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ๋ฅผ pre-allocationํ•˜๋ฉด์„œ ์ƒˆ๋กœ ์ถ”๊ฐ€๋˜๋Š” ์š”์†Œ๋“ค๋„ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ฒ˜์Œ ํ• ๋‹นํ•œ ๊ฒƒ๋ณด๋‹ค ์š”์†Œ๊ฐ€ ๋” ๋งŽ์•„์ง„๋‹ค๋ฉด resizing์ด ํ•„์š”ํ•˜๋‹ค. Array ํŠน์„ฑ์ƒ, ์ถ”๊ฐ€์ ์œผ๋กœ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ๋˜ํ•œ ์ˆœ์ฐจ์ ์œผ๋กœ ๋“ค์–ด๊ฐ€์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๋Œ€์ ์œผ๋กœ ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค.

Untitled

  • ๊ธฐ์กด์˜ ๋ฐฐ์—ด์€ ๊ทธ๋Œ€๋กœ ๋‘๊ณ 
  • ์ƒˆ๋กœ์šด ๊ธธ์ด๋กœ ์ง€์ •๋œ ๋ฐฐ์—ด์„ ๋”ฐ๋กœ ํ• ๋‹น ํ›„
  • ๋ฐ์ดํ„ฐ์˜ ๋ณต์‚ฌ๋ฅผ ์ง„ํ–‰ํ•˜๊ณ 
  • ๊ธฐ์กด์˜ ๋ฐฐ์—ด์„ ์‚ญ์ œ

Array์„ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์€ ๊ฒฝ์šฐ

  • ์ˆœ์ฐจ์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ(ex. ๋Œ€ํšŒ ๊ฒฐ๊ณผ)
  • ๋‹ค์ฐจ์› ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ (ex. ๋ฐฐ์—ด ์•ˆ์˜ ๋ฐฐ์—ด์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ)
  • ๋ฐ์ดํ„ฐ ์‚ฌ์ด์ฆˆ๊ฐ€ ์ž์ฃผ ๋ฐ”๋€Œ์ง€ ์•Š์„ ๋•Œ
  • ์š”์†Œ๊ฐ€ ์ž์ฃผ ์‚ญ์ œ๋˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€๋˜์ง€ ์•Š์„ ๋•Œ
  • ๋ฐฐ์—ด์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ์ž‘์—…์ด ๋งŽ์„ ๋•Œ

๋ฐฐ์—ด(Array) vs ๋ฆฌ์ŠคํŠธ(List)

๋ฆฌ์ŠคํŠธ(list)

์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ๋ชจ์ž„์ด๋‹ค. ๋‹ค๋ฅธ ๋ง๋กœ๋Š” ์‹œํ€€์Šค(sequence)๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค.

  • ์ˆœ์ฐจ์„ฑ์„ ๋ณด์žฅํ•˜์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— spacial locality ๋ณด์žฅ์ด ๋˜์ง€ ์•Š์•„ cache hit๊ฐ€ ์–ด๋ ต๋‹ค.
  • ๋ฆฌ์ŠคํŠธ์—์„œ ์ธ๋ฑ์Šค๋Š” ๋ช‡ ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ์ธ๊ฐ€ ์ •๋„์˜ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง„๋‹ค. (๋ฐฐ์—ด์—์„œ์˜ ์ธ๋ฑ์Šค๋Š” ๊ฐ’์— ๋Œ€ํ•œ ์œ ์ผ๋ฌด์ดํ•œ ์‹๋ณ„์ž)

spacial locality: ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์‹œ ์ ‘๊ทผํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์€ ์ด๋ฏธ ์ ‘๊ทผ์ด ์ด๋ฃจ์–ด์ง„ ์˜์—ญ์˜ ๊ทผ์ฒ˜์ผ ํ™•๋ฅ ์ด ๋†’๋‹ค๋Š” ํ”„๋กœ๊ทธ๋žจ ์„ฑ๊ฒฉ ํ‘œํ˜„

์–ธ์–ด๋ณ„ list ์ง€์›

  • ์ตœ๊ทผ ์–ธ์–ด๋“ค์€ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณต

C

  • ๋ฆฌ์ŠคํŠธ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋Œ€์‹  ๋ฐฐ์—ด์„ ์ง€์›ํ•œ๋‹ค.
  • ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ง์ ‘ ๋งŒ๋“ค๊ฑฐ๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

JavaScript

  • ๋ฐฐ์—ด์— ๋ฆฌ์ŠคํŠธ์˜ ๊ธฐ๋Šฅ์ด ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.

Python

  • ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ๋ฐฐ์—ด์€ ์ œ๊ณตํ•˜์ง€์•Š๋Š”๋‹ค.
  • ํŒŒ์ด์ฌ์—์„œ๋Š” ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋ฐฐ์—ด์ด๋‹ค.
  • ํŒŒ์ด์ฌ์˜ ๋ฆฌ์ŠคํŠธ๋Š” ํฌ๊ธฐ๊ฐ€ ๊ฐ€๋ณ€์ ์ด๊ณ , ์–ด๋–ค ์›์†Œ ํƒ€์ž…์ด๋˜ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์„ ๊ฐ€์ง„๋‹ค. ๋Œ€์‹  C์˜ ๋ฐฐ์—ด๋ณด๋‹ค ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋” ๋งŽ์ด ํ•„์š”๋กœ ํ•œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

Java

  • ๋ฐฐ์—ด๊ณผ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ชจ๋‘ ์ง€์›ํ•˜๊ณ , ๋‘ ๊ฐ€์ง€๊ฐ€ ์™„์ „ํžˆ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ๋‹ค.
  • ๊ฐœ๋ฐœ์ž๊ฐ€ ์›ํ•˜๋Š” ๋Œ€๋กœ ๋ฐฐ์—ด๊ณผ ๋ฆฌ์ŠคํŠธ ์ค‘ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํฌ๊ฒŒ 2๊ฐ€์ง€ ํ˜•ํƒœ์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ง€์›ํ•œ๋‹ค.
    • LinkedList
    • ArrayList

Java - ArrayList/LinkedList

  • ์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์ด ๋นˆ๋ฒˆํ•˜๋‹ค๋ฉด ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฐฐ์—ด์„ ์ด์šฉํ•˜๋Š” ArrayList๊ฐ€ ๋” ๋น ๋ฅด๋‹ค.
  • ๋ฐ์ดํ„ฐ์˜ ์ถ”๊ฐ€/์‚ญ์ œ๊ฐ€ ๋นˆ๋ฒˆํ•˜๋‹ค๋ฉด LinkedList๊ฐ€ ๋” ํšจ๊ณผ์ ์ด๋‹ค.

ArrayList

  • ๋ฐฐ์—ด์„ ์ด์šฉํ•ด์„œ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
  • ์žฅ์ : ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•ด์„œ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์ด ๋น ๋ฅด๋‹ค.
  • ๋‹จ์ : ๋ฐ์ดํ„ฐ์˜ ์ถ”๊ฐ€์™€ ์‚ญ์ œ๊ฐ€ ๋А๋ฆฌ๋‹ค.

LinkedList

๋ฐฐ์—ด์€ ๋ฏธ๋ฆฌ ํŠน์ •ํ•œ ์—ฐ๊ฒฐ๋œ ๊ณต๊ฐ„์„ ํ™•๋ณดํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๊ณ  ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๊ณ , ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋Š” ํ•„์š”ํ•  ๋•Œ ๋งˆ๋‹ค ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ์ด๋‹ค. ๋ฐฐ์—ด์˜ ๋‹จ์ ์„ ๊ทน๋ณตํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

LinkedList ๊ตฌ์กฐ

Untitled

๋…ธ๋“œ

์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ '๋…ธ๋“œ'๋ผ๋Š” ๊ฐ์ฒด๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

  • Data๋ฅผ ์ €์žฅํ•  ๊ณต๊ฐ„
  • ๋‹ค์Œ ๋…ธ๋“œ์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ๊ณต๊ฐ„
struct LinkedList {
    int data;
    struct LinkedList *next;
}

Untitled

  • ๊ฐ ๋…ธ๋“œ๋Š” ์—ฐ์†๋œ ๊ณต๊ฐ„์— ์ €์žฅ๋˜์–ด ์žˆ์ง€ ์•Š๊ณ  ๋ฉ”๋ชจ๋ฆฌ์˜ ์—ฌ๋Ÿฌ ๋ถ€๋ถ„์— ๋ถ„ํฌ๋˜์–ด ์žˆ๋‹ค.
  • ๊ฐ ๋…ธ๋“œ์— ๋‹ค์Œ ๋…ธ๋“œ์˜ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•จ์œผ๋กœ์จ ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋…ธ๋“œ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋‹ค์Œ ์ฃผ์†Œ๊ฐ€ NULL์ด๋ฉด ์ด๋…ธ๋“œ๋Š” ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

LinkedList ์žฅ์ 

  • ๋™์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ ์žฌ๊ตฌ์„ฑ์ด ์šฉ์ดํ•˜๋‹ค.
  • ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์— ์ ํ•ฉํ•˜๋‹ค.

LinkedList ๋‹จ์ 

  • ํŠน์ • ์œ„์น˜ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰ํ• ๋•Œ ๋А๋ฆฌ๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ถ”๊ฐ€์ ์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

๋ฐ์ดํ„ฐ ์ถ”๊ฐ€

์‹œ์ž‘๋ถ€๋ถ„์— ์ถ”๊ฐ€

insertFirst

  1. ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. Vertex temp = new Vertex(input)
  2. ์ƒˆ๋กœ์šด ๋…ธ๋“œ์˜ ๋‹ค์Œ ๋…ธ๋“œ๋กœ ์ฒซ๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. temp.next = head
  3. ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์ง„ ๋…ธ๋“œ๊ฐ€ ์ฒซ๋ฒˆ์งธ ๋…ธ๋“œ๊ฐ€ ๋˜๋„๋ก head์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•œ๋‹ค. head = temp

์ค‘๊ฐ„์— ์ถ”๊ฐ€

  • 3๋ฒˆ์งธ ์ž๋ฆฌ(์ธ๋ฑ์Šค 2)์— 90์„ ์ถ”๊ฐ€ํ•˜๊ธฐ insert insertMiddle
  1. ์šฐ์„  3๋ฒˆ์งธ ์ž๋ฆฌ๋ฅผ ์ฐพ์•„์•ผ ํ•œ๋‹ค.
  2. head๋ฅผ ์ฐธ์กฐํ•ด์„œ ์ฒซ๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ ์ฐพ๋Š”๋‹ค. Vertext temp1 = head
  3. 23์ž๋ฆฌ์— ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋ฅผ ์œ„์น˜์‹œํ‚ค๊ธฐ์œ„ํ•ด์„œ๋Š” 6์„ ์•Œ๊ณ ์žˆ์–ด์•ผํ•œ๋‹ค. 6์„ temp1์œผ๋กœ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ˜๋ณต๋ฌธ์ด๋‹ค.
//ํ˜„์žฌ k์˜ ๊ฐ’์€ 2
while (--k != 0)
  temp1 = temp1.next
  1. 6์˜ next๋ฅผ ์ด์šฉํ•ด์„œ 23์„ ์ฐพ์•„์„œ temp2๋กœ ์ง€์ •ํ•œ๋‹ค. Vertext temp2 = temp1.next
  2. ๊ฐ’์ด 90์ธ ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. Vertext newVertex = new Vertex(input)
  3. 6์˜ ๋‹ค์Œ ๋…ธ๋“œ๋กœ ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋ฅผ ์ง€์ •ํ•œ๋‹ค. temp1.next = newVertex
  4. ์ƒˆ๋กœ์šด ๋…ธ๋“œ์˜ ๋‹ค์Œ ๋…ธ๋“œ๋กœ 23๋ฒˆ์„ ์ง€์ •ํ•œ๋‹ค. newVertex.next = temp2

๋ฐ์ดํ„ฐ ์‚ญ์ œ

  • ์„ธ๋ฒˆ์งธ ๋…ธ๋“œ(์ธ๋ฑ์Šค 2)๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ

  1. head๋ฅผ ์ด์šฉํ•ด์„œ ์ฒซ๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ ์ฐพ๋Š”๋‹ค. Vertex cur = head
  2. ๋‘๋ฒˆ์งธ ๋…ธ๋“œ๋กœ ์ด๋™ํ•œ๋‹ค.
//k = 2
while(--k!=0)
  cur = cur.next
  1. ์„ธ๋ฒˆ์งธ ๋…ธ๋“œ ์ฐพ๋Š”๋‹ค. Vertex tobedeleted = cur.next
  2. ๋‘๋ฒˆ์งธ ๋…ธ๋“œ์˜ next๋ฅผ 23์œผ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค. cur.next = cur.next.next
  3. 90์„ ์‚ญ์ œํ•ด์„œ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ œ๊ฑฐํ•œ๋‹ค. delete tobedeleted

LinkedList ์—ฐ์‚ฐ๋“ค๊ณผ ์‹œ๊ฐ„ ๋ณต์žก๋„

  • ๋ฐ์ดํ„ฐ ํƒ์ƒ‰: ์ˆœ์ฐจ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ค ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ฒ˜์Œ๋ถ€ํ„ฐ ์ˆœ์ฐจ์ ์œผ๋กœ ํƒ์ƒ‰ํ•ด์•ผ ํ•œ๋‹ค.: O(n)
  • ์‚ฝ์ž…/์‚ญ์ œ: O(1)
  • ์›ํ•˜๋Š” ๋…ธ๋“œ์— ์ ‘๊ทผ + ์‚ฝ์ž…/์‚ญ์ œ: O(n+1)
  • ๊ฐ€์žฅ ์•ž์— ์ ‘๊ทผ + ์‚ฝ์ž…/์‚ญ์ œ: O(1)
  • ๊ฐ€์žฅ ๋’ค์— ์ ‘๊ทผ + ์‚ฝ์ž…: O(1+1)(tail ๋…ธ๋“œ ๋”ฐ๋กœ ์ง€์ •ํ•œ ๊ฒฝ์šฐ)
  • ๋’ค์—์„œ ๋‘๋ฒˆ์งธ ๋…ธ๋“œ(tail ๋…ธ๋“œ ์ „ ๋…ธ๋“œ)์ ‘๊ทผ + ์‚ญ์ œ: O(n+1)

Array vs LinkedList

Array๋Š” Random Access๋ฅผ ์ง€์›ํ•œ๋‹ค. ์š”์†Œ๋“ค์„ ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ํŠน์ • ์š”์†Œ์— ์ ‘๊ทผํ•˜๋Š” ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(1)์ด๋‹ค. ๋ฐ˜๋ฉด Linkedlist๋Š” Sequential Access๋ฅผ ์ง€์›ํ•œ๋‹ค. ์–ด๋–ค ์š”์†Œ๋ฅผ ์ ‘๊ทผํ•  ๋•Œ ์ˆœ์ฐจ์ ์œผ๋กœ ๊ฒ€์ƒ‰ํ•˜๋ฉฐ ์ฐพ์•„์•ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ํŠน์ • ์š”์†Œ์— ์ ‘๊ทผํ•  ๋•Œ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(N)์ด๋‹ค.

์ €์žฅ ๋ฐฉ์‹๋„ ๋ฐฐ์—ด์—์„œ ์š”์†Œ๋“ค์€ ์ธ์ ‘ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์œ„์น˜์— ์—ฐ์ด์–ด ์ €์žฅ๋œ๋‹ค. ๋ฐ˜๋ฉด Linkedlist์—์„œ๋Š” ์ƒˆ๋กœ์šด ์š”์†Œ์— ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ์œ„์น˜ ์ฃผ์†Œ๊ฐ€ linkedlist์˜ ์ด์ „ ์š”์†Œ์— ์ €์žฅ๋œ๋‹ค.

๋ฐฐ์—ด์—์„œ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ๋Š” O(N)์ด ์†Œ์š”๋˜์ง€๋งŒ, Linkedlist์—์„œ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ๋Š” O(1)์ด ์†Œ์š”๋œ๋‹ค.

๋ฐฐ์—ด์—์„œ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์„ ์–ธ ์‹œ ์ปดํŒŒ์ผ ํƒ€์ž„์— ํ• ๋‹น์ด ๋œ๋‹ค. (์ •์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น) ๋ฐ˜๋ฉด Linkedlist์—์„œ๋Š” ์ƒˆ๋กœ์šด ์š”์†Œ๊ฐ€ ์ถ”๊ฐ€๋  ๋•Œ ๋Ÿฐํƒ€์ž„์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•œ๋‹ค. (๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น)

๋ฐฐ์—ด์€ Stack ์„น์…˜์— ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ด ์ด๋ฃจ์–ด์ง„๋‹ค. ๋ฐ˜๋ฉด Linkedlist๋Š” Heap ์„น์…˜์— ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ด ์ด๋ฃจ์–ด์ง„๋‹ค.

์ฐธ๊ณ 

Array Array ArrayVSList LinkedList LinkedList LinkedList

Q&A


  1. Array์™€ LinkedList์˜ ์ฐจ์ด์ ์„ ์„ค๋ช…ํ•˜์„ธ์š”
  1. Array(List)์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง•๊ณผ ๊ทธ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ์žฅ์ ๊ณผ ๋‹จ์ ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜์„ธ์š”.
  1. Array๋ฅผ ์ ์šฉ์‹œํ‚ค๋ฉด ์ข‹์„ ๋ฐ์ดํ„ฐ์˜ ์˜ˆ๋ฅผ ๊ตฌ์ฒด์ ์œผ๋กœ ๋“ค์–ด์ฃผ์„ธ์š”. ๊ตฌ์ฒด์  ์˜ˆ์‹œ์™€ ํ•จ๊ป˜ Array๋ฅผ ์ ์šฉํ•˜๋ฉด ์ข‹์€ ์ด์œ , ๊ทธ๋ฆฌ๊ณ  Array๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋Š”์ง€ ํ•จ๊ป˜ ์„œ์ˆ ํ•ด์ฃผ์„ธ์š”.