19-1-³ª.µ¿Àû ¹è¿­

¾Õ¿¡¼­ ÀÛ¼ºÇÑ ¿¹Á¦¿¡¼­ º¸¾Ò´Ù½ÃÇÇ ¹è¿­µµ ¸Þ¸ð¸®¸¦ Á¶ÀÛÇϸé Áß°£¿¡ »ðÀÔ, »èÁ¦°¡ °¡´ÉÇÏ¿© Å©±â°¡ °¡º¯ÀûÀÎ Á¤º¸¸¦ ´Ù·ê ¼ö ÀÖ´Ù. ±×·¯³ª »õ·Î¿î ¿ä¼Ò°¡ »ðÀԵȴ٠ÇÏ´õ¶óµµ ¹è¿­ÀÇ Å©±â°¡ ÀÚµ¿À¸·Î ´Ã¾î³ª´Â °ÍÀº ¾Æ´Ï¹Ç·Î ¹Ì¸® ¼±¾ðÇÑ Å©±â ÀÌ»óÀÇ ¿ä¼Ò¸¦ Ãß°¡ÇÒ ¼ö´Â ¾ø´Ù. ¾Õ ¿¹Á¦ÀÇ ar ¹è¿­Àº Å©±â 16À¸·Î ¼±¾ðµÇ¾úÀ¸¹Ç·Î ÃÖ´ë 15°³ÀÇ ¹®ÀÚ¸¸À» ÀúÀåÇÒ ¼ö ÀÖÀ» »ÓÀÌ´Ù. ¼³»ç ¹è¿­À» µ¿ÀûÀ¸·Î ÇÒ´çÇÑ´Ù ÇÏ´õ¶óµµ ÇÒ´çÇÒ ¶§ ÇÊ¿äÇÑ Å©±â¸¦ ÁöÁ¤ÇØ¾ß ÇϹǷΠ¹è¿­ÀÇ Å©±â´Â ¾ðÁ¦³ª À¯ÇÑÇÏ´Ù.

C¾ð¾î´Â Áß±Þ ¾ð¾î¶ó´Â Ư¼º»ó ¹è¿­ÀÇ ¹üÀ§¸¦ ÀüÇô Á¡°ËÇÏÁö ¾Ê±â ¶§¹®¿¡ ¹è¿­À» ³Ë³ËÇÑ Å©±â·Î ¼±¾ðÇÏ´Â °Í¸¸À¸·Î´Â ÃæºÐÇÏÁö ¾Ê´Ù. ±Ùº»ÀûÀÎ ¹®Á¦´Â ¹è¿­ÀÌ ÀÛÀº °ÍÀÌ ¾Æ´Ï¶ó ÇÊ¿äÇÑ Å©±â¸¦ ¹Ì¸® ¿¹ÃøÇÒ ¼ö ¾ø´Ù´Â µ¥ ÀÖÀ¸¹Ç·Î ½ÅÃ༺ ÀÖ´Â °ü¸®°¡ ÇÊ¿äÇÏ´Ù. Å©±â°¡ °¡º¯ÀûÀÎ Á¤º¸´Â ÀÌ·ÐÀûÀ¸·Î ¹«ÇÑ´ë±îÁö ´Ã¾î³¯ ¼ö ÀÖ¾î¾ß Çϸç ÀÌ·± Á¤º¸µéÀ» °ü¸®Çϱâ À§Çؼ­´Â ¹è¿­µµ Á¤º¸ÀÇ ¾ç¿¡ µû¶ó ½ÇÇàÁß¿¡ È®Àå °¡´ÉÇØ¾ß ÇÑ´Ù. ¹°·Ð ÄÄÇ»ÅÍÀÇ ¸Þ¸ð¸®°¡ À¯ÇÑÇϱ⠶§¹®¿¡ ½ÇÁúÀûÀÎ ¹«ÇÑ ¹è¿­Àº ºÒ°¡´ÉÇÏÁö¸¸ ¸Þ¸ð¸®°¡ Çã¶ôÇÏ´Â ÇѱîÁö(=½ÇÁúÀûÀÎ ¹«ÇÑ´ë)´Â Á¤º¸¸¦ ÀúÀåÇÒ ¼ö ÀÖ¾î¾ß ¾ÈÀüÇÏ´Ù.

½ÇÇàÁß¿¡ ÇÊ¿äÇѸ¸Å­ Å©±â¸¦ ´Ã·È´Ù ÁÙ¿´´Ù ÇÒ ¼ö ÀÖ´Â ¹è¿­À» µ¿Àû ¹è¿­À̶ó°í ÇÑ´Ù. C¾ð¾î Â÷¿ø¿¡¼­ µ¿Àû ¹è¿­¿¡ ´ëÇÑ Áö¿øÀº ÀüÇô ¾øÀ¸¹Ç·Î ÀÌ·± ¹è¿­Àº Á÷Á¢ ¸¸µé¾î ¾²´Â ¼ö¹Û¿¡ ¾ø´Ù. Âü°í·Î C++·Î ¸¸µç ¶óÀ̺귯¸®(MFC, STL µî)¿¡´Â µ¿Àû ¹è¿­ Ŭ·¡½º°¡ Á¦°øµÇ´Âµ¥ ÀÌ·± Ŭ·¡½ºÀÇ ³»ºÎµµ ¿©±â¼­ ¸¸µå´Â ¿¹Á¦¿Í °ÅÀÇ µ¿ÀÏÇÑ ¿ø¸®¸¦ »ç¿ëÇÑ´Ù. ±×·¡¼­ ÀÌ ÀåÀÇ ¿¹Á¦¸¦ ÀÌÇØÇϸé ÀÌÈÄ °í¼öÁØ ¶óÀ̺귯¸®ÀÇ ³»ºÎµµ ½±°Ô ÀÌÇØÇÒ ¼ö ÀÖ´Ù.

