project #3



   ๋‹คํ•ญ์‹ ์—ฐ์‚ฐ


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


                     ์กฐ์žฅ:
             20113311 ์žฅ๋™๊ทœ
                     ์กฐ์›:
             20113309 ์ดํƒœ๊ตฌ
             20113318 ์ •์˜ˆ๋ฆฐ
             20113315 ์ •๋ฏผ์ •
             20083657 ์„œ์˜์ง„
์ˆœ์„œ
         โ€ข์กฐ์›๋ณ„ ์—…๋ฌด๋ถ„๋‹ด
               โ€ข์ผ์ • ๊ณ„ํš
                    -ํšŒ์˜๋ก
               โ€ข๋ฌธ์ œ ํŒŒ์•…
-Linked List๋ผ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ
                 ๋‹คํ•ญ์‹ ์—ฐ์‚ฐ
           โ€ข์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณ„ํš


                โ€ข์†Œ์Šค๊ตฌํ˜„
โ€ข๋ฌธ์ œ์  ํŒŒ์•… / ํ•ด๊ฒฐ๋ฒ• ํ† ์˜
                โ€ข์ตœ์ข…์†Œ์Šค
  โ€ข์‹œ๊ฐ„ ๋ณต์žก๋„/๊ณต๊ฐ„ ๋ณต์žก๋„
1) ์กฐ์›๋ณ„ ์—…๋ฌด ๋ถ„๋‹ด

์ด๋ฆ„            ์—ญํ• 

์žฅ๋™๊ทœ           ์กฐ์žฅ, ๋ณด๊ณ ์„œ ์ž‘์„ฑ, ์ž๋ฃŒ ์กฐ์‚ฌ

์ •์˜ˆ๋ฆฐ           ์ฝ”๋”ฉ, ์ž๋ฃŒ ์กฐ์‚ฌ

์ •๋ฏผ์ •           ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์ž๋ฃŒ์กฐ์‚ฌ

์„œ์˜์ง„           ๋ณด๊ณ ์„œ ์ž‘์„ฑ, ์ž๋ฃŒ ์กฐ์‚ฌ




2)์ผ์ •๊ณ„ํš

๋‚ ์งœ            ๊ณ„ํš
              ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ, ๋‹คํ•ญ์‹ ์—ฐ์‚ฐ์— ๋Œ€ํ•ด ์กฐ์‚ฌ
04.12~04.17
              ํ•ด์˜ค๊ธฐ, ๋ณด๊ณ ์„œ ์ž‘์„ฑ
              ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ ์†Œ์Šค ๊ตฌํ˜„ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์ด
04.17~04.19   ๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ๋‹คํ•ญ์‹ ์—ฐ์‚ฐ์— ํ™œ์šฉํ•  ๊ฒƒ์ธ์ง€
              ์ƒ๊ฐ ํ•ด์˜ค๊ธฐ, ๋ณด๊ณ ์„œ ์ž‘์„ฑ
04.19~04.24   ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์†Œ์Šค๋กœ ๊ตฌํ˜„, ์ตœ์ข… ๋ณด๊ณ ์„œ ์ž‘์„ฑ
3)๋ฌธ์ œํŒŒ์•…

๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ(Linked List)

๋ฐฐ์—ด ๊ตฌ์กฐ์˜ ๋‹จ์ ์„ ๋ณด์•ˆํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ๋ฐฐ์—ด์€ ์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ ํ•ด๋‹น ์ฃผ์†Œ์— ๋ฐ”๋กœ ์ ‘
๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์ด ์žˆ์ง€๋งŒ, ๋‹จ์ ์œผ๋กœ๋Š” ์‚ฝ์ž…, ์‚ญ์ œ ์—ฐ์‚ฐ์ด ๋ณต์žกํ•˜๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฐฐ์—ด์€ ์„ ์–ธ
์‹œ ํฌ๊ธฐ๋ฅผ ๋ฏธ๋ฆฌ ์ •ํ•ด์ค˜์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฐ์—ด ๊ณต๊ฐ„ 100๊ฐœ๋ฅผ ์„ ์–ธํ•ด ๋†“๊ณ  10๊ฐœ๋งŒ ์“ฐ๋Š” ๊ฒฝ์šฐ
(๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„), 200๊ฐœ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ(๊ณต๊ฐ„ ๋ถ€์กฑ) ๋ผ๋ฉด ๋ฐฐ์—ด ์„ ์–ธ ๋ถ€๋ถ„์„ ๋‹ค์‹œ ์ˆ˜์ •ํ•ด์ค˜์•ผ ํ•˜
๋Š” ๋ถˆํŽธํ•จ์ด ์žˆ๋‹ค.


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


๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ์˜ ์žฅ์ ์œผ๋กœ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋ฏธ๋ฆฌ ๊ณต๊ฐ„์„ ํ• ๋‹นํ•  ํ•„์š” ์—†์ด ํ•„์š”ํ• ๋•Œ๋งˆ๋‹ค ๊ณต
๊ฐ„์„ ํ• ๋‹น ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ทธ๋Ÿฌ๊ธฐ ๋•Œ๋ฌธ์— ํ•„์š”ํ•œ ๋ณ€์ˆ˜์˜ ํฌ๊ธฐ๋ฅผ ๋ชจ๋ฅผ ๊ฒฝ
์šฐ์—๋Š” ๋ฐฐ์—ด๋ณด๋‹ค ํšจ์œจ์ ์ด๋‹ค. ํ•˜์ง€๋งŒ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ์—๋„ ๋‹จ์ ์€ ์žˆ๋‹ค. ๋‹ค์Œ ๋…ธ๋“œ์˜ ์ฃผ์†Œ๋ฅผ
๊ฐ€๋ฆฌํ‚ค๊ธฐ ์œ„ํ•ด 4byte(32๋น„ํŠธ ์šด์˜์ฒด์ œ ๊ธฐ์ค€)์˜ ๊ณต๊ฐ„์ด ๋‚ญ๋น„๋œ๋‹ค. ๋˜, ์ธ๋ฑ์Šค๋กœ ํ•ด๋‹น ์ฃผ์†Œ์—
์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๋…ธ๋“œ์˜ ์ฒซ ๋ฒˆ์งธ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” Head๋ผ๋Š” ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด์„œ ์ˆœ์ฐจ์ ์œผ
๋กœ ์ ‘๊ทผํ•˜๋Š” ๋‹จ์ ์œผ๋กœ ์ธํ•ด ๊ฒ€์ƒ‰์†๋„๊ฐ€ ๋А๋ฆฌ๋‹ค๋Š” ๋‹จ์ ์ด์žˆ๋‹ค.




(3๋ฒˆ์ง€ ์ฃผ์†Œ๊นŒ์ง€ ๊ฐ€๊ธฐ ์œ„ํ•ด์„œ๋Š” 1, 2๋ฒˆ ์ฃผ์†Œ์ง€๋ฅผ ๊ฑฐ์ณ์•ผ ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.)
๋‹ค์Œ์€ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ตฌํ˜„ํ•œ ์†Œ์Šค์ด๋‹ค.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


typedef struct tagNode{
         char Name[20];
         struct tagNode* NextNode;
}NODE;


    ๊ตฌ์กฐ์ฒด๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š” ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ. Name์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์„ ๋ณ€์ˆ˜๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐ€
๋ฉฐ, tagNode*๋Š” ๋‹ค์Œ ๋…ธ๋“œ์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜์ด๋‹ค.




NODE* CreateNode(char name[])
{
         NODE* NewNode = (NODE*)malloc(sizeof(NODE));


         strcpy(NewNode -> Name, name);
         NewNode -> NextNode = NULL;


         return NewNode;
}


    NODE๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. ์ธ์ž๋กœ๋Š” ํ•ด๋‹น ๋…ธ๋“œ์— ๋“ค์–ด๊ฐˆ ๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ’์„ ๋ฐ›๊ณ 
์žˆ๋‹ค. NewNode๋ผ๋Š” ํฌ์ธํ„ฐ๋ฅผ ์ƒ์„ฑํ›„ ๊ทธ ํ•ด๋‹นํ•˜๋Š” ์ฃผ์†Œ์— mallocํ•จ์ˆ˜๋กœ ๊ณต๊ฐ„์„ ๋™์ ํ• ๋‹นํ•˜
๊ณ  ์žˆ๋‹ค.




void ConnectNode(NODE** Head, NODE* Node)
{
         if(NULL == (*Head))
{
                *Head = Node;
         }
         else
         {      NODE* Current = *Head;


                while(Current -> nextNode != NULL)
                {
                       Current = Current -> NextNode;
                }
                Current -> NextNode = Node;
         }
}


    ์ธ์ž๋กœ๋Š” ์ฒซ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” Head์˜ ์ฃผ์†Œ๊ฐ’๊ณผ ์—ฐ๊ฒฐํ•œ ๋…ธ๋“œ๋ฅผ ์ธ์ž๋กœ ๋ฐ›๋Š”๋‹ค. ์—ฌ๊ธฐ์„œ ํ—ค
๋“œ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋…ธ๋“œ๊ฐ€ ์—†๋Š”(NULL)์ƒˆ๋กœ์šด ๋…ธ๋“œ๋ผ๋ฉด, main์— ์„ ์–ธํ•œ Head๊ฐ’ ์ž์ฒด๋ฅผ ๋ฐ”๊พธ๊ธฐ
์œ„ํ•ด ํฌ์ธํ„ฐ Head์˜ ์ฃผ์†Œ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฐ๊ณผ์ ์œผ๋ก  ์ด์ค‘ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.


