Skip to content

Latest commit

ย 

History

History
207 lines (145 loc) ยท 6.28 KB

Data_Structure.md

File metadata and controls

207 lines (145 loc) ยท 6.28 KB

์ž๋ฃŒ ๊ตฌ์กฐ

๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ ๋ฐ ์ •๋ ฌํ•˜๋Š” ๋ฐฉ์‹


์ž๋ฃŒ๊ตฌ์กฐ์˜ ๋ถ„๋ฅ˜

์ž๋ฃŒ๊ตฌ์กฐ๋Š” ํฌ๊ฒŒ ์„ ํ˜• ์ž๋ฃŒ ๊ตฌ์กฐ, ๋น„์„ ํ˜• ์ž๋ฃŒ ๊ตฌ์กฐ๋กœ ๋‚˜๋‰œ๋‹ค

์„ ํ˜• ์ž๋ฃŒ ๊ตฌ์กฐ:

  • ๋ฆฌ์ŠคํŠธ, ์Šคํƒ, ํ, ๋ฑ ๋“ฑ ๋น„์„ ํ˜• ์ž๋ฃŒ ๊ตฌ์กฐ:
  • ๊ทธ๋ž˜ํ”„, ํŠธ๋ฆฌ, ํž™ ๋“ฑ


Array(๋ฐฐ์—ด)

๊ณ ์ •๋œ ํฌ๊ธฐ๋ฅผ ๊ฐ–๋Š” ๊ฐ™์€ ์ž๋ฃŒํ˜•์˜ ์›์†Œ๋“ค์ด ๋ฉ”๋ชจ๋ฆฌ์— ์—ฐ์†์ ์œผ๋กœ ์ €์žฅ๋˜์–ด ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ

  • ์ธ๋ฑ์Šค(index)๋ฅผ ํ†ตํ•œ ์ž„์˜์ ‘๊ทผ ๊ฐ€๋Šฅ (Random Access)
  • ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๊ฐ€ ํ™•์‹คํ•˜๊ฒŒ ์ •ํ•ด์ ธ ์žˆ์œผ๋ฉฐ ์ ‘๊ทผ์ด ๋นˆ๋ฒˆํ•œ ๊ฒฝ์šฐ ํšจ์œจ์ 
  • ํ•˜์ง€๋งŒ ์‚ฝ์ž… ๋˜๋Š” ์‚ญ์ œ์˜ ๊ฒฝ์šฐ ์—ฐ์†์ ์ธ ํ˜•ํƒœ ์œ ์ง€๋ฅผ ์œ„ํ•ด shift ์—ฐ์‚ฐ์„ ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค O(n)

๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋Š” ์ •์ (static)์œผ๋กœ ์ƒ์„ฑํ›„ ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ฒ˜์Œ ํฌ๊ธฐ๊ฐ€ 10์ด๋ผ๋ฉด ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ 5๊ฐœ์—ฌ๋„ ์‹ค์ œ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋Š” 10์œผ๋กœ ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค

  • ์ œํ•œ์ ์ธ ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง€๋ฉฐ ๋ฉ”๋ชจ๋ฆฌ์˜ Stack ์˜์—ญ์— ํ• ๋‹น๋œ๋‹ค.


๋™์  ๋ฐฐ์—ด (Dynamic Array)

๊ฐ™์€ ์ž๋ฃŒํ˜•์˜ ์›์†Œ๋“ค์ด ๋ฉ”๋ชจ๋ฆฌ์— ์—ฐ์†์ ์œผ๋กœ ์ €์žฅ๋˜์–ด ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ

  • ์ •์  ๋ฐฐ์—ด๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ๊ณ ์ •๋œ ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง€์ง€ ์•Š๋Š”๋‹ค
  • C++ ์—์„œ๋Š” vector๊ฐ€ ์žˆ๊ณ  java์—์„œ๋Š” arraylist๊ฐ€ ์กด์žฌํ•œ๋‹ค

C++ Vector

๋™์  ๋ฐฐ์—ด๋กœ ์›์†Œ๋“ค์ด ๋ฉ”๋ชจ๋ฆฌ ์ƒ์—์„œ ์‹ค์ œ๋กœ ์ˆœ์ฐจ์ ์œผ๋กœ ์ €์žฅ๋˜์–ด ์žˆ๋‹ค

  • LIFO (Last In First Out) ๊ตฌ์กฐ์ด๋‹ค.
  • ์ฃผ๋กœ ๊ท ํ˜• ์ด์ง„ ํŠธ๋ฆฌ๋‚˜ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ๊ตฌํ˜„๋œ๋‹ค
  • ์ž„์˜์˜ ์œ„์น˜์— ์žˆ๋Š” ์›์†Œ์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์ด ๋น ๋ฅด๋‹ค
  • ์—ฌ์œ ๋ถ„์„ ๋‘๊ณ  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๊ณ  ๋ถ€์กฑํ•  ๊ฒฝ์šฐ ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•œ๋‹ค