µ¿Àû ¹è¿­À» ¸¸µå´Â ±âº» ¿ø¸®´Â ÃÖÃÊ Àû´çÇÑ ±æÀÌ·Î Ãʱâ ÇÒ´çÇ쵂 »ðÀԵǴ Á¤º¸°¡ ÇÒ´çµÈ ¸Þ¸ð¸®¾çÀ» ÃÊ°úÇÒ ¶§ ¹è¿­ÀÇ Å©±â¸¦ ´õ ´Ã¸®´Â °ÍÀÌ´Ù. ÇÙ½É ±â¼úÀº ±âÁ¸ÀÇ ÇÒ´çµÈ ¸Þ¸ð¸®¸¦ ÀçÇÒ´çÇÏ´Â realloc ÇÔ¼ö¶ó°í ÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½ ¿¹Á¦¸¦ ÅëÇØ µ¿Àû ¹è¿­À» Å×½ºÆ®ÇØ º¸ÀÚ.

 

¿¹ Á¦ : DynArray

#include <Turboc.h>

 

#define ELETYPE int

ELETYPE *ar;

unsigned size;

unsigned num;

unsigned growby;

 

void InitArray(unsigned asize, unsigned agrowby)

{

     size=asize;

     growby=agrowby;

     num=0;

     ar=(ELETYPE *)malloc(size*sizeof(ELETYPE));

}

 

void Insert(int idx, ELETYPE value)

{

     unsigned need;

 

     need=num+1;

     if (need > size) {

          size=need+growby;

          ar=(ELETYPE *)realloc(ar,size*sizeof(ELETYPE));

     }

     memmove(ar+idx+1,ar+idx,(num-idx)*sizeof(ELETYPE));

     ar[idx]=value;

     num++;

}

 

void Delete(int idx)

{

     memmove(ar+idx,ar+idx+1,(num-idx-1)*sizeof(ELETYPE));

     num--;

}

 

void Append(ELETYPE value)

{

     Insert(num,value);

}

 

void UnInitArray()

{

     free(ar);

}

 

void DumpArray(char *sMark)

{

     unsigned i;

     printf("%16s => Å©±â=%02d,°³¼ö=%02d : ",sMark,size,num);

     for (i=0;i<num;i++) {

          printf("%2d ",ar[i]);

     }

     printf("\n");

}

 

void main()

{

     int i;

 

     InitArray(10,5);DumpArray("ÃÖÃÊ");

     for (i=1;i<=8;i++) Append(i);DumpArray("8°³ Ãß°¡");

     Insert(3,10);DumpArray("10 »ðÀÔ");

     Insert(3,11);DumpArray("11 »ðÀÔ");

     Insert(3,12);DumpArray("12 »ðÀÔ");

     Delete(7);DumpArray("¿ä¼Ò 7 »èÁ¦");

 

     UnInitArray();

}

 

È¿À²ÀûÀÎ ¹è¿­ °ü¸®¸¦ À§ÇØ ¾Õ ¿¹Á¦º¸´Ù ¸î °¡Áö ÇÔ¼ö°¡ ´õ Ãß°¡µÇ¾ú´Ù. DumpArray ÇÔ¼ö´Â °á°ú È®ÀÎÀ» À§ÇÑ µµ¿ì¹Ì ÇÔ¼öÀÏ »ÓÀÌ°í ³ª¸ÓÁö´Â µ¿Àû ¹è¿­À» °ü¸®ÇÏ´Â ÇÔ¼öÀÌ´Ù. ÀÏ´Ü µ¤¾î³õ°í ½ÇÇàÇØ º¸°í Àß µ¿ÀÛÇÏ´ÂÁö Á¡°ËÇØ º¸ÀÚ.

 

             ÃÖÃÊ => Å©±â=10,°³¼ö=00 :

        8°³ Ãß°¡ => Å©±â=10,°³¼ö=08 :  1  2  3  4  5  6  7  8

         10 »ðÀÔ => Å©±â=10,°³¼ö=09 :  1  2  3 10  4  5  6  7  8

         11 »ðÀÔ => Å©±â=10,°³¼ö=10 :  1  2  3 11 10  4  5  6  7  8

         12 »ðÀÔ => Å©±â=16,°³¼ö=11 :  1  2  3 12 11 10  4  5  6  7  8

     ¿ä¼Ò 7 »èÁ¦ => Å©±â=16,°³¼ö=10 :  1  2  3 12 11 10  4  6  7  8

 