๋…ธ๋“œ์˜ ๋งจ ๋งˆ์ง€๋ง‰์— ์‚ฝ์ž…ํ•  ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.
    1. Head๊ฐ€ NULL์ผ ๊ฒฝ์šฐ(ํ…… ๋นˆ ๋…ธ๋“œ)
    2. Head๊ฐ€ NULL์ด ์•„๋‹ ๊ฒฝ์šฐ(ํ•˜๋‚˜ ์ด์ƒ์˜ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ)


    1๋ฒˆ์˜ ๊ฒฝ์šฐ๋Š” Head์˜ ๋‹ค์Œ ๋…ธ๋“œ์— ์ƒˆ ๋…ธ๋“œ์˜ ์ฃผ์†Œ๊ฐ’์„ ๋„ฃ์œผ๋ฉด ๋˜์ง€๋งŒ, 2๋ฒˆ์˜ ๊ฒฝ์šฐ์—” ๋
๋…ธ๋“œ๋ฅผ ์ฐพ์•„์„œ(NULL์ด ์žˆ๋Š”๊ณณ) ์—ฐ๊ฒฐ ํ•ด ์ค˜์•ผ ํ•œ๋‹ค. NODE* Current;๋ฅผ ์„ ์–ธํ•˜๋Š” ์ด์œ ๋Š”
Head์˜ ๊ฐ’์„ ๋ฐ”๊พธ์ง€ ์•Š๊ณ  ์—ฐ๊ฒฐ๋œ ๋‹ค๋ฅธ ๋…ธ๋“œ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.




void PrintNode(NODE* Head, int index)
{
         NODE* Current = Head;
while(Current != NULL && 0 < index)
        {
                index--;
                Current = Current -> NextNode;
        }
        printf(โ€œ%snโ€, Current -> Name);
}


    ๋…ธ๋“œ์˜ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. ์ธ์ž๋กœ๋Š” Head์™€ ๋ช‡ ๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ ์ถœ๋ ฅํ• ๊ฑด์ง€ ์ •ํ•˜๋Š” ๋ณ€
์ˆ˜์ด๋‹ค. while์˜ ๊ฒฝ์šฐ Current != NULL์€ NULL์ผ ๊ฒฝ์šฐ์—” ๋…ธ๋“œ์˜ ๋์ด๋ฏ€๋กœ ์ด ์ด์ƒ ์ ‘๊ทผ์„
ํ•˜์ง€์•Š๊ธฐ ์œ„ํ•ด ์“ด๋‹ค.




int GetCountNode(NODE * Head)
{
        NODE* Current = Head;
        int count = 0;


        while(Current != NULL)
        {
                count++;
                Current = Current -> NextNode;
        }
        return count;
}
PrintNode๋กœ ์ „์ฒด ์ถœ๋ ฅ์„ ํ•˜๊ธฐ๋ฅผ ์›ํ•  ๊ฒฝ์šฐ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์•Œ์•„๋‚ด๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.




void InsertNode(NODE** Head, NODE* ConnectNode, int index)
{
        if(0 == index)
{
               ConnectNode -> NextNode = (*Head);
               *Head = ConnectNode;
        }
        else
        {
               NODE* Current = *Head;


               while(0 < (--index))
               {
                       Current = Current -> NextNode;
               }
               ConnectNode -> NextNode = Current -> NextNode;
               Current -> NextNode = ConnectNode;
        }
}




๋…ธ๋“œ์™€ ๋…ธ๋“œ ์‚ฌ์ด์— ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.


    1. 4๋ฒˆ์ง€ ์ฃผ์†Œ์˜ ๋‹ค์Œ ๋…ธ๋“œ ์ฃผ์†Œ๊ฐ’์„ 2๋ฒˆ์ง€ ๋…ธ๋“œ์˜ ์ฃผ์†Œ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝ
    2. 2๋ฒˆ์ง€ ๋…ธ๋“œ์˜ ์ฃผ์†Œ๊ฐ’์„ 4๋ฒˆ์ง€ ๋…ธ๋“œ์˜ ์ฃผ์†Œ๋กœ ๋ณ€๊ฒฝ




void DestroyNode(NODE** Head, int index)
{
        NODE* Remove = *Head;


        while(Remove != NULL && 0<(--index))
{
                Remove = Remove -> NextNode;
        }
        if(*Head == Remove)
        {
                *Head = Remove -> NextNode;
        }
        else
        {
                NODE* Current = *Head;
                while(Current != NULL && Current -> NextNode != Remove)
                {
                        Current = Current -> NextNode;
                }
                if(Current != NULL)
                {
                        Current -> NextNode = Remove -> NextNode;
                }
        }
        free(Remove);
}




    ์‚ญ์ œ ์—ฐ์‚ฐ์€ ์‚ฝ์ž… ์—ฐ์‚ฐ๋ณด๋‹ค ํ›จ์”ฌ ๊ฐ„๋‹จํ•˜๋‹ค. ์‚ญ์ œํ•  ๋…ธ๋“œ์˜ ์•ž๋…ธ๋“œ(1๋ฒˆ๋…ธ๋“œ)์˜ ๋‹ค์Œ ์ฃผ์†Œ๋ฅผ
์‚ญ์ œํ•  ๋…ธ๋“œ์˜ ๋‹ค์Œ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก๋งŒ ํ•˜๋ฉด ๋œ๋‹ค.
    ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ํ• ๋‹นํ•˜๋Š” ๊ณต๊ฐ„์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ํ•ด์ œํ•ด ์ค˜์•ผํ•œ๋‹ค. ๊ทธ๋Ÿฌ๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ํ•จ
์ˆ˜ free๊ฐ€ ์žˆ๋‹ค. ์ธ์ž๋Š” ํ•ด์ œํ•  ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์†Œ๊ฐ’๋งŒ ๋„˜๊ธฐ๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ญ์ œํ•  ๋…ธ๋“œ์˜ ์ฃผ์†Œ
๋ฅผ ๋ณด๋‚ด์ฃผ๋ฉด ๋œ๋‹ค.


๊ตฌ์กฐ์ฒด
    ๋‹ค๋ฅธ ์ข…๋ฅ˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ ๊ฒฐํ•ฉ๋ฒ•์„ ๋งํ•œ๋‹ค.
๊ฐ๊ธฐ ๋‹ค๋ฅธ ํ˜•์ด๋‚˜ ๋‹ค๋ฅธ ์˜๋ฏธ์˜ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฐฐ์—ด๋“ค์„ ํ•œ ๋ฒˆ์— ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„
ํ•œ ์ž๋ฃŒ๊ตฌ ์กฐํ˜•์ด๋‹ค.
struct ๊ตฌ์กฐ์ฒด ์ด๋ฆ„
                           {
                        ์ž๋ฃŒํ˜• ์ž๋ฃŒ์ด๋ฆ„;
                        ์ž๋ฃŒํ˜• ์ž๋ฃŒ์ด๋ฆ„;
                           }


๊ณผ ๊ฐ™์ด ์ •์˜ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ •์˜๋ฅผ ํ•  ๋•Œ์—๋Š” ๋‹ค์Œ์˜ ์กฐ๊ฑด์ด ๋”ฐ๋ฅธ๋‹ค.
โ‘ ๊ตฌ์กฐ์ฒด ์ •์˜์—์„œ ๋ฐ”๋กœ ์ดˆ๊ธฐํ™” ํ•  ์ˆ˜ ์—†๋‹ค.
โ‘ก๊ตฌ์กฐ์ฒด ์„ ์–ธ์€ ๋ฌธ์ž์— ํ•ด๋‹น๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋๋งˆ์นœ ํ›„ ;์„ ๋ถ™์—ฌ ์ฃผ์–ด์•ผ ํ•œ๋‹ค.


๊ตฌ์กฐ์ฒด๋ฅผ ํ†ตํ•ด์„œ ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ…Œ์ดํƒ€ ๊ฐ’์„ ๋ฌถ์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์—ฌ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ตฌํ˜„ ํ•  ์ˆ˜ ์žˆ๋„๋ก
ํ•œ๋‹ค.




4)์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณ„ํš

โ‘  ๋‹คํ•ญ์‹์˜ ํ‘œํ˜„




 DATA       LINK




1) ๊ฐ ๋…ธ๋“œ์˜ ๊ตฌ์กฐ์ฒด ๋ฐฐ์—ด์—์„œ DATA๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฐ์—ด๊ณผ ๋‹ค๋ฅธ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ๋Š” LINK
๊ฐ€ ์กด์žฌํ•œ๋‹ค. ์ด ๋•Œ DATA๋Š” ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๋ฐฐ์—ด์ด๊ณ , LINK๋Š” ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค
๋Š” ํฌ์ธํ„ฐ์˜ ์—ญํ• ์„ ํ•œ๋‹ค.


๋‹คํ•ญ์‹์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”,


2) ๋‹คํ•ญ์‹์˜ ๊ฐ ํ•ญ์„ ๊ณ„์ˆ˜๋ถ€๋ถ„ ์ง€์ˆ˜๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ„์–ด ์ƒ๊ฐํ•œ๋‹ค.
 DATA์˜ ๋ฐฐ์—ด๋„ ๊ณ„์ˆ˜์™€ ์ง€์ˆ˜๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ์ฒด๋ฅผ ์„ ์–ธํ•œ๋‹ค.




 ๊ณ„์ˆ˜๋ถ€๋ถ„       ์ง€์ˆ˜๋ถ€๋ถ„
์ฆ‰,


 DATA-       DATA-์ง€
                      LINK
 ๊ณ„์ˆ˜๋ถ€๋ถ„        ์ˆ˜๋ถ€๋ถ„


๊ณผ ๊ฐ™์ด ํ•œ ๋…ธ๋“œ๊ฐ€ ๋งŒ๋“ค์–ด์ง€๊ฒŒ ๋œ๋‹ค.