vector ์‚ฌ์šฉ

vector ์ด๋ฆ„

vector<int> v;          // ๋ฒกํ„ฐ์˜ ์„ ์–ธ

// ๋ฒกํ„ฐ์— ์‚ฝ์ž…ํ•˜๋Š” push_back()
v.push_back(1);         // ๋ฒกํ„ฐ์— 1 ์‚ฝ์ž…
v.push_back(2);         // ๋ฒกํ„ฐ์— 2 ์‚ฝ์ž…
v.push_back(3);         // ๋ฒกํ„ฐ์— 3 ์‚ฝ์ž… 

v.pop_back();           // ๋งˆ์ง€๋ง‰ ์›์†Œ ์‚ญ์ œ

๋™์  ๋ฐฐ์—ด์€ ํฌ๊ธฐ๋ฅผ ์–ด๋–ป๊ฒŒ ๋Š˜๋ฆด๊นŒ?

๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ ๋Š˜๋ฆฌ๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ  ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜์—ฌ ๊ธฐ์กด์˜ ๋ฐฐ์—ด์„ ๋ณต์‚ฌํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค

  • ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ ์กฐ๊ธˆ์”ฉ ๋Š˜๋ฆฌ๋ฉด ๋ฐฐ์—ด์ด ์ฆ๊ฐ€ํ• ์ˆ˜๋ก ๋ณต์‚ฌํ•˜๋Š” ํšŸ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น„ํšจ์œจ์ ์ด๋‹ค.


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

๋ฐฐ์—ด์˜ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ๋นˆํ‹ˆ์—†๋Š” ๋ฐ์ดํ„ฐ์˜ ์ ์žฌ๋ผ๋Š” ์žฅ์ ์„ ๊ฐ€์ง„๋‹ค

  • ๋ฐฐ์—ด์—์„œ ์ธ๋ฑ์Šค๋Š” ์œ ์ผ๋ฌด์ดํ•œ ์‹๋ณ„์ž์ด์ง€๋งŒ ๋ฆฌ์ŠคํŠธ์—์„œ๋Š” ๋ช‡ ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ์ธ์ง€ ์ •๋„์˜ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง„๋‹ค.
  • ๋นˆ ์—˜๋ฆฌ๋จผํŠธ๋Š” ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค
  • ํฌ๊ฒŒ ArrayList, LinkedList๋กœ ๋‚˜๋‰œ๋‹ค

์–ธ์–ด๋ณ„๋กœ list์˜ ์ง€์› ์—ฌ๋ถ€๊ฐ€ ๋‹ค๋ฅด๋‹ค

  • C: ๋ฆฌ์ŠคํŠธ ์ง€์› x
  • JavaScript: ๋ฐฐ์—ด์— ๋ฆฌ์ŠคํŠธ ๊ธฐ๋Šฅ ํฌํ•จ
  • Python: ๊ธฐ๋ณธ ๋ฆฌ์ŠคํŠธ, ๋ฐฐ์—ด ์ง€์› x
  • Java: ๋ฐฐ์—ด๊ณผ ๋ฆฌ์ŠคํŠธ ๋ชจ๋‘ ์ง€์›, ArrayList์™€ LinkedList๋กœ ๋‚˜๋‰œ๋‹ค

Array List(์„ ํ˜• ๋ฆฌ์ŠคํŠธ)

๋ฐฐ์—ด์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ๋“ค์ด ์ˆœ์„œ๋Œ€๋กœ ๋Š˜์–ด์„  ๊ตฌ์กฐ

  • ๋ฐฐ์—ด์˜ ํŠน์„ฑ์„ ๊ณต์œ 

    ๋ฐ์ดํ„ฐ ์ ‘๊ทผ์ด ์šฉ์ดํ•˜์ง€๋งŒ ์‚ฝ์ž…, ์‚ญ์ œ๊ฐ€ ๋Š๋ฆฌ๋‹ค

  • ๋ฆฌ์ŠคํŠธ๋Š” ๋ฐฐ์—ด์ฒ˜๋Ÿผ ํฌ๊ธฐ๊ฐ€ ์ œํ•œ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํฌ๊ธฐ ๋ณ€๊ฒฝ์‹œ ๋งŽ์€ ๋น„์šฉ์ด ๋ฐœ์ƒํ•œ๋‹ค.

    ์ž๋ฐ”์˜ ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ ์‚ฌ์ด์ฆˆ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค -> ๋™์  ๋ฐฐ์—ด(Dynamic Array)


Linked List(์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ)