ÃÖÃÊ ¹è¿­Àº Å©±â 10À¸·Î ÃʱâÈ­µÇ¾ú°í ·çÇÁ¸¦ µ¹¸ç 8°³ÀÇ °ªÀ» ÀúÀåÇß´Ù. ÀÌ »óÅ¿¡¼­ 10, 11, 12¸¦ Â÷·Ê·Î »ðÀÔÇߴµ¥ 10, 11±îÁö´Â ³²Àº µÎ ¿ä¼Ò¿¡ ÀúÀåÇÏ¸é µÇÁö¸¸ 12°¡ »ðÀ﵃ ¶§´Â Ãʱâ ÇÒ´çµÈ 10°³·Î ºÎÁ·ÇϹǷΠÀÌ ¶§ ÀçÇÒ´çµÇ¾î ¹è¿­Àº Å©±â 16À¸·Î ´Ã¾î³­´Ù. ´õ ¸¹Àº ¿ä¼Ò¸¦ »ðÀÔÇÏ¸é ¹è¿­Àº ÀÚµ¿À¸·Î ÇÊ¿ä·®À» ÆÇ´ÜÇÏ¿© ´Ã¾î³¯ °ÍÀÌ´Ù. ¾î°¼­ ÀÌ·¸°Ô µÇ´ÂÁö Â÷±Ù Â÷±Ù ºÐ¼®ÇØ º¸ÀÚ.

¹è¿­ÀÇ ½Çü

ÀÌ ¿¹Á¦¿¡¼­ ¹è¿­ÀÇ ½Çü´Â ar Æ÷ÀÎÅÍÀÌ´Ù. int ar[1000]; ÀÌ·± ½ÄÀ¸·Î ¹è¿­À» ¼±¾ðÇϸé Å©±â¿Í À§Ä¡°¡ ÄÄÆÄÀÏÇÒ ¶§ È®Á¤µÇ¾î ¹ö¸®¹Ç·Î °¡º¯ÀûÀÎ Å©±â¸¦ ´Ù·ê ¼ö ¾ø´Ù. ±×·¡¼­ ÀúÀåÇÏ°íÀÚ Çϴ ŸÀÔÀÇ Æ÷ÀÎÅ͸¦ ¼±¾ðÇÏ°í ÀÌ Æ÷ÀÎÅ͸¦ µ¿ÀûÀ¸·Î ÇÒ´çÇØ¾ß ÇÑ´Ù. ELETYPE ¸ÅÅ©·Î´Â ¹è¿­ ¿ä¼ÒÀÇ Å¸ÀÔÀε¥ ÇÊ¿ä¿¡ µû¶ó º¯°æÇÒ ¼ö ÀÖµµ·Ï ¸ÅÅ©·Î »ó¼ö·Î Á¤ÀÇÇß´Ù. ÀÌ ¿¹Á¦´Â °¡Àå ´Ü¼øÇÑ Å¸ÀÔÀÎ Á¤¼ö(int)¸¦ ¹è¿­ ¿ä¼Ò·Î »ç¿ëÇßÁö¸¸ ÀÓÀÇÀÇ ¸ðµç ŸÀÔ¿¡ ´ëÇؼ­µµ µ¿Àû ¹è¿­À» ¸¸µé ¼ö ÀÖ´Ù.

¹è¿­ °ü¸® º¯¼ö

µ¿Àû ¹è¿­Àº ÄÄÆÄÀÏÇÒ ¶§ ±× Å©±â°¡ ¹Ì¸® Á¤ÇØÁöÁö ¾ÊÀ¸¸ç ½ÇÇàÁß¿¡ ¾ðÁ¦µçÁö Å©±â¸¦ º¯°æÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù. ±×·¡¼­ ÇöÀç ¾ó¸¶¸¸Å­ ÇÒ´çµÇ¾î ÀÖ´ÂÁö ÇÒ´ç Å©±â¸¦ º°µµÀÇ º¯¼ö¿¡ ÀúÀåÇØ µÎ¾î¾ß Çϴµ¥ size º¯¼ö°¡ ¹è¿­ÀÇ ÇÒ´ç Å©±â¸¦ ±â¾ïÇÑ´Ù. ¶ÇÇÑ ¹è¿­¿¡ ½ÇÁ¦ ÀúÀåµÈ ¿ä¼ÒÀÇ °³¼öµµ Ç×»ó À¯ÁöÇØ¾ß Çϴµ¥ num º¯¼ö°¡ ÀÌ Á¤º¸¸¦ ÀúÀåÇÑ´Ù. ¹è¿­ °ü¸® ÇÔ¼öµéÀº ¹è¿­¿¡ ¿ä¼Ò¸¦ »ðÀÔÇÒ ¶§ ÀÌ µÎ º¯¼ö°ªÀ» ºñ±³ÇØ º¸°í ÀçÇÒ´çÇÒ ½ÃÁ¡À» ÆľÇÇÒ °ÍÀÌ´Ù. growby º¯¼ö´Â ÀçÇÒ´çÇÒ ¶§ÀÇ ¿©À¯ºÐÀ» ÁöÁ¤Çϴµ¥ ÀÌ º¯¼öÀÇ ¿ªÇÒ¿¡ ´ëÇؼ­´Â Àá½Ã ÈÄ µû·Î ¾Ë¾Æº¸µµ·Ï ÇÏÀÚ.

