Å¥´Â Çϵå¿þ¾î, ¿î¿µÃ¼Á¦ µîÀÇ ¿©·¯ °÷¿¡¼ »ç¿ëµÇ´Âµ¥ ´ëÇ¥ÀûÀ¸·Î Å°º¸µåÀÇ Å°ÀԷ ť¸¦ µé ¼ö ÀÖ´Ù. Å°º¸µå´Â ´·¯Áø Å°ÀÇ ¸ñ·ÏÀ» º»Ã¼·Î Àü¼ÛÇϴµ¥ º»Ã¼°¡ ÀÌ ÀÔ·ÂÀ» Áï½Ã Áï½Ã ¹Þ¾ÆµéÀÌÁö ¸øÇÒ Á¤µµ·Î ¹Ù»Ü ¼öµµ ÀÖÀ¸¹Ç·Î ÀÔ·ÂµÈ Å°ÀÇ Á¤º¸¸¦ Å¥¿¡ ÀÏ´Ü ÀúÀåÇÑ´Ù. ±×¸®°í º»Ã¼´Â Å¥¿¡ ½×¿©Áø Å° Äڵ带 ÀÔ·ÂµÈ ¼ø¼´ë·Î »© ³»°¡´Âµ¥ ¸ÕÀú ÀÔ·ÂµÈ Å°¸¦ ¸ÕÀú °¡Á® °¡¾ß ÇϹǷΠ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)¶ó´Â ÀÚ·á ±¸Á¶µµ ÀÖ´Ù. µ¥Å©´Â ¿øÇüÀÇ ¹è¿°ú µÎ °³ÀÇ Æ÷ÀÎÅÍ·Î ±¸ÇöÇÏ¸ç ¾ç ³¡¿¡¼ »ðÀÔ, »èÁ¦ µ¿ÀÛÀ» ÇÒ ¼ö ÀÖ´Ù. ½ºÅÃÀ̳ª Å¥¸¸Å ÀÚÁÖ »ç¿ëµÇÁö´Â ¾ÊÀ¸¹Ç·Î ¿©±â¼´Â °£´ÜÇÏ°Ô ¼Ò°³¸¸ Çϱâ·Î ÇÑ´Ù.