19-4-´Ù.ÇÁ¸°ÅÍ Å¥

Å¥´Â Çϵå¿þ¾î, ¿î¿µÃ¼Á¦ µîÀÇ ¿©·¯ °÷¿¡¼­ »ç¿ëµÇ´Âµ¥ ´ëÇ¥ÀûÀ¸·Î Å°º¸µåÀÇ Å°ÀԷ ť¸¦ µé ¼ö ÀÖ´Ù. Å°º¸µå´Â ´­·¯Áø Å°ÀÇ ¸ñ·ÏÀ» º»Ã¼·Î Àü¼ÛÇϴµ¥ º»Ã¼°¡ ÀÌ ÀÔ·ÂÀ» Áï½Ã Áï½Ã ¹Þ¾ÆµéÀÌÁö ¸øÇÒ Á¤µµ·Î ¹Ù»Ü ¼öµµ ÀÖÀ¸¹Ç·Î ÀÔ·ÂµÈ Å°ÀÇ Á¤º¸¸¦ Å¥¿¡ ÀÏ´Ü ÀúÀåÇÑ´Ù. ±×¸®°í º»Ã¼´Â Å¥¿¡ ½×¿©Áø Å° Äڵ带 ÀÔ·ÂµÈ ¼ø¼­´ë·Î »© ³»°¡´Âµ¥ ¸ÕÀú ÀÔ·ÂµÈ Å°¸¦ ¸ÕÀú °¡Á® °¡¾ß ÇϹǷΠFIFOÀÇ ¿ø¸®·Î ¿òÁ÷À̴ ť°¡ ÀûÇÕÇÏ´Ù.

À©µµ¿ìÁî ¿î¿µÃ¼Á¦ÀÇ ¸Þ½ÃÁö Å¥µµ ´ëÇ¥ÀûÀΠťÀÇ È°¿ë¿¹ÀÌ´Ù. Å°º¸µå, ¸¶¿ì½º, ŸÀÌ¸Ó µîÀÇ ¸Þ½ÃÁöµéÀÌ ¹ß»ýÇÑ ¼ø¼­´ë·Î Å¥¿¡ ½×¿© ÀÖ´Ù°¡ ¸Þ½ÃÁö ·çÇÁ¿¡ ÀÇÇØ ¼ø¼­´ë·Î ²¨³»Á® 󸮵ȴÙ. ÀÔ·ÂµÈ ¼ø¼­´ë·Î ó¸®ÇØ¾ß ÇϹǷΠÀÌ °æ¿ìµµ Å¥°¡ ÇÊ¿äÇÏ´Ù. ÀÌ ¿Ü¿¡µµ Å¥°¡ »ç¿ëµÇ´Â °÷Àº ¾ÆÁÖ ¸¹Àºµ¥ ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ Å¥¸¦ ÇÊ¿ä·Î ÇÑ´Ù¸é ¾ðÁ¦µçÁö ¸¸µé¾î ¾µ ¼ö ÀÖ´Ù. ¾Õ ÀåÀÇ snake °ÔÀÓ¿¡¼­ ¹ìÀÇ ¸öü ÁÂÇ¥¸¦ ±â¾ïÇϱâ À§ÇØ ÀÌ¹Ì ¿øÇü Å¥¸¦ »ç¿ëÇØ º» ÀûÀÌ ÀÖ´Ù.

´ÙÀ½ ¿¹Á¦´Â ÇÁ¸°ÅÍÀÇ Àμ⠽ýºÅÛÀÎ ½ºÇ®·¯°¡ »ç¿ëÇϴ ť¸¦ ½Ã¹Ä·¹À̼ÇÇÑ´Ù. ÇÁ¸°ÅÍÀÇ ¹®¼­ Àμ⠼ӵµ´Â ÀϹÝÀûÀ¸·Î ¹«Ã´ ´À¸®±â ¶§¹®¿¡ ¹®¼­¸¦ º¸³»´Â Áï½Ã Áï½Ã ÀμâÇÏÁö ¸øÇÑ´Ù. ±×·¡¼­ ÀμâÇÒ ¹®¼­ ¸ñ·ÏÀ» ÀúÀåÇØ ³õ°í Çϳª¾¿ ¼ø¼­´ë·Î ²¨³» ÀμâÇؾßÇϴµ¥ À̶§µµ Å¥°¡ »ç¿ëµÈ´Ù. ¼Ò½º´Â ´ÙÀ½°ú °°µÇ ¾Õ¿¡¼­ ¸¸µç ¹è¿­ Å¥ ÇÔ¼ö¸¦ ±×´ë·Î °¡Á®´Ù »ç¿ëÇß´Ù.

 

¿¹ Á¦ : PrintQueue

#include <Turboc.h>

 

int *Queue;

int QSize;

int head,tail;

 

void InitQueue(int size)

{

     QSize=size;

     Queue=(int *)malloc(QSize*sizeof(int));

     head=tail=0;

}

 

void FreeQueue()

{

     free(Queue);

}

 

BOOL Insert(int data)

{

     if ((tail+1) % QSize == head) {

          return FALSE;

     }

     Queue[tail]=data;

     tail=(tail+1) % QSize;

     return TRUE;

}

 

int Delete()

{

     int data;

 

     if (head==tail) {

          return -1;

     }

     data=Queue[head];

     head=(head+1) % QSize;

     return data;

}

 

void PrintQueue()