¹è¿­ ÃʱâÈ­

¹è¿­ÀÇ ½ÇüÀÎ arÀÌ Æ÷ÀÎÅÍ º¯¼öÀ̹ǷΠar¿¡ ¸Þ¸ð¸®°¡ ÇÒ´çµÇ±â Àü±îÁö ¹è¿­Àº ½ÇÁ¦·Î Á¸ÀçÇÏÁö ¾Ê´Â´Ù. Æ÷ÀÎÅÍ°¡ ½ÇÁúÀûÀÎ ¹è¿­ÀÌ µÇ±â À§Çؼ­´Â ÀÏ´Ü ¸Þ¸ð¸®¸¦ Ãʱâ ÇÒ´çÇØ¾ß ÇÑ´Ù. InitArray ÇÔ¼ö´Â ¹è¿­ °ü¸® º¯¼öÀÇ ÃʱⰪÀ» ¼³Á¤ÇÏ°í ÀÌ ÃʱⰪ´ë·Î ¸Þ¸ð¸®¸¦ ÇÒ´çÇÏ¿© ar Æ÷ÀÎÅÍ¿¡ ±× ¹øÁö¸¦ ´ëÀÔÇÑ´Ù. ÀÌ ÇÔ¼ö´Â ¹è¿­À» »ç¿ëÇÏ´Â ÁÖü°¡ È£ÃâÇϴµ¥ ÀÌ ¿¹Á¦ÀÇ °æ¿ì main ÇÔ¼öÀÇ ¼±µÎ¿¡¼­ È£ÃâÇÏ°í ÀÖ´Ù.

main¿¡¼­ InitArray(10,5) ·Î È£ÃâÇßÀ¸¹Ç·Î ¹è¿­ÀÇ Ãʱâ ÇÒ´çÄ¡´Â 10ÀÌ µÇ°í ¿©À¯ºÐÀº 5·Î ¼³Á¤µÈ´Ù. InitArray ÇÔ¼ö´Â Àü´Þ¹ÞÀº Àμö·Î °ü·Ã º¯¼ö¸¦ ÃʱâÈ­ÇÏ°í ar¿¡ size °³¼ö¸¸Å­ÀÇ ¿ä¼Ò¸¦ ÀúÀåÇÒ ¼ö ÀÖ´Â ¸Þ¸ð¸®¸¦ ÇÒ´çÇÑ´Ù. ¹è¿­ÀÌ ÃʱâÈ­µÇ´Â »óȲÀ̹ǷΠ¿ä¼ÒÀÇ °³¼ö numÀº 0À¸·Î ÃʱâÈ­µÉ °ÍÀÌ´Ù. size¿Í numÀº ¸ðµÎ ¹ÙÀÌÆ® ´ÜÀ§°¡ ¾Æ´Ï¶ó ¹è¿­ ¿ä¼ÒÀÇ °³¼ö ´ÜÀ§À̹ǷΠÇÊ¿äÇÑ ¸Þ¸ð¸®¾çÀ» ±¸Çϱâ À§Çؼ­´Â sizeof(ELETYPE)À» °öÇØ¾ß ÇÑ´Ù.

ÃʱâÈ­°¡ ¿Ï·áµÇ¸é Á¤¼öÇü º¯¼ö 10°³¸¦ ÀúÀåÇÒ ¼ö ÀÖ´Â ¸Þ¸ð¸®°¡ ÇÒ´çµÇ°í ÀÌ ¸Þ¸ð¸®ÀÇ ¼±µÎ¸¦ ar Æ÷ÀÎÅÍ°¡ °¡¸®Å°°Ô µÈ´Ù. ±×¸®°í size´Â ÇÒ´ç Å©±â 10À» ±â¾ïÇÏ¸ç ¾ÆÁ÷ ¹è¿­¿¡ °ªÀÌ ÀúÀåµÇÁö ¾Ê¾ÒÀ¸¹Ç·Î numÀº 0ÀÌ´Ù. ÀÌ »óÅ¿¡¼­ arÀº Å©±â 10ÀÇ Á¤¼öÇü ¹è¿­°ú °°¾ÆÁö¸ç 10°³ÀÇ Á¤¼ö°ªÀ» ±â¾ïÇÒ ¼ö ÀÖ´Ù. main¿¡¼­´Â 1~8±îÁö 8°³ÀÇ Á¤¼ö¸¦ Ãß°¡ÇßÀ¸¸ç ÀÌ ¶§ÀÇ ar ¹è¿­À» ±×¸²À¸·Î ±×·Á º¸¸é ´ÙÀ½°ú °°´Ù.

