Skip to content

Mangjun/data-structure

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

7 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿš€ Advanced C Data Structures (Linux Kernel Style)

๋ณธ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋Š” C ์–ธ์–ด๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํ•ต์‹ฌ ์ž๋ฃŒ๊ตฌ์กฐ(ADT, Abstract Data Type)๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค. ๋‹จ์ˆœํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‹ค์Šต์„ ๋„˜์–ด, ์‹ค์ œ ๋ฆฌ๋ˆ…์Šค ์ปค๋„์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ณ ๊ธ‰ ์‹œ์Šคํ…œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ฒ•์„ ์ ์šฉํ•˜์—ฌ ์‹ค๋ฌด ์ˆ˜์ค€์˜ ๊ฒฌ๊ณ ํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„ ์—ญ๋Ÿ‰์„ ๊ธฐ๋ฅด๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

ํŠนํžˆ ์•„๋ž˜์˜ 4๊ฐ€์ง€ ํ•ต์‹ฌ ์›์น™์„ ๋ชจ๋“  ์ž๋ฃŒ๊ตฌ์กฐ ๊ตฌํ˜„์— ์—„๊ฒฉํ•˜๊ฒŒ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ๊ตฌ์กฐ์ฒด ์ž„๋ฒ ๋”ฉ (Struct Embedding): container_of ๋งคํฌ๋กœ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ์™€ ๋…ธ๋“œ๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ์ œ๋„ค๋ฆญ(Generic) ์„ค๊ณ„
  • ํ•จ์ˆ˜ ํฌ์ธํ„ฐ ํ…Œ์ด๋ธ” (Ops Table): ๊ตฌ์กฐ์ฒด ๋‚ด๋ถ€์— ops ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋‘์–ด C ์–ธ์–ด ํ™˜๊ฒฝ์—์„œ์˜ ๋‹คํ˜•์„ฑ(Polymorphism) ๊ตฌํ˜„
  • Pimpl ์ด๋””์—„ (Pointer to Implementation): ๋‚ด๋ถ€ ๊ตฌํ˜„์ฒด(Internal)๋ฅผ ์ˆจ๊ฒจ ํ—ค๋” ํŒŒ์ผ์˜ ์ปดํŒŒ์ผ ์˜์กด์„ฑ์„ ํš๊ธฐ์ ์œผ๋กœ ๋‚ฎ์ถ”๋Š” ์„ค๊ณ„
  • ๋ฉ”๋ชจ๋ฆฌ ๋ฌด๊ฒฐ์  ๊ฒ€์ฆ (Zero-Defect Memory): Valgrind๋ฅผ ํ™œ์šฉํ•œ ์ฒ ์ €ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜(Memory Leak) ๋ฐ ๋Œ•๊ธ€๋ง ํฌ์ธํ„ฐ ์ถ”์ 

๐Ÿ’ป ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ (Development Environment)

๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์™€ ํฌ์ธํ„ฐ ์—ฐ์‚ฐ์ด ํ•ต์‹ฌ์ธ ๋งŒํผ, ๋ฆฌ๋ˆ…์Šค ๋„ค์ดํ‹ฐ๋ธŒ ํ™˜๊ฒฝ์—์„œ ์—„๊ฒฉํ•œ ๋””๋ฒ„๊น…์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  • OS: Ubuntu 24.04 LTS
  • IDE: Visual Studio Code (VSCode)
  • Compiler: GCC (GNU Compiler Collection)
  • Memory Debugger: Valgrind (Memcheck)
  • Build System: Makefile

๐Ÿ“‚ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ ๋ฐ ์ปค๋ฆฌํ˜๋Ÿผ (Table of Contents)

๊ฐ ๋‹จ๊ณ„๋ณ„๋กœ ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ๋ถ€ํ„ฐ ๋น„์„ ํ˜•, ํƒ์ƒ‰ ๊ธฐ๋ฐ˜ ์ž๋ฃŒ๊ตฌ์กฐ๊นŒ์ง€ ์ ์ง„์ ์œผ๋กœ ํ™•์žฅํ•ด ๋‚˜๊ฐ‘๋‹ˆ๋‹ค.

Phase 1: ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ (Linear Data Structures)

๊ฐ€์žฅ ๊ธฐ๋ณธ์ด ๋˜๋Š” ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ์ œ์–ดํ•˜๊ณ , ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์Šคํƒ๊ณผ ํ๋ฅผ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค.

  • 01_linked_list/
  • 02_stack/
  • 03_queue/

Phase 2: ๋น„์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ (Non-linear Data Structures)

๊ณ„์ธต์  ๋ฐ์ดํ„ฐ์™€ ๋ณต์žกํ•œ ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ํŠธ๋ฆฌ ๋ฐ ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค.

  • 04_tree/
  • 05_priority_queue/
  • 06_graph/

Phase 3: ํƒ์ƒ‰ ๋ฐ ๋งคํ•‘ ๊ตฌ์กฐ (Search & Mapping)

ํšจ์œจ์ ์ธ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰๊ณผ ์œ ์ผ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ๊ณ ๊ธ‰ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

  • 07_set/
  • 08_map/

๐Ÿ’ก ๊ฐ ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด๋ถ€์—๋Š” ์ž๋ฃŒ๊ตฌ์กฐ ์ธํ„ฐํŽ˜์ด์Šค(.h), ๋‚ด๋ถ€ ๊ตฌํ˜„์ฒด(.c), ํ…Œ์ŠคํŠธ ์ฝ”๋“œ(main.c), ๊ทธ๋ฆฌ๊ณ  Valgrind ํ…Œ์ŠคํŠธ ์ž๋™ํ™”๋ฅผ ์œ„ํ•œ ์‰˜ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

About

[ubuntu:24.04] data_structure_c (gcc, gdb, valgrind)

Resources

Stars

Watchers

Forks

Contributors