{

     int num;

     int x,y;

 

     num=tail-head;

     if (num < 0) num+=QSize;

     x=wherex();

     y=wherey();

     gotoxy(0,0);

     printf("´ë±â ÁßÀÎ ¹®¼­ ¼ö : %d",num);

     gotoxy(x,y);

}

 

void main()

{

     int doc=-1;

     int num;

 

     randomize();

     InitQueue(128);

     puts("Àμ⠴ë±â Áß...");

     for (;;) {

          if (kbhit()) if (getch() == ' ') break;

 

          // 5ÃÊ¿¡ ÇÑ ¹ø ²Ã·Î ¹®¼­°¡ µé¾î¿Â´Ù. ÆäÀÌÁö¼ö´Â 2~10ÆäÀÌÁö

          if (random(5)==0) {

              num=random(9)+2;

              if (Insert(num)==TRUE) {

                   printf("%d ÆäÀÌÁöÂ¥¸® »õ ¹®¼­ »ðÀÔµÊ\n",num);

                   PrintQueue();

              } else {

                   puts("Å¥°¡ °¡µæ Â÷¼­ »ðÀÔ ºÒ°¡");

              }

          }

 

          if (doc==-1) {

              doc=Delete();

              if (doc!=-1) {

                   clrscr();

                   PrintQueue();

                   gotoxy(0,5);

                   printf("%d ÆäÀÌÁöÂ¥¸® ¹®¼­ Àμ⠽ÃÀÛ\n",doc);

              }

          } else {

              printf("%d ÆäÀÌÁö ÀμâÁß...\n",doc);

              if (doc==1) {

                   doc=-1;

              } else {

                   doc--;

              }

          }

          delay(1000);

     }

     FreeQueue();

}

 

5ÃÊ¿¡ ÇÑ ¹ø ²Ã·Î »õ·Î¿î ¹®¼­¸¦ ÀμâÇϴµ¥ ¹®¼­´Â 2~10ÆäÀÌÁö Á¤µµÀÇ ±æÀ̸¦ °¡Áø´Ù. ÇÁ¸°ÅÍ°¡ ÃÊ´ç 1ÆäÀÌÁö¾¿ ÀμâÇÑ´Ù°í °¡Á¤ÇÏ°í ÀÖÀ¸¹Ç·Î ÀμâÇÏ´Â ¼Óµµº¸´Ù ¹®¼­°¡ ½×ÀÌ´Â ¼Óµµ°¡ ´õ ºü¸£µµ·Ï µÇ¾î ÀÖ´Ù. Àμ⸦ ÇÏ´Â Áß¿¡¶óµµ »õ·Î¿î ¹®¼­ÀÇ Àμ⸦ ¾ðÁ¦µçÁö ½ÃÀÛÇÒ ¼ö ÀÖÀ¸¸ç ±×·¡¼­ ´ë±âÁßÀÎ ¹®¼­ÀÇ ¸ñ·ÏÀ» Å¥¿¡ ½×¾Æ µÎ°í µµÂøÇÑ ¼ø¼­´ë·Î ¹®¼­¸¦ ²¨³»¼­ ÀμâÇÏ´Â ½Ã¹üÀ» º¸ÀδÙ.

½ÇÁ¦ ¿¹¿Í ÃÖ´ëÇÑ ºñ½ÁÇÏ°Ô ½Ã¹Ä·¹À̼ÇÇØ º¸·Á°í Çߴµ¥ ¹®¼­ÀÇ À̸§ÀÌ ¾ø°í ¹®¼­ ±æÀ̸¸ ÀúÀåÇϵµ·Ï Çؼ­ Á¶±Ý ´ú ½Ç°¨³ª´Âµ¥ ±¸Á¶Ã¼¸¦ ÀúÀåÇϴ ť¸¦ ÀÛ¼ºÇÏ°í ±¸Á¶Ã¼¿¡ ¹®¼­ÀÇ À̸§±îÁö Æ÷ÇÔ½ÃÄÑ µÎ¸é ÈξÀ ´õ Àç¹ÌÀÖ´Â ½Ã¹Ä·¹À̼ÇÀ» ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ½ÇÁ¦ ÇÁ¸°ÅÍÀÇ ½ºÇ®·¯°¡ »ç¿ëÇÏ´Â Àμâ Å¥µµ ÀÌ ¿¹Á¦¿Í ¿ø¸®»ó µ¿ÀÏÇÏ´Ù.

½ºÅÃÀ̳ª Å¥ ¿Ü¿¡ ¾çÂÊ ³¡¿¡¼­ »ðÀÔ, »èÁ¦°¡ °¡´ÉÇÑ µ¥Å©(Dequeue : Double Ended Queue)¶ó´Â ÀÚ·á ±¸Á¶µµ ÀÖ´Ù. µ¥Å©´Â ¿øÇüÀÇ ¹è¿­°ú µÎ °³ÀÇ Æ÷ÀÎÅÍ·Î ±¸ÇöÇÏ¸ç ¾ç ³¡¿¡¼­ »ðÀÔ, »èÁ¦ µ¿ÀÛÀ» ÇÒ ¼ö ÀÖ´Ù. ½ºÅÃÀ̳ª Å¥¸¸Å­ ÀÚÁÖ »ç¿ëµÇÁö´Â ¾ÊÀ¸¹Ç·Î ¿©±â¼­´Â °£´ÜÇÏ°Ô ¼Ò°³¸¸ Çϱâ·Î ÇÑ´Ù.