ÃÑ 10°³ÀÇ ¿ä¼Ò¸¦ ±â¾ïÇÒ ¼ö ÀÖÀ¸¸ç 8°³¸¦ ÀúÀåÇßÀ¸¹Ç·Î ¾ÆÁ÷ µÎ °³ÀÇ ¿©À¯°¡ ³²¾Æ ÀÖ´Â »óȲÀÌ´Ù. ¹°·Ð ÀÌ ³²Àº Ä­¿¡´Â ¾²·¹±â°ªÀÌ µé¾î ÀÖÀ» °ÍÀÌ´Ù. ¹è¿­À» ´Ù »ç¿ëÇÑ ÈÄ¿¡´Â UnInitArray ÇÔ¼ö¸¦ È£ÃâÇÏ¿© »ç¿ëÇÏ´ø ¸Þ¸ð¸®¸¦ ÇØÁ¦Çϴµ¥ free ÇÔ¼ö·Î ar¿¡ µ¿ÀûÇÒ´çÇÑ ¸Þ¸ð¸®¸¸ ȸ¼öÇÏ¸é µÈ´Ù. main ÇÔ¼öÀÇ ³¡¿¡¼­ UnInitArray¸¦ È£ÃâÇÏ°í ÀÖ´Ù.

ÀçÇÒ´ç

1~8±îÁö Á¤¼ö¸¦ Ãß°¡ÇÑ ÈÄ 10, 11, 12¸¦ ¿ä¼Ò 3ÀÇ À§Ä¡¿¡ ¼ø¼­´ë·Î »ðÀÔÇϴµ¥ 10, 11±îÁö »ðÀԵǸé arÀº ²Ë Âù »óÅ°¡ µÈ´Ù. ÀÌ »óÅ¿¡¼­ 12¸¦ ´õ »ðÀÔÇÏ·Á¸é ±â¾ï °ø°£ÀÌ ºÎÁ·ÇϹǷΠ¹è¿­ÀÇ Å©±â¸¦ ´Ã·Á ÀçÇÒ´çÇØ¾ß ÇÑ´Ù. ¹è¿­ÀÇ Å©±â°¡ ´Ã¾î³ª´Â °æ¿ì´Â Insert ÇÔ¼ö¿¡¼­ ¿ä¼Ò¸¦ Ãß°¡ÇÒ ¶§ »ÓÀ̹ǷΠÀÌ ÇÔ¼öÀÇ ¼±µÎ¿¡¼­¸¸ ¹è¿­ Å©±â¸¦ Á¡°ËÇÏ¸é µÈ´Ù.

ÀçÇÒ´çÇÒ Á¶°ÇÀº ¾ÆÁÖ »ó½ÄÀûÀÌ´Ù. Insert°¡ È£ÃâµÇ¾úÀ» ¶§ ÇÊ¿äÇÑ ¹è¿­ Å©±â´Â ÇöÀç ¿ä¼Ò °³¼öÀÎ num¿¡ Ãß°¡µÉ Çϳª¸¦ ´õÇØ num+1À̸ç ÀÌ °ªÀ» need º¯¼ö¿¡ ´ëÀÔÇß´Ù. ¿øÇÑ´Ù¸é ¿©·¯ °³¸¦ ÇѲ¨¹ø¿¡ »ðÀÔÇÏ´Â °Íµµ ¹°·Ð °¡´ÉÇÏ´Ù. need°¡ ÇÒ´çµÈ Å©±âÀÎ sizeº¸´Ù ´õ Ŭ ¶§, ±¸Ã¼ÀûÀ¸·Î ¿¹¸¦ µéÀÚ¸é 10ÀÇ Å©±â·Î ÇÒ´çµÈ »óÅ¿¡¼­ 11°³ÀÇ ¿ä¼Ò¸¦ ÀúÀåÇÏ°íÀÚ ÇÒ ¶§, ÀÌ ¶§°¡ ¹Ù·Î ¹è¿­ÀÇ Å©±â¸¦ ´Ã¸± ¶§ÀÌ´Ù.

ÇöÀç Å©±â°¡ ºÎÁ·ÇÏ´Ù´Â ÆÇ´ÜÀÌ ³»·ÁÁ³À¸¹Ç·Î »õ·Î¿î Å©±â¸¦ °è»êÇ쵂 ÀÏ´Ü need ÀÌ»ó µÇ¾î¾ß ÇÏ°í ¿©±â¿¡ ¾à°£ÀÇ ¿©À¯ºÐ growby¸¦ ´õÇß´Ù. size´Â 16ÀÌ µÇ¸ç ÀÌ Å©±â´ë·Î realloc ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ar ¹è¿­À» ÀçÇÒ´çÇÑ´Ù. realloc ÇÔ¼ö´Â ar ¹è¿­À» »õ·Î¿î Å©±â·Î ÀçÇÒ´çÇϸç ÇÊ¿äÇÒ °æ¿ì ¹øÁö¸¦ ¿Å°Ü ±âÁ¸ ¸Þ¸ð¸®ÀÇ °ªÀ» º¹»çÇØ ÁÖ±â±îÁö ÇϹǷΠÀÌ ÇÔ¼ö¸¸ È£ÃâÇϸé arÀº ³»¿ëÀ» À¯ÁöÇÑ Ã¤·Î ÁöÁ¤ÇÑ Å©±â¸¸Å­ ´Ã¾î³ª°Ô µÈ´Ù. ¸¸¾à need°¡ sizeº¸´Ù ´õ ÀÛ´Ù¸é, Áï ¾ÆÁ÷ ¿©À¯ºÐÀÌ ³²¾Æ ÀÖ´Ù¸é ÀçÇÒ´ç¾øÀÌ ±âÁ¸ÀÇ ¹æ¹ý´ë·Î »ðÀÔÇÑ´Ù.