3) ์ด๋Ÿฌํ•œ ๋…ธ๋“œ๋ฅผ ๋‹คํ•ญ์‹์—์„œ ํ•ญ์˜ ๊ฐœ์ˆ˜๋งŒํผ LINK๋ฅผ ์ด์šฉํ•ด ๋‹ค์Œ ํ•ญ์„ ๊ฐ€๋ฆฌํ‚ค๊ณ  ๋‹ค์Œ ํ•ญ์„
     ๊ฐ€๋ฆฌํ‚ค๋Š” ์‹์œผ๋กœ ํ•œ ๊ฐœ์˜ ๋‹คํ•ญ์‹์— ๋Œ€ํ•ด ํ•œ ๊ฐœ์˜ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค.


โ‘ก ๋‹คํ•ญ์‹์˜ ๋ง์…ˆ๊ณผ ๋บ„์…ˆ


1) ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋กœ ์ž‘์„ฑ ๋œ ๋‹คํ•ญ์‹1๊ณผ ๋‹คํ•ญ์‹2์— ๋Œ€ํ•ด์„œ ์ง€์ˆ˜๋ถ€๋ถ„์ด ๊ฐ™์€ ๋…ธ๋“œ๋ผ๋ฆฌ ์—ฐ์‚ฐ์„ ํ•ด
์ค€     ๋‹ค.
2) ๋‹คํ•ญ์‹ 3์„ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋กœ ์ž‘์„ฑํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์ด ๋•Œ 1๊ณผ2๋กœ ์—ฐ์‚ฐ๋œ ๊ฐ’์„ 3์— ์ €์žฅํ•œ๋‹ค.
3) 1๊ณผ 2์— ๊ฐ™์€ ์ง€์ˆ˜๋ถ€๋ถ„์ด ์—†์–ด์„œ ์—ฐ์‚ฐ๋˜์ง€ ์•Š์€ ๋‚˜๋จธ์ง€ ํ•ญ๋“ค์€ ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌ๋˜์–ด์„œ 3์—
์ €     ์žฅ๋œ๋‹ค.
4) ๋‹คํ•ญ์‹์˜ ์—ฐ์‚ฐ์„ ๋งˆ์ณ์„œ 3์— ์ €์žฅ๋œ ๊ฒฐ๊ณผ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.



โ‘ข ๋‹คํ•ญ์‹์˜ ๊ณฑ์…ˆ
1) ๋‹คํ•ญ์‹ 1์˜ ๋…ธ๋“œ์™€ ๋‹คํ•ญ์‹2์˜ ๋…ธ๋“œ์˜ ๊ณ„์ˆ˜๋ถ€๋ถ„์€ ๊ณฑ์…ˆ์—ฐ์‚ฐ์„ ํ•˜๊ณ  ์ง€์ˆ˜๋ถ€๋ถ„์€ ๋”ํ•˜๊ธฐ ์—ฐ
์‚ฐ     ์„ ํ•ด์ค€๋‹ค.
2) ๋‹คํ•ญ์‹1์˜ ๋…ธ๋“œ์™€ ๋‹คํ•ญ์‹2์˜ ๋…ธ๋“œ๋Š” ์„œ๋กœ์˜ ๋…ธ๋“œ๊ฐ€ ๋ชจ๋‘ ์ˆœ์„œ์Œ์„ ํ•œ ๋ฒˆ ์”ฉ์€ ์ด๋ฃจ์–ด์•ผ
๋œ     ๋‹ค.
3) ์ˆœ์„œ์Œ์„ ์ด๋ฃจ์–ด์„œ ์—ฐ์‚ฐ ๋œ ๊ฒฐ๊ณผ ๊ฐ’์€ ์ƒˆ๋กœ์šด ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ 3์— ์ €์žฅ๋œ๋‹ค.
4) ๊ฐ ๋…ธ๋“œ๋“ค์„ ๋ชจ๋‘ ๋”ํ•  ์ˆ˜ ์žˆ๋„๋ก, ์œ„์—์„œ ์ž‘์„ฑํ•˜์˜€๋˜ ADD์—ฐ์‚ฐ์„ ํ•œ ๋ฒˆ ๋” ํ•ด์ค€๋‹ค.
5) ์ •๋ฆฌ ๋˜์–ด 3์— ์ €์žฅ๋œ ๊ฒฐ๊ณผ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.


โ‘ฃ ๋‹คํ•ญ์‹์˜ ๋‚˜๋ˆ—์…ˆ
1) ๋‚˜๋ˆ„๋Š” ๋‹คํ•ญ์‹์˜ ์ตœ๊ณ ์ฐจํ•ญ์ด ๋‚˜๋ˆ ์ง€๋Š” ์ตœ๊ณ ์ฐจํ•ญ๊ณผ ๊ฐ™์•„์ง€๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋Š” X๊ฐ€ ๊ณ„์†ํ•ด์„œ ๋ชซ
 ์ด ๋  ์ˆ˜ ์žˆ๋‹ค.
2) ๊ณ„์ˆ˜์˜ ๊ณ„์‚ฐ์€,
 p(x)์˜ ๊ณ„์ˆ˜ = s(x)๊ณ„์ˆ˜*q(x) ๊ณ„์ˆ˜, q(x)๊ณ„์ˆ˜๋Š” p/s๊ณผ ๊ฐ™์ด ๋œ๋‹ค.
3) ๊ณ„์† ์ตœ๊ณ ์ฐจํ•ญ์— ๋งž์ถฐ์„œ X๊ฐ€ ๊ณฑํ•ด์ ธ์„œ ๋‚˜๋ˆ ์ง€๋Š” ๋‹คํ•ญ์‹์— ๊ทธ ๊ฒฐ๊ณผ ๊ฐ’์„ ๋บ„์…ˆ์„ ํ•˜๊ณ  ์žˆ
๋‹ค.
 ์ด ๋•Œ ๊ณฑํ•ด์ง€๋Š” ์ฐจ์ˆ˜๊ฐ€ 0์ด๊ฑฐ๋‚˜ ๋‚˜๋จธ์ง€๊ฐ€ 0์ด๋ฉด ์Šคํ†ฑํ•œ๋‹ค.
 ๋งŒ์•ฝ ๋บ„์…ˆ์„ ํ•˜๋‹ค๊ฐ€ ๋‹คํ•ญ์‹์ด ๋‚จ๊ฒŒ ๋˜๋ฉด ๊ทธ ๋‚จ์€ ๋‹คํ•ญ์‹์€ ๋‚˜๋จธ์ง€๊ฐ€ ๋œ๋‹ค.
5)์†Œ์Šค ๊ตฌํ˜„

โ‘ ์†Œ์Šค ๋ถ„์„

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


typedef struct polynomial
{
         int degree; //์ฐจ์ˆ˜
         double coef;//๊ณ„์ˆ˜
         struct polynomial *link;
}polynomial;


typedef struct node
{
         int l;
         polynomial *s;
         polynomial *f;//๋‹ค์Œ์„ ๊ฐ€๋ฆฌํ‚ฌ link
}node;


void st(node *point) //์ดˆ๊ธฐํ™”
{
         point->l=0;
         point->s=point->f=NULL;
}


void insert_node(node *point,double coef,int degree)
{
         //char *temp;
polynomial *temp=(polynomial *)malloc(sizeof(node));//์—ฐ๊ธธ๋ฆฌ์ŠคํŠธ์˜ ๋ฉ”๋ชจ๋ฆฌํ• ๋‹น์„
temp์˜ ํฌ์ธํ„ฐ ์˜ฎ๊ธฐ๋Š” ์ •๋„์— ๋”ฐ๋ผ ํ• ๋‹นํ•ด์คŒ
        if(temp==NULL)
        {
                 exit(1);
        }
        temp->coef=coef;//ํฌ์ธํ„ฐ๋กœ polynomialํƒ€์ž…์˜ ๊ตฌ์กฐ์ฒด๋ฅผ ๋ถˆ๋Ÿฌ์™€์„œ ๊ณ„์ˆ˜๋ฅผ ์‚ฝ์ž…
        temp->degree=degree;//์ฐจ์ˆ˜๋ฅผ ์‚ฝ์ž…


        if(point->f==NULL)//๋งŒ์•ฝ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์—์„œ ๋นˆ๊ฐ’์„ ๋งŒ๋‚˜๋ฉด ๋‹ค์‹œ temp๋กœ ํฌ์ธํ„ฐ๋ฅผ ๋Œ
๋ ค์คŒ
        {
                 point->s=point->f=temp;
        }
        else//๊ทธ ์ด์™ธ์˜ ๊ฒฝ์šฐ point๋Š”
        {
                 point->f->link=temp;
                 point->f=temp;
        }
        point->l++;//ํฌ์ธํ„ฐ๋ฅผ ๊ธธ์ด๋งŒํผ ์ฆ๊ฐ€ํ•ด์ค˜์„œ ๋งˆ์ง€๋ง‰ ์ž๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ์„ค์ •
}
/*void polynomial_add(node point1, node point2, node point3)
{
        polynomial *a=point1->
        */