์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋Š” ๋…ธ๋“œ์™€ ํฌ์ธํ„ฐ๋กœ ๊ตฌ์„ฑ๋œ ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋œ ๊ตฌ์กฐ

  • ํฌ๊ธฐ๊ฐ€ ๊ฐ€๋ณ€์ ์ธ ๋ฆฌ์ŠคํŠธ๋กœ ๋ฐฐ์—ด์˜ ๋‹จ์ ์„ ๋ณด์™„ํ–ˆ๋‹ค
  • ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฅดํ‚ค๋Š” ํฌ์ธํ„ฐ๋ฅผ ์ €์žฅํ•  ์ €์žฅ๊ณต๊ฐ„์ด ๋”ฐ๋กœ ํ•„์š”ํ•˜๋‹ค
  • ๋ฐฐ์—ด๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ์ž„์˜์ ‘๊ทผ์ด ์•„๋‹Œ ์ˆœ์ฐจ์ ‘๊ทผ์œผ๋กœ ํƒ์ƒ‰์€ ๋ถˆ๋ฆฌํ•˜์ง€๋งŒ ์‚ฝ์ž…, ์‚ญ์ œ๊ฐ€ ์šฉ์ดํ•˜๋‹ค

์ฒซ๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ ํ—ค๋“œ(head), ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๋ฅผ ํ…Œ์ผ(tail)์ด๋ผ๊ณ  ํ•˜๋ฉฐ ๊ฐ๊ฐ์„ ๊ฐ€๋ฅดํ‚ค๋Š” ํฌ์ธํ„ฐ๊ฐ€ ๋”ฐ๋กœ ์กด์žฌํ•œ๋‹ค



์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ๊ตฌํ˜„

#include<stdio.h>
#include<stdlib.h>

typedef struct NODE{
    int data;
    struct NODE* next
}node;

void addNode(node *, int);
void deleteNode(node *);

int main(int argc, char * argv[])
{
    node * head = (node *)malloc(sizeof(node));
    head->next = NULL;

    node * cur = head->next;
    while(cur != NULL)
    {
        printf("%d\n", cur->data);
        cur = cur->next;
    }
    return 0;
}

void addNode(node * head, int data)
{
    node * newnode = (node *)malloc(sizeof(node));
    newNode->data = data;
    newNode->next = head->next;
    head->next = newNode;
}

void deleteNode(node *)
{
    node * delete = head->next;
    head->next=delete->next;
    free(delete);
}

Stack(์Šคํƒ)

LIFO(Last In Last Out) ํ›„์ž…์„ ์ถœ ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ

  • ์Šคํƒ์˜ ๋งจ ์œ—๋ถ€๋ถ„์„ ๊ฐ€๋ฅดํ‚ค๋Š” top ํฌ์ธํ„ฐ๊ฐ€ ์กด์žฌํ•œ๋‹ค

๋ฐ์ดํ„ฐ์˜ ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์€ ์Šคํƒ์˜ top์—์„œ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค



Queue(ํ)

FIFO(First In First Out) ์„ ์ž…์„ ์ถœ ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ

  • ํ์— ์ €์žฅ๋œ ๋งจ ์•ž์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๋ฅดํ‚ค๋Š” front์™€ ๋งจ ๋’ท ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๋ฅดํ‚ค๋Š” rear ํฌ์ธํ„ฐ๊ฐ€ ์กด์žฌํ•œ๋‹ค


Deque(๋ฑ)

double-ended queue์˜ ์ค„์ž„๋ง๋กœ์„œ ํ์˜ front์™€ rear์—์„œ ๋ชจ๋‘ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ๊ฐ€ ๊ฐ€๋Šฅํ•œ ํ



๋ฉด์ ‘ ์งˆ๋ฌธ

1. ArrayList์™€ LinkedList์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€์š” ?

ArrayList

  • ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ์— ์ž„์˜์ ‘๊ทผ ๊ฐ€๋Šฅ
  • ๋ฆฌ์ŠคํŠธ์˜ ํฌ๊ธฐ๊ฐ€ ์ œํ•œ๋˜์–ด ์žˆ์œผ๋ฉฐ, ๋ฆฌ์ŠคํŠธ์˜ ํฌ๊ธฐ๋ฅผ ์žฌ์กฐ์ •ํ•˜๋Š” ๊ฒƒ์€ ๋งŽ์€ ๋น„์šฉ์ด ๋ฐœ์ƒ
  • ๋ฐ์ดํ„ฐ์˜ ์‚ฝ์ž…, ์‚ญ์ œ์— ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค

LinkedList

  • ๋ฐ์ดํ„ฐ์˜ ์‚ฝ์ž…, ์‚ญ์ œ๊ฐ€ ์šฉ์ด
  • ์ž„์˜์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ  ์ˆœ์ฐจ์ ‘๊ทผ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค

2. Stack๊ณผ Queue์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€์š” ?