¿©À¯ºÐ

¹è¿­À» ÀçÇÒ´çÇÒ ¶§´Â ¾î´À Á¤µµÀÇ ¿©À¯ºÐÀ» ÁÖ´Â °ÍÀÌ È¿À²»ó À¯¸®ÇÏ´Ù. »ðÀÔÀº º¸Åë ¿¬¼ÓÀûÀ¸·Î ÀϾ¹Ç·Î ¸Þ¸ð¸®°¡ ºÎÁ·Çؼ­ Å©±â¸¦ ´Ã·Á¾ß ÇÑ´Ù¸é Á¶¸¸°£ ¸Þ¸ð¸®°¡ ´Ù½Ã ºÎÁ·ÇØÁú È®·üÀÌ ¾ÆÁÖ ³ô´Ù. need¸¸Å­ ÇÊ¿äÇØÁ³À» ¶§ need¸¸Å­¸¸ ÀçÇÒ´çÇϸé ÀÏ´ÜÀº »ðÀÔ °¡´ÉÇÏÁö¸¸ Àá½Ã ÈÄ ´Ù½Ã ÀçÇÒ´çÇØ¾ß ÇÒ °ÍÀÌ´Ù. realloc ÇÔ¼ö´Â Æí¸®Çϱâ´Â ÇÏÁö¸¸ ¹øÁö°¡ ¹Ù²ð °æ¿ì ±²ÀåÈ÷ ´À¸®¸ç ƯÈ÷ ¹è¿­ÀÇ Å©±â°¡ Ŭ¼ö·Ï ¼Óµµ»óÀÇ ºÒÀÌÀÍÀÌ ½ÉÇϱ⠶§¹®¿¡ °¡±ÞÀûÀ̸é È£Ãâ ȸ¼ö¸¦ ÁÙ¿©¾ß ÇÑ´Ù. ±×·¡¼­ ÀÌ¿Õ ÀçÇÒ´çÀ» ÇÒ ¶§ ¿©À¯ºÐÀ» ÁÖ¾î ´ÙÀ½ ¹ø ºÎÁ·ÇÑ »óȲÀ» ÃÖ´ëÇÑ ´ÊÃß´Â °ÍÀÌ ÁÁ´Ù.

µ¿Àû ¹è¿­Àº ÀÌ·± ¸ñÀûÀ¸·Î growby¶ó´Â º¯¼ö¸¦ Á¤ÀÇÇÏ°í ÀçÇÒ´çÇÒ ¶§ need¿¡ ÀÌ °ªÀ» ´õÇÑ Å©±â·Î ¹è¿­À» ´Ã¸°´Ù. ¿©À¯ºÐÀº ¾îµð±îÁö³ª ¿©À¯¸¦ µÎ±â À§ÇÑ °ªÀ̹ǷΠÀÌ °ªÀÌ 0ÀÌ´õ¶óµµ µ¿Àû ¹è¿­Àº Á¦´ë·Î µ¿ÀÛÇÏ°ÚÁö¸¸ ¼º´ÉÀÌ ¶³¾îÁø´Ù. ±×·¸´Ù°í Çؼ­ ¿©À¯ºÐÀ» Áö³ªÄ¡°Ô Å©°Ô ÁÖ¸é ³²´Â ¸Þ¸ð¸®°¡ ¸¹¾ÆÁ® °ø°£ È¿À²ÀÌ ¶³¾îÁø´Ù. ÇÊ¿ä¿¡ µû¶ó Àû´çÇÑ ¾çÀ» ÁÖ´Â °ÍÀÌ ÁÁÀ¸¸ç ±×·¡¼­ InitArray ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§ °³¹ßÀÚ°¡ °áÁ¤ÇÒ ¼ö ÀÖµµ·Ï ÇØ µÎ¾ú´Ù.

¿¹Á¦¿¡¼­´Â ÀçÇÒ´çÀÌ »¡¸® ÀϾµµ·Ï Çϱâ À§ÇØ ÃʱⰪ, ¿©À¯ºÐÀ» 10, 5·Î ÁÖ¾úÁö¸¸ ½ÇÁ¦ ÇÁ·ÎÁ§Æ®¿¡¼­´Â ¹è¿­ÀÇ »ðÀÔ, »èÁ¦ ºóµµ¿¡ µû¶ó ÃʱⰪ°ú ¿©À¯ºÐÀ» Àû´çÇÑ Å©±â·Î ¼±ÅÃÇØ¾ß ÇÑ´Ù. 100, 50 Á¤µµ¸é ´ëü·Î ¾µ¸¸ÇÑ ¼º´ÉÀ» º¸ÀÏ °ÍÀ̸ç ÀÚ·áÀÇ ¾çÀÌ ¸¹°í »ðÀÔµµ ºó¹øÇÏ´Ù¸é 1000, 500 Á¤µµ·Î ÃæºÐÇÑ °ªÀ» ÁÖ¾î ¼º´ÉÀÇ Çâ»óÀ» ²ÒÇÒ ¼ö ÀÖ´Ù. Áï InitArrayÀÇ ÀμöµéÀº ¹è¿­ÀÇ ¼º´É ÆĶó¹ÌÅÍÀÌ´Ù.