//๋‹คํ•ญ์‹ ์ถœ๋ ฅ
void print(node *point)
{
        polynomial *p=point->s;//pํฌ์ธํ„ฐ๋ฅผ point๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ์ฒ˜์Œ ์ž๋ฆฌ์ธs์˜
์ฃผ์†Œ๊ฐ’์„ ๋ฐ›์•„์˜ด
        for(;p;p=p->link)
        {
                 if(p->coef==0 || p->degree==0)//๋งŒ์•ฝ ๊ณ„์ˆ˜๋‚˜ ์ฐจ์ˆ˜๊ฐ€ ๋ชจ๋‘ 0์ด๋ฉด ์ถœ๋ ฅํ•˜
์ง€ ์•Š์Œ
                 {
                            printf("");
                 }
                 else if(p->degree==1)//์ฐจ์ˆ˜๊ฐ€ 1์ด๋ฉด ๊ณ„์ˆ˜๋งŒ ์ถœ๋ ฅ
                 {
                            printf("%d",p->coef);
}
                 else
                 {
                          printf("%dx^%d",p->coef,p->degree); //๊ณ„์ˆ˜๊ฐ€๋‚˜ ์ง€์ˆ˜๊ฐ€ 0์ด ์•„๋‹ˆ
๋ฉด ๊ณ„์ˆ˜x^์ง€์ˆ˜ ํ˜•ํƒœ๋กœ ํ‘œ์‹œ
                 }
                 if(p->link==NULL)//P๊ฐ€ ๊ฐ€๋ฆฌํ‚จ ๊ณณ์ด ๋นˆ๊ฐ’์ด๋ฉด ์•„๋ฌด๊ฒƒ๋„ ์ถœ๋ ฅํ•˜์ง€ ์•Š์Œ.
                 {
                          printf("");
                 }
                 else//๊ฐ’์ด ์žˆ๋Š”๊ฒฝ์šฐ ๊ฐ€์šด๋ฐ์— +๋ฅผ ์ถœ๋ ฅ
                 {
                          printf(" + ");
                 }


        }
                 printf("n");
}
void poly_add(node *plist1, node *plist2, node *plist3)
{
        polynomial *a=plist1->s;//๋‹คํ•ญ์‹ 1์„ ํƒ์ƒ‰ํ•  ํฌ์ธํ„ฐ
        polynomial *b=plist2->s;//๋‹คํ•ญ์‹ 2๋ฅผ ํƒ์ƒ‰ํ•  ํฌ์ธํ„ฐ
        int sum;//๊ณ„์ˆ˜๋ฅผ ๋‹ด์„ ๋ณ€์ˆ˜


        while(a&&b)
        {
                 if(a->coef == b->coef)//์ง€์ˆ˜๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ
                 {
                          sum=a->coef+b->coef;//a,b ๋ฐ›์€ ๊ณ„์ˆ˜๊ณผ ์ฐจ์ˆ˜๋ฅผ coef๊ตฌ์กฐ์ฒด์— ์ €
์žฅ
                          if(sum!=0)
                          {
                                    insert_node(plist3,sum,a->degree);//์‚ฝ์ž…ํ•จ์ˆ˜๋ฅผ   ๋ถˆ๋Ÿฌ์˜ด,
๋‹คํ•ญ์‹1์˜ ๊ณ„์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” polynomial๊ตฌ์กฐ์ฒด. ์•ž์—์„œ ๊ณ„์‚ฐ ํ•ด์ค€ sum์€ ๊ณ„์ˆ˜๋กœ ์ €์žฅ.a๋Š” ๋‹ค
ํ•ญ์‹1์˜ ์ฐจ์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚ด.
                          }
                          b=b->link;//๋‘˜๋‹ค ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ link๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•จ.
                          a=a->link;
                 }
                 else if(a->degree >b->degree)
                 {
insert_node(plist3,a->coef,a->degree);//์ฐจ์ˆ˜๋ฅผ   ๊ฐ€๋ฆฌํ‚ค๊ณ    ์žˆ์„๋•Œ,
๋‹คํ•ญ์‹3๋ฒˆ์งธ=1+2์˜ ๊ฒฐ๊ณผ๊ฐ’์„ ์ €์žฅ.
                          a=a->link;
                  }
                  else
                  {
                          insert_node(plist3,b->coef,b->degree);
                          b=b->link;
                  }
                  for(;a!=NULL;a=a->link)
                  {
                          insert_node(plist3,a->coef,a->degree);
                  }
                  for(;b!=NULL;b=b->link)
                  {
                          insert_node(plist3,b->coef,b->degree);
                  }
        }




}


void main()
{
        node list1, list2, list3; //๋‹คํ•ญ์‹ ์ž…๋ ฅ๋ฐ›์„ ๋ณ€์ˆ˜ ์„ ์–ธ
                  double a;
                  int b; //ํ•ญ์˜ ๊ณ„์ˆ˜์™€ ์ง€์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜
        st(&list1);//st ํ•จ์ˆ˜ ํ˜ธ์ถœ๋กœ ๊ณต๋ฐฑ ๋ฆฌ์ŠคํŠธ
        st(&list2);
        st(&list3);




        //๋‹คํ•ญ์‹1์„ ์ž…๋ ฅ๋ฐ›๋Š” ๋ถ€๋ถ„
        printf("๋‹คํ•ญ์‹1์˜ ํ•ญ(๊ณ„์ˆ˜,์ง€์ˆ˜)์„ ์ž…๋ ฅํ•˜์„ธ์š”. (0 0 ์ด๋ฉด ์ž…๋ ฅ์ข…๋ฃŒ)n");
        while (1)
        {
                  scanf("%f %d",&a,&b);
                  if (a==0.0 && b==0)
                  {
break;
             }
             insert_node(&list1, a, b);
    }
    printf("๋‹คํ•ญ์‹1 : ");
    print(&list1); //๋‹คํ•ญ์‹1 ์ถœ๋ ฅ
    printf("n");


    //๋‹คํ•ญ์‹2์„ ์ž…๋ ฅ๋ฐ›๋Š” ๋ถ€๋ถ„
    printf("๋‹คํ•ญ์‹2์˜ ํ•ญ(๊ณ„์ˆ˜,์ง€์ˆ˜)์„ ์ž…๋ ฅํ•˜์„ธ์š”. (0 0 ์ด๋ฉด ์ž…๋ ฅ์ข…๋ฃŒ)n");
    while (1)
    {
             scanf("%f %d",&a,&b);
             if (a==0.0 && b==0)
             {
                       break;
             }
             insert_node(&list2, a, b);
    }
    printf("๋‹คํ•ญ์‹2 : ");
    print(&list2); //๋‹คํ•ญ์‹2 ์ถœ๋ ฅ
    printf("n");


    // ๋‹คํ•ญ์‹3 = ๋‹คํ•ญ์‹1 + ๋‹คํ•ญ์‹2
    poly_add(&list1, &list2, &list3);


    printf("๊ฒฐ๊ณผ : ");
    print(&list3); //๋‹คํ•ญ์‹3 ์ถœ๋ ฅ
}
7)์ตœ์ข…์†Œ์Šค
#include <stdio.h>
#include <stdlib.h>


// ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ๋…ธ๋“œ์˜ ๊ตฌ์กฐ
typedef struct listnode


{
         double coef;
         int expon;
         struct listnode *link;
}        listnode;


// ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ํ—ค๋”
typedef struct listheader


{
         int length;
         listnode *head;
         listnode *tail;
}        listheader;


//์ดˆ๊ธฐํ™” ํ•จ์ˆ˜
int reset(listheader *plist)


{
         plist->length=0;
         plist->head=plist->tail=NULL;
         return 0;
}


//plist๋Š” ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ํ—ค๋”๋ฅผ ๊ฐ€๋ฅดํ‚ค๋Š” ํฌ์ธํ„ฐ
//expon๋Š” ์ง€์ˆ˜ coef๋Š” ๊ณ„์ˆ˜
int poly_make(listheader *plist,double coef,int expon)


{
         listnode *n=(listnode*)malloc(sizeof(listnode));
         n->coef=coef;
         n->expon=expon;
n->link=NULL;
         if(plist->tail==NULL)
         {
                   plist->head=plist->tail=n;
         }
         else
         {
                   plist->tail->link=n;
                   plist->tail=n;
         }
                   plist->length++;
                   return 0;
}


//list3 = list1 + list2
int poly_add(listheader *plist1,listheader *plist2, listheader *plist3)
{
         double sum;
         listnode *a=plist1->head;
         listnode *b=plist2->head;


         while(a,b)
         {
                   if(a->expon == b->expon)
                   {
                            sum=a->coef+b->coef;
                            if(sum!=0)
                            {
                                      poly_make(plist3, sum, a->expon);
                                      a=a->link;
                                      b=b->link;
                            }
                   }
                   else if(a->expon > b->expon)
                   {
                            poly_make(plist3, a->coef, a->expon);
                            a=a->link;
                   }
                   else
                   {
                            poly_make(plist3, b->coef, b->expon);
b=b->link;
                  }
         }
                  return 0;
}


//์ถœ๋ ฅ ํ•˜๊ธฐ ์œ„ํ•œ ํ•จ์ˆ˜
int poly_print(listheader *plist)
{
         listnode *p = plist->head;
         for(1; p; p = p->link)
         {
                  printf("%.1fX^%d", p->coef, p->expon);
                  if(p->link!=NULL)
                  {
                               printf(" + ");
                  }
         }
                  printf("n");
                  return 0;
}


//๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ ํ•จ์ˆ˜
int poly_delete(listheader *plist)


{
         listnode *n=plist->head;
         listnode *del;
         while(n->link!=NULL)
         {
                  del=n;
                  n=del->link;
                  plist->head=n;
                  free(del);
         }
                  free(n);
                  return 0;
}


//๋ฉ”์ธ ํ•จ์ˆ˜
int main()
{
    listheader list1, list2, list3;   //๋ฆฌ์ŠคํŠธ ๋ณ€์ˆ˜ ์„ ์–ธ
    // ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์ด ์ดˆ๊ธฐํ™”
    reset(&list1);
    reset(&list2);
    reset(&list3);


    // P(X)๋ฅผ ์ƒ์„ฑ
    poly_make(&list1, -3.7, 3);
    poly_make(&list1, 2.5, 2);
    poly_make(&list1, 1, 1);


    // S(X)๋ฅผ ์ƒ์„ฑ
    poly_make(&list2, 8.2, 3);
    poly_make(&list2, -3.1, 2);
    poly_make(&list2, 10.2, 1);


    // T(X)๋ฅผ ์ƒ์„ฑ
    // T(X)=P(X)+S(X)
    poly_add(&list1, &list2, &list3);
    printf("P(X)์˜ ๋‹คํ•ญ์‹ : ");
    poly_print(&list1);
    printf("S(X)์˜ ๋‹คํ•ญ์‹ : ");
    poly_print(&list2);
    printf("T(X)์˜ ๋‹คํ•ญ์‹ : ");
    poly_print(&list3);


    // ํ• ๋‹นํ•œ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ํ•ด์ œ
    poly_delete(&list1);
    poly_delete(&list2);
    poly_delete(&list3);
    return 0;
}
โ€ข์‹คํ–‰ ํ™”๋ฉด




8)์‹œ๊ฐ„๋ณต์žก๋„/๊ณต๊ฐ„๋ณต์žก๋„

2012 Ds 03

  • 1.
    project #3 ๋‹คํ•ญ์‹ ์—ฐ์‚ฐ ์ž๋ฃŒ๊ตฌ์กฐ ์กฐ์žฅ: 20113311 ์žฅ๋™๊ทœ ์กฐ์›: 20113309 ์ดํƒœ๊ตฌ 20113318 ์ •์˜ˆ๋ฆฐ 20113315 ์ •๋ฏผ์ • 20083657 ์„œ์˜์ง„
  • 2.
    ์ˆœ์„œ โ€ข์กฐ์›๋ณ„ ์—…๋ฌด๋ถ„๋‹ด โ€ข์ผ์ • ๊ณ„ํš -ํšŒ์˜๋ก โ€ข๋ฌธ์ œ ํŒŒ์•… -Linked List๋ผ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋‹คํ•ญ์‹ ์—ฐ์‚ฐ โ€ข์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณ„ํš โ€ข์†Œ์Šค๊ตฌํ˜„ โ€ข๋ฌธ์ œ์  ํŒŒ์•… / ํ•ด๊ฒฐ๋ฒ• ํ† ์˜ โ€ข์ตœ์ข…์†Œ์Šค โ€ข์‹œ๊ฐ„ ๋ณต์žก๋„/๊ณต๊ฐ„ ๋ณต์žก๋„
  • 3.
    1) ์กฐ์›๋ณ„ ์—…๋ฌด๋ถ„๋‹ด ์ด๋ฆ„ ์—ญํ•  ์žฅ๋™๊ทœ ์กฐ์žฅ, ๋ณด๊ณ ์„œ ์ž‘์„ฑ, ์ž๋ฃŒ ์กฐ์‚ฌ ์ •์˜ˆ๋ฆฐ ์ฝ”๋”ฉ, ์ž๋ฃŒ ์กฐ์‚ฌ ์ •๋ฏผ์ • ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์ž๋ฃŒ์กฐ์‚ฌ ์„œ์˜์ง„ ๋ณด๊ณ ์„œ ์ž‘์„ฑ, ์ž๋ฃŒ ์กฐ์‚ฌ 2)์ผ์ •๊ณ„ํš ๋‚ ์งœ ๊ณ„ํš ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ, ๋‹คํ•ญ์‹ ์—ฐ์‚ฐ์— ๋Œ€ํ•ด ์กฐ์‚ฌ 04.12~04.17 ํ•ด์˜ค๊ธฐ, ๋ณด๊ณ ์„œ ์ž‘์„ฑ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ ์†Œ์Šค ๊ตฌํ˜„ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์ด 04.17~04.19 ๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ๋‹คํ•ญ์‹ ์—ฐ์‚ฐ์— ํ™œ์šฉํ•  ๊ฒƒ์ธ์ง€ ์ƒ๊ฐ ํ•ด์˜ค๊ธฐ, ๋ณด๊ณ ์„œ ์ž‘์„ฑ 04.19~04.24 ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์†Œ์Šค๋กœ ๊ตฌํ˜„, ์ตœ์ข… ๋ณด๊ณ ์„œ ์ž‘์„ฑ
  • 4.
    3)๋ฌธ์ œํŒŒ์•… ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ(Linked List) ๋ฐฐ์—ด๊ตฌ์กฐ์˜ ๋‹จ์ ์„ ๋ณด์•ˆํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ๋ฐฐ์—ด์€ ์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ ํ•ด๋‹น ์ฃผ์†Œ์— ๋ฐ”๋กœ ์ ‘ ๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์ด ์žˆ์ง€๋งŒ, ๋‹จ์ ์œผ๋กœ๋Š” ์‚ฝ์ž…, ์‚ญ์ œ ์—ฐ์‚ฐ์ด ๋ณต์žกํ•˜๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฐฐ์—ด์€ ์„ ์–ธ ์‹œ ํฌ๊ธฐ๋ฅผ ๋ฏธ๋ฆฌ ์ •ํ•ด์ค˜์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฐ์—ด ๊ณต๊ฐ„ 100๊ฐœ๋ฅผ ์„ ์–ธํ•ด ๋†“๊ณ  10๊ฐœ๋งŒ ์“ฐ๋Š” ๊ฒฝ์šฐ (๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„), 200๊ฐœ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ(๊ณต๊ฐ„ ๋ถ€์กฑ) ๋ผ๋ฉด ๋ฐฐ์—ด ์„ ์–ธ ๋ถ€๋ถ„์„ ๋‹ค์‹œ ์ˆ˜์ •ํ•ด์ค˜์•ผ ํ•˜ ๋Š” ๋ถˆํŽธํ•จ์ด ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋‹จ์ ์„ ๋ณด์•ˆํ•ด ํ•„์š”ํ•  ๋•Œ ๋งˆ๋‹ค ๊ณต๊ฐ„์„ ํ• ๋‹นํ•˜๊ณ  ๋˜ ๊ทธ๊ฒƒ๋“ค์„ ์—ฐ๊ฒฐํ•˜์—ฌ ๋งˆ์น˜ ๋ฐฐ์—ด์ฒ˜ ๋Ÿผ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ฒ•์ด ๋ฐ”๋กœ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ์ด๋‹ค. ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ์˜ ์žฅ์ ์œผ๋กœ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋ฏธ๋ฆฌ ๊ณต๊ฐ„์„ ํ• ๋‹นํ•  ํ•„์š” ์—†์ด ํ•„์š”ํ• ๋•Œ๋งˆ๋‹ค ๊ณต ๊ฐ„์„ ํ• ๋‹น ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ทธ๋Ÿฌ๊ธฐ ๋•Œ๋ฌธ์— ํ•„์š”ํ•œ ๋ณ€์ˆ˜์˜ ํฌ๊ธฐ๋ฅผ ๋ชจ๋ฅผ ๊ฒฝ ์šฐ์—๋Š” ๋ฐฐ์—ด๋ณด๋‹ค ํšจ์œจ์ ์ด๋‹ค. ํ•˜์ง€๋งŒ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ์—๋„ ๋‹จ์ ์€ ์žˆ๋‹ค. ๋‹ค์Œ ๋…ธ๋“œ์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ธฐ ์œ„ํ•ด 4byte(32๋น„ํŠธ ์šด์˜์ฒด์ œ ๊ธฐ์ค€)์˜ ๊ณต๊ฐ„์ด ๋‚ญ๋น„๋œ๋‹ค. ๋˜, ์ธ๋ฑ์Šค๋กœ ํ•ด๋‹น ์ฃผ์†Œ์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๋…ธ๋“œ์˜ ์ฒซ ๋ฒˆ์งธ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” Head๋ผ๋Š” ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด์„œ ์ˆœ์ฐจ์ ์œผ ๋กœ ์ ‘๊ทผํ•˜๋Š” ๋‹จ์ ์œผ๋กœ ์ธํ•ด ๊ฒ€์ƒ‰์†๋„๊ฐ€ ๋А๋ฆฌ๋‹ค๋Š” ๋‹จ์ ์ด์žˆ๋‹ค. (3๋ฒˆ์ง€ ์ฃผ์†Œ๊นŒ์ง€ ๊ฐ€๊ธฐ ์œ„ํ•ด์„œ๋Š” 1, 2๋ฒˆ ์ฃผ์†Œ์ง€๋ฅผ ๊ฑฐ์ณ์•ผ ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.)
  • 5.
    ๋‹ค์Œ์€ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋ฅผ๊ตฌํ˜„ํ•œ ์†Œ์Šค์ด๋‹ค. #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct tagNode{ char Name[20]; struct tagNode* NextNode; }NODE; ๊ตฌ์กฐ์ฒด๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š” ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ. Name์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์„ ๋ณ€์ˆ˜๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐ€ ๋ฉฐ, tagNode*๋Š” ๋‹ค์Œ ๋…ธ๋“œ์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜์ด๋‹ค. NODE* CreateNode(char name[]) { NODE* NewNode = (NODE*)malloc(sizeof(NODE)); strcpy(NewNode -> Name, name); NewNode -> NextNode = NULL; return NewNode; } NODE๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. ์ธ์ž๋กœ๋Š” ํ•ด๋‹น ๋…ธ๋“œ์— ๋“ค์–ด๊ฐˆ ๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ’์„ ๋ฐ›๊ณ  ์žˆ๋‹ค. NewNode๋ผ๋Š” ํฌ์ธํ„ฐ๋ฅผ ์ƒ์„ฑํ›„ ๊ทธ ํ•ด๋‹นํ•˜๋Š” ์ฃผ์†Œ์— mallocํ•จ์ˆ˜๋กœ ๊ณต๊ฐ„์„ ๋™์ ํ• ๋‹นํ•˜ ๊ณ  ์žˆ๋‹ค. void ConnectNode(NODE** Head, NODE* Node) { if(NULL == (*Head))
  • 6.
    { *Head = Node; } else { NODE* Current = *Head; while(Current -> nextNode != NULL) { Current = Current -> NextNode; } Current -> NextNode = Node; } } ์ธ์ž๋กœ๋Š” ์ฒซ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” Head์˜ ์ฃผ์†Œ๊ฐ’๊ณผ ์—ฐ๊ฒฐํ•œ ๋…ธ๋“œ๋ฅผ ์ธ์ž๋กœ ๋ฐ›๋Š”๋‹ค. ์—ฌ๊ธฐ์„œ ํ—ค ๋“œ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋…ธ๋“œ๊ฐ€ ์—†๋Š”(NULL)์ƒˆ๋กœ์šด ๋…ธ๋“œ๋ผ๋ฉด, main์— ์„ ์–ธํ•œ Head๊ฐ’ ์ž์ฒด๋ฅผ ๋ฐ”๊พธ๊ธฐ ์œ„ํ•ด ํฌ์ธํ„ฐ Head์˜ ์ฃผ์†Œ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฐ๊ณผ์ ์œผ๋ก  ์ด์ค‘ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ๋…ธ๋“œ์˜ ๋งจ ๋งˆ์ง€๋ง‰์— ์‚ฝ์ž…ํ•  ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. 1. Head๊ฐ€ NULL์ผ ๊ฒฝ์šฐ(ํ…… ๋นˆ ๋…ธ๋“œ) 2. Head๊ฐ€ NULL์ด ์•„๋‹ ๊ฒฝ์šฐ(ํ•˜๋‚˜ ์ด์ƒ์˜ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ) 1๋ฒˆ์˜ ๊ฒฝ์šฐ๋Š” Head์˜ ๋‹ค์Œ ๋…ธ๋“œ์— ์ƒˆ ๋…ธ๋“œ์˜ ์ฃผ์†Œ๊ฐ’์„ ๋„ฃ์œผ๋ฉด ๋˜์ง€๋งŒ, 2๋ฒˆ์˜ ๊ฒฝ์šฐ์—” ๋ ๋…ธ๋“œ๋ฅผ ์ฐพ์•„์„œ(NULL์ด ์žˆ๋Š”๊ณณ) ์—ฐ๊ฒฐ ํ•ด ์ค˜์•ผ ํ•œ๋‹ค. NODE* Current;๋ฅผ ์„ ์–ธํ•˜๋Š” ์ด์œ ๋Š” Head์˜ ๊ฐ’์„ ๋ฐ”๊พธ์ง€ ์•Š๊ณ  ์—ฐ๊ฒฐ๋œ ๋‹ค๋ฅธ ๋…ธ๋“œ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค. void PrintNode(NODE* Head, int index) { NODE* Current = Head;
  • 7.
    while(Current != NULL&& 0 < index) { index--; Current = Current -> NextNode; } printf(โ€œ%snโ€, Current -> Name); } ๋…ธ๋“œ์˜ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. ์ธ์ž๋กœ๋Š” Head์™€ ๋ช‡ ๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ ์ถœ๋ ฅํ• ๊ฑด์ง€ ์ •ํ•˜๋Š” ๋ณ€ ์ˆ˜์ด๋‹ค. while์˜ ๊ฒฝ์šฐ Current != NULL์€ NULL์ผ ๊ฒฝ์šฐ์—” ๋…ธ๋“œ์˜ ๋์ด๋ฏ€๋กœ ์ด ์ด์ƒ ์ ‘๊ทผ์„ ํ•˜์ง€์•Š๊ธฐ ์œ„ํ•ด ์“ด๋‹ค. int GetCountNode(NODE * Head) { NODE* Current = Head; int count = 0; while(Current != NULL) { count++; Current = Current -> NextNode; } return count; } PrintNode๋กœ ์ „์ฒด ์ถœ๋ ฅ์„ ํ•˜๊ธฐ๋ฅผ ์›ํ•  ๊ฒฝ์šฐ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์•Œ์•„๋‚ด๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. void InsertNode(NODE** Head, NODE* ConnectNode, int index) { if(0 == index)
  • 8.
    { ConnectNode -> NextNode = (*Head); *Head = ConnectNode; } else { NODE* Current = *Head; while(0 < (--index)) { Current = Current -> NextNode; } ConnectNode -> NextNode = Current -> NextNode; Current -> NextNode = ConnectNode; } } ๋…ธ๋“œ์™€ ๋…ธ๋“œ ์‚ฌ์ด์— ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. 1. 4๋ฒˆ์ง€ ์ฃผ์†Œ์˜ ๋‹ค์Œ ๋…ธ๋“œ ์ฃผ์†Œ๊ฐ’์„ 2๋ฒˆ์ง€ ๋…ธ๋“œ์˜ ์ฃผ์†Œ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝ 2. 2๋ฒˆ์ง€ ๋…ธ๋“œ์˜ ์ฃผ์†Œ๊ฐ’์„ 4๋ฒˆ์ง€ ๋…ธ๋“œ์˜ ์ฃผ์†Œ๋กœ ๋ณ€๊ฒฝ void DestroyNode(NODE** Head, int index) { NODE* Remove = *Head; while(Remove != NULL && 0<(--index))
  • 9.
    { Remove = Remove -> NextNode; } if(*Head == Remove) { *Head = Remove -> NextNode; } else { NODE* Current = *Head; while(Current != NULL && Current -> NextNode != Remove) { Current = Current -> NextNode; } if(Current != NULL) { Current -> NextNode = Remove -> NextNode; } } free(Remove); } ์‚ญ์ œ ์—ฐ์‚ฐ์€ ์‚ฝ์ž… ์—ฐ์‚ฐ๋ณด๋‹ค ํ›จ์”ฌ ๊ฐ„๋‹จํ•˜๋‹ค. ์‚ญ์ œํ•  ๋…ธ๋“œ์˜ ์•ž๋…ธ๋“œ(1๋ฒˆ๋…ธ๋“œ)์˜ ๋‹ค์Œ ์ฃผ์†Œ๋ฅผ ์‚ญ์ œํ•  ๋…ธ๋“œ์˜ ๋‹ค์Œ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก๋งŒ ํ•˜๋ฉด ๋œ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ํ• ๋‹นํ•˜๋Š” ๊ณต๊ฐ„์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ํ•ด์ œํ•ด ์ค˜์•ผํ•œ๋‹ค. ๊ทธ๋Ÿฌ๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ํ•จ ์ˆ˜ free๊ฐ€ ์žˆ๋‹ค. ์ธ์ž๋Š” ํ•ด์ œํ•  ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์†Œ๊ฐ’๋งŒ ๋„˜๊ธฐ๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ญ์ œํ•  ๋…ธ๋“œ์˜ ์ฃผ์†Œ ๋ฅผ ๋ณด๋‚ด์ฃผ๋ฉด ๋œ๋‹ค. ๊ตฌ์กฐ์ฒด ๋‹ค๋ฅธ ์ข…๋ฅ˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ ๊ฒฐํ•ฉ๋ฒ•์„ ๋งํ•œ๋‹ค. ๊ฐ๊ธฐ ๋‹ค๋ฅธ ํ˜•์ด๋‚˜ ๋‹ค๋ฅธ ์˜๋ฏธ์˜ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฐฐ์—ด๋“ค์„ ํ•œ ๋ฒˆ์— ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„ ํ•œ ์ž๋ฃŒ๊ตฌ ์กฐํ˜•์ด๋‹ค.
  • 10.
    struct ๊ตฌ์กฐ์ฒด ์ด๋ฆ„ { ์ž๋ฃŒํ˜• ์ž๋ฃŒ์ด๋ฆ„; ์ž๋ฃŒํ˜• ์ž๋ฃŒ์ด๋ฆ„; } ๊ณผ ๊ฐ™์ด ์ •์˜ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ •์˜๋ฅผ ํ•  ๋•Œ์—๋Š” ๋‹ค์Œ์˜ ์กฐ๊ฑด์ด ๋”ฐ๋ฅธ๋‹ค. โ‘ ๊ตฌ์กฐ์ฒด ์ •์˜์—์„œ ๋ฐ”๋กœ ์ดˆ๊ธฐํ™” ํ•  ์ˆ˜ ์—†๋‹ค. โ‘ก๊ตฌ์กฐ์ฒด ์„ ์–ธ์€ ๋ฌธ์ž์— ํ•ด๋‹น๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋๋งˆ์นœ ํ›„ ;์„ ๋ถ™์—ฌ ์ฃผ์–ด์•ผ ํ•œ๋‹ค. ๊ตฌ์กฐ์ฒด๋ฅผ ํ†ตํ•ด์„œ ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ…Œ์ดํƒ€ ๊ฐ’์„ ๋ฌถ์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์—ฌ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ตฌํ˜„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. 4)์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณ„ํš โ‘  ๋‹คํ•ญ์‹์˜ ํ‘œํ˜„ DATA LINK 1) ๊ฐ ๋…ธ๋“œ์˜ ๊ตฌ์กฐ์ฒด ๋ฐฐ์—ด์—์„œ DATA๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฐ์—ด๊ณผ ๋‹ค๋ฅธ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ๋Š” LINK ๊ฐ€ ์กด์žฌํ•œ๋‹ค. ์ด ๋•Œ DATA๋Š” ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๋ฐฐ์—ด์ด๊ณ , LINK๋Š” ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค ๋Š” ํฌ์ธํ„ฐ์˜ ์—ญํ• ์„ ํ•œ๋‹ค. ๋‹คํ•ญ์‹์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”, 2) ๋‹คํ•ญ์‹์˜ ๊ฐ ํ•ญ์„ ๊ณ„์ˆ˜๋ถ€๋ถ„ ์ง€์ˆ˜๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ„์–ด ์ƒ๊ฐํ•œ๋‹ค. DATA์˜ ๋ฐฐ์—ด๋„ ๊ณ„์ˆ˜์™€ ์ง€์ˆ˜๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ์ฒด๋ฅผ ์„ ์–ธํ•œ๋‹ค. ๊ณ„์ˆ˜๋ถ€๋ถ„ ์ง€์ˆ˜๋ถ€๋ถ„
  • 11.
    ์ฆ‰, DATA- DATA-์ง€ LINK ๊ณ„์ˆ˜๋ถ€๋ถ„ ์ˆ˜๋ถ€๋ถ„ ๊ณผ ๊ฐ™์ด ํ•œ ๋…ธ๋“œ๊ฐ€ ๋งŒ๋“ค์–ด์ง€๊ฒŒ ๋œ๋‹ค. 3) ์ด๋Ÿฌํ•œ ๋…ธ๋“œ๋ฅผ ๋‹คํ•ญ์‹์—์„œ ํ•ญ์˜ ๊ฐœ์ˆ˜๋งŒํผ LINK๋ฅผ ์ด์šฉํ•ด ๋‹ค์Œ ํ•ญ์„ ๊ฐ€๋ฆฌํ‚ค๊ณ  ๋‹ค์Œ ํ•ญ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ์‹์œผ๋กœ ํ•œ ๊ฐœ์˜ ๋‹คํ•ญ์‹์— ๋Œ€ํ•ด ํ•œ ๊ฐœ์˜ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค. โ‘ก ๋‹คํ•ญ์‹์˜ ๋ง์…ˆ๊ณผ ๋บ„์…ˆ 1) ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋กœ ์ž‘์„ฑ ๋œ ๋‹คํ•ญ์‹1๊ณผ ๋‹คํ•ญ์‹2์— ๋Œ€ํ•ด์„œ ์ง€์ˆ˜๋ถ€๋ถ„์ด ๊ฐ™์€ ๋…ธ๋“œ๋ผ๋ฆฌ ์—ฐ์‚ฐ์„ ํ•ด ์ค€ ๋‹ค. 2) ๋‹คํ•ญ์‹ 3์„ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋กœ ์ž‘์„ฑํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์ด ๋•Œ 1๊ณผ2๋กœ ์—ฐ์‚ฐ๋œ ๊ฐ’์„ 3์— ์ €์žฅํ•œ๋‹ค. 3) 1๊ณผ 2์— ๊ฐ™์€ ์ง€์ˆ˜๋ถ€๋ถ„์ด ์—†์–ด์„œ ์—ฐ์‚ฐ๋˜์ง€ ์•Š์€ ๋‚˜๋จธ์ง€ ํ•ญ๋“ค์€ ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌ๋˜์–ด์„œ 3์— ์ € ์žฅ๋œ๋‹ค. 4) ๋‹คํ•ญ์‹์˜ ์—ฐ์‚ฐ์„ ๋งˆ์ณ์„œ 3์— ์ €์žฅ๋œ ๊ฒฐ๊ณผ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค. โ‘ข ๋‹คํ•ญ์‹์˜ ๊ณฑ์…ˆ 1) ๋‹คํ•ญ์‹ 1์˜ ๋…ธ๋“œ์™€ ๋‹คํ•ญ์‹2์˜ ๋…ธ๋“œ์˜ ๊ณ„์ˆ˜๋ถ€๋ถ„์€ ๊ณฑ์…ˆ์—ฐ์‚ฐ์„ ํ•˜๊ณ  ์ง€์ˆ˜๋ถ€๋ถ„์€ ๋”ํ•˜๊ธฐ ์—ฐ ์‚ฐ ์„ ํ•ด์ค€๋‹ค. 2) ๋‹คํ•ญ์‹1์˜ ๋…ธ๋“œ์™€ ๋‹คํ•ญ์‹2์˜ ๋…ธ๋“œ๋Š” ์„œ๋กœ์˜ ๋…ธ๋“œ๊ฐ€ ๋ชจ๋‘ ์ˆœ์„œ์Œ์„ ํ•œ ๋ฒˆ ์”ฉ์€ ์ด๋ฃจ์–ด์•ผ ๋œ ๋‹ค. 3) ์ˆœ์„œ์Œ์„ ์ด๋ฃจ์–ด์„œ ์—ฐ์‚ฐ ๋œ ๊ฒฐ๊ณผ ๊ฐ’์€ ์ƒˆ๋กœ์šด ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ 3์— ์ €์žฅ๋œ๋‹ค. 4) ๊ฐ ๋…ธ๋“œ๋“ค์„ ๋ชจ๋‘ ๋”ํ•  ์ˆ˜ ์žˆ๋„๋ก, ์œ„์—์„œ ์ž‘์„ฑํ•˜์˜€๋˜ ADD์—ฐ์‚ฐ์„ ํ•œ ๋ฒˆ ๋” ํ•ด์ค€๋‹ค. 5) ์ •๋ฆฌ ๋˜์–ด 3์— ์ €์žฅ๋œ ๊ฒฐ๊ณผ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค. โ‘ฃ ๋‹คํ•ญ์‹์˜ ๋‚˜๋ˆ—์…ˆ 1) ๋‚˜๋ˆ„๋Š” ๋‹คํ•ญ์‹์˜ ์ตœ๊ณ ์ฐจํ•ญ์ด ๋‚˜๋ˆ ์ง€๋Š” ์ตœ๊ณ ์ฐจํ•ญ๊ณผ ๊ฐ™์•„์ง€๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋Š” X๊ฐ€ ๊ณ„์†ํ•ด์„œ ๋ชซ ์ด ๋  ์ˆ˜ ์žˆ๋‹ค. 2) ๊ณ„์ˆ˜์˜ ๊ณ„์‚ฐ์€, p(x)์˜ ๊ณ„์ˆ˜ = s(x)๊ณ„์ˆ˜*q(x) ๊ณ„์ˆ˜, q(x)๊ณ„์ˆ˜๋Š” p/s๊ณผ ๊ฐ™์ด ๋œ๋‹ค. 3) ๊ณ„์† ์ตœ๊ณ ์ฐจํ•ญ์— ๋งž์ถฐ์„œ X๊ฐ€ ๊ณฑํ•ด์ ธ์„œ ๋‚˜๋ˆ ์ง€๋Š” ๋‹คํ•ญ์‹์— ๊ทธ ๊ฒฐ๊ณผ ๊ฐ’์„ ๋บ„์…ˆ์„ ํ•˜๊ณ  ์žˆ ๋‹ค. ์ด ๋•Œ ๊ณฑํ•ด์ง€๋Š” ์ฐจ์ˆ˜๊ฐ€ 0์ด๊ฑฐ๋‚˜ ๋‚˜๋จธ์ง€๊ฐ€ 0์ด๋ฉด ์Šคํ†ฑํ•œ๋‹ค. ๋งŒ์•ฝ ๋บ„์…ˆ์„ ํ•˜๋‹ค๊ฐ€ ๋‹คํ•ญ์‹์ด ๋‚จ๊ฒŒ ๋˜๋ฉด ๊ทธ ๋‚จ์€ ๋‹คํ•ญ์‹์€ ๋‚˜๋จธ์ง€๊ฐ€ ๋œ๋‹ค.
  • 12.
    5)์†Œ์Šค ๊ตฌํ˜„ โ‘ ์†Œ์Šค ๋ถ„์„ #include<stdio.h> #include <stdlib.h> typedef struct polynomial { int degree; //์ฐจ์ˆ˜ double coef;//๊ณ„์ˆ˜ struct polynomial *link; }polynomial; typedef struct node { int l; polynomial *s; polynomial *f;//๋‹ค์Œ์„ ๊ฐ€๋ฆฌํ‚ฌ link }node; void st(node *point) //์ดˆ๊ธฐํ™” { point->l=0; point->s=point->f=NULL; } void insert_node(node *point,double coef,int degree) { //char *temp;
  • 13.
    polynomial *temp=(polynomial *)malloc(sizeof(node));//์—ฐ๊ธธ๋ฆฌ์ŠคํŠธ์˜๋ฉ”๋ชจ๋ฆฌํ• ๋‹น์„ temp์˜ ํฌ์ธํ„ฐ ์˜ฎ๊ธฐ๋Š” ์ •๋„์— ๋”ฐ๋ผ ํ• ๋‹นํ•ด์คŒ if(temp==NULL) { exit(1); } temp->coef=coef;//ํฌ์ธํ„ฐ๋กœ polynomialํƒ€์ž…์˜ ๊ตฌ์กฐ์ฒด๋ฅผ ๋ถˆ๋Ÿฌ์™€์„œ ๊ณ„์ˆ˜๋ฅผ ์‚ฝ์ž… temp->degree=degree;//์ฐจ์ˆ˜๋ฅผ ์‚ฝ์ž… if(point->f==NULL)//๋งŒ์•ฝ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์—์„œ ๋นˆ๊ฐ’์„ ๋งŒ๋‚˜๋ฉด ๋‹ค์‹œ temp๋กœ ํฌ์ธํ„ฐ๋ฅผ ๋Œ ๋ ค์คŒ { point->s=point->f=temp; } else//๊ทธ ์ด์™ธ์˜ ๊ฒฝ์šฐ point๋Š” { point->f->link=temp; point->f=temp; } point->l++;//ํฌ์ธํ„ฐ๋ฅผ ๊ธธ์ด๋งŒํผ ์ฆ๊ฐ€ํ•ด์ค˜์„œ ๋งˆ์ง€๋ง‰ ์ž๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ์„ค์ • } /*void polynomial_add(node point1, node point2, node point3) { polynomial *a=point1-> */ //๋‹คํ•ญ์‹ ์ถœ๋ ฅ void print(node *point) { polynomial *p=point->s;//pํฌ์ธํ„ฐ๋ฅผ point๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ์ฒ˜์Œ ์ž๋ฆฌ์ธs์˜ ์ฃผ์†Œ๊ฐ’์„ ๋ฐ›์•„์˜ด for(;p;p=p->link) { if(p->coef==0 || p->degree==0)//๋งŒ์•ฝ ๊ณ„์ˆ˜๋‚˜ ์ฐจ์ˆ˜๊ฐ€ ๋ชจ๋‘ 0์ด๋ฉด ์ถœ๋ ฅํ•˜ ์ง€ ์•Š์Œ { printf(""); } else if(p->degree==1)//์ฐจ์ˆ˜๊ฐ€ 1์ด๋ฉด ๊ณ„์ˆ˜๋งŒ ์ถœ๋ ฅ { printf("%d",p->coef);
  • 14.
    } else { printf("%dx^%d",p->coef,p->degree); //๊ณ„์ˆ˜๊ฐ€๋‚˜ ์ง€์ˆ˜๊ฐ€ 0์ด ์•„๋‹ˆ ๋ฉด ๊ณ„์ˆ˜x^์ง€์ˆ˜ ํ˜•ํƒœ๋กœ ํ‘œ์‹œ } if(p->link==NULL)//P๊ฐ€ ๊ฐ€๋ฆฌํ‚จ ๊ณณ์ด ๋นˆ๊ฐ’์ด๋ฉด ์•„๋ฌด๊ฒƒ๋„ ์ถœ๋ ฅํ•˜์ง€ ์•Š์Œ. { printf(""); } else//๊ฐ’์ด ์žˆ๋Š”๊ฒฝ์šฐ ๊ฐ€์šด๋ฐ์— +๋ฅผ ์ถœ๋ ฅ { printf(" + "); } } printf("n"); } void poly_add(node *plist1, node *plist2, node *plist3) { polynomial *a=plist1->s;//๋‹คํ•ญ์‹ 1์„ ํƒ์ƒ‰ํ•  ํฌ์ธํ„ฐ polynomial *b=plist2->s;//๋‹คํ•ญ์‹ 2๋ฅผ ํƒ์ƒ‰ํ•  ํฌ์ธํ„ฐ int sum;//๊ณ„์ˆ˜๋ฅผ ๋‹ด์„ ๋ณ€์ˆ˜ while(a&&b) { if(a->coef == b->coef)//์ง€์ˆ˜๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ { sum=a->coef+b->coef;//a,b ๋ฐ›์€ ๊ณ„์ˆ˜๊ณผ ์ฐจ์ˆ˜๋ฅผ coef๊ตฌ์กฐ์ฒด์— ์ € ์žฅ if(sum!=0) { insert_node(plist3,sum,a->degree);//์‚ฝ์ž…ํ•จ์ˆ˜๋ฅผ ๋ถˆ๋Ÿฌ์˜ด, ๋‹คํ•ญ์‹1์˜ ๊ณ„์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” polynomial๊ตฌ์กฐ์ฒด. ์•ž์—์„œ ๊ณ„์‚ฐ ํ•ด์ค€ sum์€ ๊ณ„์ˆ˜๋กœ ์ €์žฅ.a๋Š” ๋‹ค ํ•ญ์‹1์˜ ์ฐจ์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚ด. } b=b->link;//๋‘˜๋‹ค ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ link๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•จ. a=a->link; } else if(a->degree >b->degree) {
  • 15.
    insert_node(plist3,a->coef,a->degree);//์ฐจ์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์„๋•Œ, ๋‹คํ•ญ์‹3๋ฒˆ์งธ=1+2์˜ ๊ฒฐ๊ณผ๊ฐ’์„ ์ €์žฅ. a=a->link; } else { insert_node(plist3,b->coef,b->degree); b=b->link; } for(;a!=NULL;a=a->link) { insert_node(plist3,a->coef,a->degree); } for(;b!=NULL;b=b->link) { insert_node(plist3,b->coef,b->degree); } } } void main() { node list1, list2, list3; //๋‹คํ•ญ์‹ ์ž…๋ ฅ๋ฐ›์„ ๋ณ€์ˆ˜ ์„ ์–ธ double a; int b; //ํ•ญ์˜ ๊ณ„์ˆ˜์™€ ์ง€์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜ st(&list1);//st ํ•จ์ˆ˜ ํ˜ธ์ถœ๋กœ ๊ณต๋ฐฑ ๋ฆฌ์ŠคํŠธ st(&list2); st(&list3); //๋‹คํ•ญ์‹1์„ ์ž…๋ ฅ๋ฐ›๋Š” ๋ถ€๋ถ„ printf("๋‹คํ•ญ์‹1์˜ ํ•ญ(๊ณ„์ˆ˜,์ง€์ˆ˜)์„ ์ž…๋ ฅํ•˜์„ธ์š”. (0 0 ์ด๋ฉด ์ž…๋ ฅ์ข…๋ฃŒ)n"); while (1) { scanf("%f %d",&a,&b); if (a==0.0 && b==0) {
  • 16.
    break; } insert_node(&list1, a, b); } printf("๋‹คํ•ญ์‹1 : "); print(&list1); //๋‹คํ•ญ์‹1 ์ถœ๋ ฅ printf("n"); //๋‹คํ•ญ์‹2์„ ์ž…๋ ฅ๋ฐ›๋Š” ๋ถ€๋ถ„ printf("๋‹คํ•ญ์‹2์˜ ํ•ญ(๊ณ„์ˆ˜,์ง€์ˆ˜)์„ ์ž…๋ ฅํ•˜์„ธ์š”. (0 0 ์ด๋ฉด ์ž…๋ ฅ์ข…๋ฃŒ)n"); while (1) { scanf("%f %d",&a,&b); if (a==0.0 && b==0) { break; } insert_node(&list2, a, b); } printf("๋‹คํ•ญ์‹2 : "); print(&list2); //๋‹คํ•ญ์‹2 ์ถœ๋ ฅ printf("n"); // ๋‹คํ•ญ์‹3 = ๋‹คํ•ญ์‹1 + ๋‹คํ•ญ์‹2 poly_add(&list1, &list2, &list3); printf("๊ฒฐ๊ณผ : "); print(&list3); //๋‹คํ•ญ์‹3 ์ถœ๋ ฅ }
  • 17.
    7)์ตœ์ข…์†Œ์Šค #include <stdio.h> #include <stdlib.h> //์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ๋…ธ๋“œ์˜ ๊ตฌ์กฐ typedef struct listnode { double coef; int expon; struct listnode *link; } listnode; // ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ํ—ค๋” typedef struct listheader { int length; listnode *head; listnode *tail; } listheader; //์ดˆ๊ธฐํ™” ํ•จ์ˆ˜ int reset(listheader *plist) { plist->length=0; plist->head=plist->tail=NULL; return 0; } //plist๋Š” ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ํ—ค๋”๋ฅผ ๊ฐ€๋ฅดํ‚ค๋Š” ํฌ์ธํ„ฐ //expon๋Š” ์ง€์ˆ˜ coef๋Š” ๊ณ„์ˆ˜ int poly_make(listheader *plist,double coef,int expon) { listnode *n=(listnode*)malloc(sizeof(listnode)); n->coef=coef; n->expon=expon;
  • 18.
    n->link=NULL; if(plist->tail==NULL) { plist->head=plist->tail=n; } else { plist->tail->link=n; plist->tail=n; } plist->length++; return 0; } //list3 = list1 + list2 int poly_add(listheader *plist1,listheader *plist2, listheader *plist3) { double sum; listnode *a=plist1->head; listnode *b=plist2->head; while(a,b) { if(a->expon == b->expon) { sum=a->coef+b->coef; if(sum!=0) { poly_make(plist3, sum, a->expon); a=a->link; b=b->link; } } else if(a->expon > b->expon) { poly_make(plist3, a->coef, a->expon); a=a->link; } else { poly_make(plist3, b->coef, b->expon);
  • 19.
    b=b->link; } } return 0; } //์ถœ๋ ฅ ํ•˜๊ธฐ ์œ„ํ•œ ํ•จ์ˆ˜ int poly_print(listheader *plist) { listnode *p = plist->head; for(1; p; p = p->link) { printf("%.1fX^%d", p->coef, p->expon); if(p->link!=NULL) { printf(" + "); } } printf("n"); return 0; } //๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ ํ•จ์ˆ˜ int poly_delete(listheader *plist) { listnode *n=plist->head; listnode *del; while(n->link!=NULL) { del=n; n=del->link; plist->head=n; free(del); } free(n); return 0; } //๋ฉ”์ธ ํ•จ์ˆ˜ int main()
  • 20.
    { listheader list1, list2, list3; //๋ฆฌ์ŠคํŠธ ๋ณ€์ˆ˜ ์„ ์–ธ // ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์ด ์ดˆ๊ธฐํ™” reset(&list1); reset(&list2); reset(&list3); // P(X)๋ฅผ ์ƒ์„ฑ poly_make(&list1, -3.7, 3); poly_make(&list1, 2.5, 2); poly_make(&list1, 1, 1); // S(X)๋ฅผ ์ƒ์„ฑ poly_make(&list2, 8.2, 3); poly_make(&list2, -3.1, 2); poly_make(&list2, 10.2, 1); // T(X)๋ฅผ ์ƒ์„ฑ // T(X)=P(X)+S(X) poly_add(&list1, &list2, &list3); printf("P(X)์˜ ๋‹คํ•ญ์‹ : "); poly_print(&list1); printf("S(X)์˜ ๋‹คํ•ญ์‹ : "); poly_print(&list2); printf("T(X)์˜ ๋‹คํ•ญ์‹ : "); poly_print(&list3); // ํ• ๋‹นํ•œ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ํ•ด์ œ poly_delete(&list1); poly_delete(&list2); poly_delete(&list3); return 0; }
  • 21.