±× ¿Ü ÇÔ¼öÀÇ º¯È­

±× ¿Ü ³ª¸ÓÁö ÇÔ¼öµéÀº ¾î¶² º¯È­°¡ »ý°å´ÂÁö µ¿Àû ÇÒ´çÀ» ÇÏÁö ¾Ê´Â ¾ÕÀÇ ¿¹Á¦¿Í ºñ±³ÇØ º¸ÀÚ. Insert ÇÔ¼ö¿¡´Â ¹è¿­ Å©±â Á¡°Ë°ú ÀçÇÒ´ç¹®ÀÌ Ãß°¡µÇ¾ú°í ¹è¿­ ¿ä¼Ò¸¦ »ðÀÔÇÏ´Â ÄÚµå´Â ¾ÕÀÇ ¿¹Á¦¿Í °ÅÀÇ ºñ½ÁÇÏ´Ù. ´Ù¸¸ memmove ÇÔ¼öÀÇ À̵¿ ±æÀÌ°¡ Á¶±Ý ´Þ¶óÁ³´Ù. ¹è¿­¿¡ ±â¾ïµÇ´Â °ªÀÌ ¹®ÀÚ¿­ÀÌ ¾Æ´Ï¹Ç·Î ³Î Á¾·á ¹®ÀÚ¸¦ À̵¿ ±æÀÌ¿¡ Æ÷ÇÔ½Ãų ÇÊ¿ä°¡ ¾øÀ¸¸ç ¹®ÀÚÇü¿¡ ´ëÇÑ ¹è¿­ÀÌ ¾Æ´Ñ ÀÓÀÇ Å¸ÀÔ¿¡ ´ëÇÑ ¹è¿­À̹ǷΠsizeof(ELETYPE)À» °öÇØ¾ß ÇÑ´Ù.

¹®ÀÚ¿­À̳ª Æ÷ÀÎÅÍ´Â ³¡ Ç¥½Ä¿¡ »ç¿ëÇÒ ¼ö Àִ ƯÀÌ°ªÀÌ ÀÖÁö¸¸ Á¤¼öÇüÀ̳ª ½Ç¼öÇü¿¡´Â ÀÌ·± ¸ñÀûÀ¸·Î »ç¿ëÇÒ ¼ö Àִ ƯÀÌ°ªÀÌ µû·Î ¾ø´Ù. ±×·¡¼­ ¹è¿­¿¡ ÀúÀåµÈ ¿ä¼ÒÀÇ ½ÇÁ¦ °³¼ö¸¦ ÀúÀåÇÏ´Â numÀ̶ó´Â º°µµÀÇ º¯¼ö°¡ ÇÊ¿äÇÑ °ÍÀÌ´Ù.

Delete ÇÔ¼öµµ ¸¶Âù°¡Áö·Î À̵¿ ±æÀ̸¦ °è»êÇÏ´Â ½Ä¸¸ ´Þ¶óÁ³À¸¸ç ³í¸®´Â µ¿ÀÏÇÏ´Ù. ¸¸¾à ¹è¿­ ¿ä¼Ò°¡ ´Ù·® »èÁ¦µÇ¾î Áö³ªÄ¡°Ô ³²´Â ¸Þ¸ð¸®°¡ ¸¹´Ù¸é ¹è¿­ Å©±â¸¦ ÁÙÀÌ´Â °Íµµ °¡´ÉÇÏ´Ù. ÀÌ °æ¿ì Delete¿¡ ÇöÀç ÇÒ´ç Å©±â¿Í ¿ä¼Ò °³¼ö¸¦ ºñ±³ÇÏ¿© ÀÏÁ¤ ±âÁØ ÀÌÇÏÀÏ ¶§, ¿¹¸¦ µé¾î numÀÌ sizeÀÇ Àý¹Ýµµ ¾ÈµÉ ¶§ size¸¦ ÁÙÀÌ´Â Äڵ带 ÀÛ¼ºÇÏ¸é µÈ´Ù. ±×·¯³ª ´Ã¾î³­ ¹è¿­À» ±»ÀÌ ÁÙ¿©¾ß ÇÏ´Â °æ¿ì´Â ±ØÈ÷ µå¹°±â ¶§¹®¿¡ ÀÌ ÄÚµå´Â ÀÛ¼ºÇÏÁö ¾Ê¾ÒÀ¸¸ç Çö½ÇÀûÀ¸·Î º°·Î È¿¿ë¼ºÀÌ ¾ø´Ù. Append ÇÔ¼ö´Â ¾ÕÀÇ ¿¹Á¦¿Í ¿ÏÀüÈ÷ µ¿ÀÏÇÏ´Ù.

 

ÀÌ»óÀ¸·Î ½ÇÇàÁß¿¡ Å©±â¸¦ º¯°æÇÒ ¼ö ÀÖ´Â µ¿Àû ¹è¿­À» ¸¸µé¾î º¸°í °£´ÜÇÏ°Ô ºÐ¼®ÇØ º¸¾Ò´Ù. ÀÌ ¿¹Á¦´Â ¿Ïº®ÇÏ°Ô µ¿ÀÛÇÏÁö¸¸ ¿¹Á¦·Î¼­ÀÇ °£°á¼ºÀ» Áß¿ä½ÃÇÏ´Ù º¸´Ï ¸î °¡Áö ¸¶À½¿¡ µéÁö ¾Ê´Â ¸éÀÌ ÀÖ´Ù. ¿ì¼± ¹è¿­ °ü¸®¸¦ À§ÇØ Àü¿ªº¯¼ö°¡ ÇÊ¿äÇÏ°í ÀÌ º¯¼öµéÀ» °ü¸®ÇÏ´Â º°µµÀÇ ÇÔ¼ö±îÁö ÀÖ¾î ÀçÈ°¿ëÇϱⰡ ¹ø°Å·Î¿î ÆíÀÌ´Ù. ±×·¡¼­ ¿©·¯ °³ÀÇ µ¿Àû ¹è¿­À» µ¿½Ã¿¡ »ç¿ëÇÒ ¼ö ¾ø´Ù. InitArrayµµ ¼öµ¿À¸·Î È£ÃâÇØ¾ß ÇÏ°í ´Ù »ç¿ëÇÑ ÈÄ UnInitArray¸¦ È£ÃâÇÏ¿© ¹è¿­À» ÇØÁ¦ÇÏ´Â °Íµµ Àؾ´Â ¾ÈµÈ´Ù.

Æí¸®ÇÏ°í ¾ÈÀüÇÑ »ç¿ëÀ» À§ÇØ Á» ´õ Çü½Ä¼ºÀ» °®Ãâ ÇÊ¿ä°¡ Àִµ¥ ÀÌ·² ¶§ »ç¿ëÇÏ´Â °ÍÀÌ ¹Ù·Î C++ÀÇ Å¬·¡½ºÀÌ´Ù. ¹è¿­ °ü¸® º¯¼ö¿Í °ü·Ã ÇÔ¼öµéÀ» Ŭ·¡½º·Î ¹­¾î ³õÀ¸¸é °´Ã¼¸¦ ¼±¾ðÇÏ´Â °Í¸¸À¸·Î µ¿Àû ¹è¿­À» ½±°Ô »ý¼ºÇÏ°í »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç ÀÚ½ÅÀÌ ÇÊ¿ä¾ø¾îÁ³À» ¶§ ¸Þ¸ð¸®¸¦ ÀÚµ¿À¸·Î Á¤¸®Çϵµ·Ï ÇÒ ¼ö ÀÖ´Ù. CArray ar; ar.Insert(), ar.Delete() ½ÄÀ¸·Î Æí¸®ÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¶ÇÇÑ ¹è¿­ÀÇ ´ë»ó ŸÀÔÀ» ELETYPEÀ̶ó´Â ¸ÅÅ©·Î·Î ¹Ù²Ü ¼ö´Â ÀÖÁö¸¸ µ¿½Ã¿¡ ¿©·¯ ŸÀÔ¿¡ ´ëÇÑ µ¿Àû ¹è¿­À» ¸¸µé ¼ö´Â ¾ø´Ù. ÀÌ ¹®Á¦´Â C++ÀÇ ÅÛÇø´À¸·Î ÇØ°áÇÒ ¼ö ÀÖ´Ù.

3ºÎ¿¡¼­´Â Ŭ·¡½º·Î µ¿Àû ¹è¿­ ŸÀÔÀ» ¸¸µé¾î º¼ °ÍÀÌ°í ÀÌ Å¬·¡½º¸¦ ÅÛÇø´À¸·Î ¸¸µé¾î ÀϹÝÀûÀΠŸÀÔ¿¡ ´ëÇØ ¹ü¿ëÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ½Ç½ÀÇÒ °ÍÀÌ´Ù. ¶ÇÇÑ È°¿ë¼ºÀ» ³ôÀ̱â À§ÇØ °Ë»ö, º¹¼ö »ðÀÔ, ¹è¿­³¢¸®ÀÇ º´ÇÕ µî Á» ´õ ¸¹Àº ±â´ÉµéÀ» Ãß°¡ÇØ º¸µµ·Ï ÇÏÀÚ. ¿©±â¼­´Â C ¼öÁØ¿¡¼­ µ¿Àû ¹è¿­À» ÀÛ¼ºÇÏ´Â ¹æ¹ý¿¡ ´ëÇؼ­¸¸ Á¤¸®ÇÏ°í ³Ñ¾î°¡±â·Î ÇÑ´Ù.