¼Ò½º ´Ù¿î·Îµå

½ºÅðú Å¥¸¦ ÀÀ¿ëÇØ¼­ ¸¸µç ÇÁ·Î±×·¥ÀÔ´Ï´Ù.
±×³É ¸¶¿ì½ºÀÇ ¿òÁ÷ÀÓÀ» ±â¾ïÇØ¼­ ±×´ë·Î Ç÷¹ÀÌ ÇÏ´Â ÇÁ·Î±×·¥ÀÔ´Ï´Ù.
½ºÅÿëÀº ¿Ã¸®Áö ¾Ê¾Ò½À´Ï´Ù.
ÀÌ °ÍÀº Å¥¸¸À» ÀÀ¿ëÇÑ °ÍÀÔ´Ï´Ù.
¾Æ·¡ ±ÛÀº ÀÌ °ÍÀ» ¸¸µé ¶§ »ý°¢Çß´ø °ÍµéÀÔ´Ï´Ù^^

 ½ºÅÃÀº ÇϳªÀÇ ÀÚ·á ±¸Á¶ÀÔ´Ï´Ù. ¿ì¸®°¡ ¹è¿­À» ¸» ÇÒ¶§ °°Àº ÇüÀÇ ÀڷḸ ¸ðÀ» ¼ö ÀÖ´Â ÀÚ·á ±¸Á¶ ¶ó°í ¸»Çϵí
ÀÌ ½ºÅõµ ÇϳªÀÇ ÀÚ·á ±¸Á¶ÀÔ´Ï´Ù. ÇÏÁö¸¸ ½ºÅÃÀº ÀÚ½ÅÀÌ ÇàÀ§Àû Ãø¸éÀ» Æ÷ÇÔÇÏ´Â ÀÚ·á ±¸Á¶¶ó´Â °ÍÀÌ Á» ´Ù¸£
ÁÒ. ¿©±â¼­ ÇàÀ§Àû Ãø¸éÀ̶ó´Â °ÍÀÌ ¹Ù·Î ¾Ë°í¸®ÁòÀ» ¸»ÇÕ´Ï´Ù. ½ºÅÃÀº pop() °ú push() ¶ó´Â ÇàÀ§Àû Ãø¸éÀÌ ÀÖ
½À´Ï´Ù. pop()Àº ÀڷḦ ½ºÅÿ¡¼­ Çϳª ²¨³»¿À´Â °ÍÀ̰í push()´Â ÀڷḦ ½ºÅÿ¡ Çϳª Áý¾î ³Ö´Â °ÍÀ» ¸»ÇÕ´Ï
´Ù. ±×¸®°í ½ºÅÃÀº ÀڷḦ ²¨³»°í ÀúÀå Çϴµ¥ ¹æ¹ýÀÌ ÀÖ½À´Ï´Ù. ¹Ù·Î óÀ½ µé¾î¿Â ÀÚ·á°¡ Á¦ÀÏ ¸¶Áö¸·¿¡ ³ª°£´Ù
ÀÔ´Ï´Ù. ¹Ù·Î À̰ÍÀ» LIFO(Last In First Out) ±¸Á¶¶ó°í ÇÕ´Ï´Ù.


À§ÀÇ ±×¸²À» º¸¸é 4¸¦ Çѹø push() ÇÏ°í ´Ù½Ã pop() ÇÏ¿´½À´Ï´Ù. ¿©±â¼­ Áß¿äÇÑ °ÍÀº ¹Ù·Î top À̶ó´Â °ÍÀÔ´Ï´Ù.
ÀÌ topÀ̶ó´Â °ÍÀº ½ºÅÃÀÇ ²À´ë±â¸¦ °¡¸®Å°°í ÀÖ´Â À妽º°¡ µÇ°Ú½À´Ï´Ù. ±×·¡¼­ ½ºÅÃÀÌ ²Ë Â÷¸é ´õÀÌ»ó push()
ÇÒ ¼ö ¾øÀ¸¹Ç·Î top() °ªÀ» Á¶»çÇÏ¿© Áö±Ý ½ºÅÃÀÌ Full ÀÎÁö ¾Æ´Ï¸é Empty ÀÎÁö ¾Ë¾Æº¾´Ï´Ù.
1Â÷ ¿¹Á¦´Â ¹è¿­À» »ç¿ëÇÏ¿© Á¦ÇÑµÈ Å©±â¸¦ °¡Áö´Â ½ºÅÃÀ» ¸¸µé¾î º¸°Ú½À´Ï´Ù. ÀÌ °ÍÀº C·Î ¹è¿ì´Â ¾Ë°í¸®Áò Ã¥
ÀÇ ¿¹Á¦¸¦ Âü°í(¹è²¼½À´Ï´Ù^^;;;)Çß½À´Ï´Ù.

<¿¹Á¦ 1 ¹è¿­·Î ±¸ÇöÇÏ´Â ½ºÅÃ>
//#############################// // Stack Test Simulation No. 1 // //#############################// #include <stdio.h> #define MAX 10 int stack[10]; //¿ì¸®°¡ »ç¿ëÇÒ ½ºÅà ũ±â´Â intÇü º¯¼ö¸¦ 10°³ ³ÖÀ» ¼ö ÀÖ´Â 20¹ÙÀÌÆ®(16bitÄÄÆÄÀÏ·¯ ±âÁØ) int top; //½ºÅÃÀÇ »ó´ÜÀ» °¡¸®Å³ º¯¼ö void init_stack(void) { top = -1; //topÀÇ ÃʱⰪÀ» -1·Î ¼¼ÆÃ } int push(int t) { if( top >= MAX - 1) //½ºÅÃÀÌ ²Ë Â÷ÀÖ´ÂÁö¸¦ Á¶»çÇϰí ÀÖ´Ù { printf("\t\n Stack overflow."); return -1; } stack[++top] = t; //À妽º¸¦ ¸ÕÀú Áõ°¡½Ã۰í ÀÚ·áÀúÀå topÀ» ¿Ö -1·Î Çß´ÂÁö ¾Æ½Ã°ÚÁÒ? return t; } int pop(void) { if(top < 0) //½ºÅÃÀÌ ÅÖ ºñ¾î ÀÖ´ÂÁö¸¦ Á¶»çÇϰí ÀÖ´Ù { printf("\n Stack underflower."); return -1; } return stack[top--]; //ÀڷḦ ²¨³»°í À妽º Çϳª °¨¼Ò } void print_stack(void) //½ºÅÃÀÇ ÇöÀç ¸ð½ÀÀ» º¸¿©ÁØ´Ù. { int i; printf("\n Stack contents : top -----> Bottom\n"); for(i= top; i>=0; i--) printf("%-6d",stack[i]); } void main(void) { int i; init_stack(); printf("\nPush 5,4,7,8,2,1"); push(5); push(4); push(7); push(8); push(2); push(1); print_stack(); printf("\nPop"); i = pop(); print_stack(); printf("\n popping value is %d",i); printf("\push 3, 2, 5, 7, 2"); push(3); push(2); push(5); push(7); push(2); print_stack(); printf("\Now stack is full, push 3"); push(3); print_stack(); printf("\nInitialize stack"); init_stack(); print_stack(); printf("\nNow stack is empty, pop"); i = pop(); print_stack(); printf("\n popping value is %d", i); }
°á°ú´Â ¿©±â¿¡ ÀûÁö ¾Ê°Ú½À´Ï´Ù. Á÷Á¢ ÇØº¸½Ã±æ ¹Ù¶ø´Ï´Ù. ^^ ±×·¡¾ß ½Ç·ÂÀÌ...^^ ÀÌ ½ºÅÃÀº ¹è¿­·Î ±¸ÇöÇÏ¿´½À´Ï´Ù. ±×·³ ÀÌ ½ºÅÃÀº ÁÁÀº ½ºÅÃÀÌ µÉ ¼ö ÀÖÀ»±î¿ä? ´ë´äÀº ¾Æ´Ï¿À ÀÔ´Ï´Ù.
»óȲ¿¡ µû¶ó ±×·² ¼öµµ ÀÖ°ÚÁö¸¸ µÇºÎºÐ À¯¿ëÇÑ ½ºÅÃÀÌ µÇÁú ¸ø ÇÕ´Ï´Ù. ¿Ö ±×·²±î¿ä? ±×°ÍÀº ¹è¿­Àº Å©
±â°¡ ÇÑ Á¤µÇ¾î À־ ¸Þ¸ð¸® ³¶ºñ¸¦ ÃÊ·¡ÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î »ç¿ëÀÚ´Â 3°³ÀÇ ÀڷḸ ÀúÀåÇÏ´Â
½ºÅÃÀÌ ÇÊ¿äÇѵ¥ ¼³°èÀÚ´Â ÀÌ °ÍÀ» ¸ð¸£°í 10°³ÀÇ ÀڷḦ ÀúÀåÇÏ´Â ½ºÅÃÀ» ¸¸µé¾î ÁÖ¾ú´Ù°í »ý°¢ÇØ º¾½Ã´Ù.
±×·¯¸é 7°³ÀÇ ÀڷḦ ÀúÀåÇÏ´Â ¸Þ¸ð¸®°¡ ³¶ºñ°¡ µÇ´Â °ÍÀ̰ÚÁÒ. ±×·³ ¶§¿¡ µû¶ó ½ºÅÃÀÇ Å©±â°¡ ´Þ¶ó Á®¾ß ÇÏ´Â µ¥ ±×·¸°Ô ÇÒ·Á¸é ¾î¶»°Ô ÇØ¾ß ÇÒ±î¿ä? ¹Ù·Î µ¿ÀûÀÎ ¸Þ¸ð¸® ÇÒ´çÀÔ´Ï´Ù.(µ¿ÀûÀÎ ¸Þ¸ð¸® ÇÒ´çÀº ÇÁ·Î±×·¥ ¼öÇà µµÁß¿¡ ¸Þ¸ð¸®¸¦ Àâ´Â °ÍÀ» ¸»ÇÕ´Ï´Ù.)±×¸®°í ¸µÅ©µå ¸®½ºÆ®¶ó´Â °ÍÀ» »ç¿ëÇØ¼­ ½ºÅÃÀ» ±¸ÇöÇÕ´Ï´Ù. ´ÙÀ½¿¡´Â ¸µÅ©µå¸®½ºÆ®¸¦ ÀÌ¿ëÇÏ¿© ½ºÅÃÀ» ±¸ÇöÇØ º¸°Ú½À´Ï´Ù. ################################################################################################

¸µÅ©µå ¸®½ºÆ®¸¦ ÀÌ¿ëÇÏ¿© ½ºÅÃÀ» ±¸ÇöÇÏ¸é ´ÙÀ½°ú °°Àº ÀÌÁ¡ÀÌ ÀÖ½À´Ï´Ù. 1. ÇöÀç ½ºÅÿ¡ ÀúÀåµÇ¾î ÀÖ´Â ÀÚ·á ¸¸Å­¸¸ ¸Þ¸ð¸®¸¦ Àâ¾Æ¸Ô±â ¶§¹®¿¡ ¸Þ¸ð¸®°¡ Àý¾àµÈ´Ù.
2. ¸Þ¸ð¸®°¡ Çã¿ëÇÏ´Â Çѵµ¿¡¼­ Ä¿Áú ¼ö ÀÖ´Ù. ¿¬°á¸®½ºÆ®¸¦ ÀÌ¿ëÇÏ´Â ½ºÅÃÀÇ ¸ð¾çÀº ¾Æ·¡ÀÇ ±×¸²°ú °°½À´Ï´Ù. < ¿¹Á¦ 2. ¸µÅ©µå ¸®½ºÆ®¸¦ ÀÌ¿ëÇÑ ½ºÅà > #include <stdio.h> #include <alloc.h> //³ëµåÀÇ ¸ð¾ç»õ(?)¸¦ ¸¸µé°í ÀÖ´Ù. typedef struct tagNode { int data; //³ëµå°¡ ÀúÀåÇÒ ÀÚ·á struct tagNode *next; //´ÙÀ½ ³ëµå¸¦ °¡¸®Å³ Æ÷ÀÎÅÍ (À̺κÐÀº ±âÃʹ®¹ý¼­ÀûÀ» Âü°íÇϼ¼¿ä^^) }node; node* head; //head ³ëµå¿Í tail ³ëµå¸¦ ¼±¾ðÇϰí ÀÖ´Ù. node* tail; void init_stack(void) //³ëµå¸¦ ÃʱâÈ­ ÇØÁÖ´Â ÇÔ¼ö { head = (node *)malloc(sizeof(node)); //head¿Í tail³ëµå¸¦ ¸Þ¸ð¸®¿¡ Àâ°í ÀÖ´Ù tail = (node *)malloc(sizeof(node)); //¿ø·¡ head¿Í tailÀº ¸Þ¸ð¸®¿¡ ÀâÀ» Çʿ䰡 ¾ø´Ù head->next = tail; //À̵éÀº ÀڷḦ °®Áö ¾Ê°í ´ÜÁö °¡¸®Å³ »ÓÀ̱⠶§¹®ÀÌ´Ù. tail->next = tail; //ÇÏÁö¸¸ ¿©±â¼­´Â À̰ÍÀÌ ´õ ½±±â ¶§¹®¿¡ ^^.... } //ÀڷḦ push ÇÏ´Â ÇÔ¼ö int push(int k) { node* temp; //³ëµå¸¦ Ãß°¡½Ã۱â À§ÇÏ¿© Àӽà ³ëµå¸¦ ¸¸µê if((temp = (node *)malloc(sizeof(node))) == NULL) //¸¸¾à ¸Þ¸ð¸®°¡ ¾øÀ» ¶§¿¡´Â ¿¡·¯¸¦ Ãâ·Â { printf("\n Out of Memory..."); return -1; } temp->data = k; temp->next = head->next; //À̺κÐÀ» Àß ÀÌÇØÇÏ¼Å¾ß ÇÕ´Ï´Ù. head->next = temp; //À̺κÐÀº ³ëµå¸¦ ¸µÅ©µå¸®½ºÆ®¿¡ Ãß°¡½ÃŰ´Â ºÎºÐÀÔ´Ï´Ù. return k; } //ÀڷḦ popÇÏ´Â ÇÔ¼ö int pop(void) { node* temp; int i; if(head->next == tail) //headÀÇ ´ÙÀ½ÀÌ tailÀÌ¸é ¸µÅ©µå ¸®½ºÆ®°¡ ºó °ÍÀ̹ǷΠ¿¡·¯¸¦ Ãâ·Â { printf("\n Stack underflow."); return -1; } temp = head->next; //À̺κÐÀ» Àß ÀÌÇØÇÏ¼Å¾ß ÇÕ´Ï´Ù. i = temp->data; //À̺κÐÀº ¸µÅ©µå ¸®½ºÆ®¿¡¼­ ³ëµé¸£ Áö¿ì´Â °ÍÀÔ´Ï´Ù. head->next = temp->next; free(temp); return i; } //¸ðµç ³ëµå¸¦ Áö¿ì´Â ÇÔ¼ö void clear_stack(void) { node* current; //ÇöÀç ³ëµå¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍ node* old; //ÀÌÀü ³ëµå¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍ current = head->next; //ÇöÀç ³ëµå¸¦ headÀÇ ´ÙÀ½À¸·Î Çϰí ÀÖ´Ù while( current != tail) //ÇöÀç ³ëµå°¡ tail ÀÏ ¶§±îÁö { old = current; // ÇöÀç ³ëµå¸¦ °¡¸®Å°´Â Æ÷ÀÎÅ͸¦ ¿¹Àü ³ëµå¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍ¿¡ ÀúÀå current = current->next; //ÇöÀç³ëµå¸¦ ÇöÀç³ëµåÀÇ ´ÙÀ½ ³ëµå·Î ¿Å±è free(old); // ¿¹Àü ³ëµå »èÁ¦ } head->next = tail; } //¸ðµç ³ëµå¸¦ º¸¿©ÁÖ´Â ÇÔ¼ö void print_stack(void) { node* temp; temp = head->next; printf("\n Stack contents : Top ----> Bottom\n"); while( temp != tail) { printf("%-6d",temp->data); temp = temp->next; } } void main(void) { int i; init_stack(); printf("\n Push 5, 4, 7, 8, 2, 1"); push(5); push(4); push(7); push(8); push(2); push(1); print_stack(); printf("\n Pop"); i = pop(); print_stack(); printf("\n popping value is %d", i); printf("\nPush 3, 2, 5, 7, 2"); push(3); push(2); push(5); push(7); push(2); print_stack(); printf("\nPush 3"); push(3); print_stack(); printf("\nInitialize stack"); clear_stack(); print_stack(); printf("\nNow stack is empty, pop"); i = pop(); print_stack(); printf("\n popping value is %d",i); } ¸µÅ©µå ¸®½ºÆ®¸¦ ÀÌ¿ëÇÑ ½ºÅÃÀ» ±¸ÇöÇØ ºÃ½À´Ï´Ù. ¾ÆÁÖ ÁÁ¾Æº¸ÀÌÁÒ? ¸Þ¸ð¸®ÀÇ Á¦¾àµµ °ÅÀÇ ¹ÞÁö ¾Ê°í ¸Þ¸ð¸®°¡
¹«ÇÑ´ë¶ó¸é ½ºÅÃÀ» ¹«ÇÑ´ë·Î ´Ã¸± ¼ö ÀÖ´Â ¹æ¹ýÀÔ´Ï´Ù. ÇÏÁö¸¸ À̰ÍÀÇ ¹®Á¦°¡ ¾Æ´Ï¶ó Ƽ°¡ ÀÖ´Ù¸é ¹«¾ùÀϱî¿ä?
ÀÌ ¼Ò½º¸¦ ¸ÁÄ¡¿¡ ºñÀ¯ÇÏÀÚ¸é ÀÌ·¸½À´Ï´Ù. ¸ÁÄ¡¸¦ ¾µ ¶§¸¶´Ù ¸ÁÄ¡ ÀÚü¸¦ Á¶¸³ÇÑ ´ÙÀ½¿¡ ¸ÁÄ¡¸¦ ½á¾ß ÇÕ´Ï´Ù.
ÇÏÁö¸¸ ¸ÁÄ¡°¡ ÇÊ¿äÇÒ ¶§ ¿ì¸®´Â ±×³É ¸ÁÄ¡¸¦ ¾²Áö ´©°¡ ¸ÁÄ¡¸¦ ±× ¶§¸¶´Ù Á¶¸³Çؼ­ ¾¹´Ï±î? ±×·³ ¾î¶»°Ô ÇØ¾ß
ÇÒ±î¿ä? À½... ½ºÅÃÀ» °´Ã¼·Î Á¤ÀÇÇÏ¸é ¾î¶³±î¿ä? ³ªÁß¿¡ ´Ù¸¥ ÇÁ·Î±×·¥¿¡¼­ ÇÊ¿äÇÒ ¶§ ½ºÅà Ŭ·¡½º¸¸ °®´Ù°¡ ¾²¸é µÇ°Ú
ÁÒ..^^ ±×·³ ¸ÁÄ¡°¡ ÇÊ¿äÇÒ ¶§ ¹Ù·Î ¸ÁÄ¡¸¸ °¡Á®´Ù ¾²µíÀÌ ¿ì¸®µµ ½ºÅÃÀÌ ÇÊ¿äÇÒ ¶§´Â ½ºÅø¸ °¡Á®´Ù ¾µ ¼ö ÀÖ½À
´Ï´Ù. ´ÙÀ½¿¡´Â ½ºÅÃÀ» Ŭ·¡½º·Î ±¸ÇöÇØ º¸°Ú½À´Ï´Ù.

################################################################################################


                 



 

 ±âÁ¸ÀÇ ¼Ò½º¸¦ Ŭ·¡½ºÈ­ ÇÏ¿´½À´Ï´Ù. ÀÌ·¸°Ô ÇÔÀ¸·Î½á ³ªÁß¿¡ Ŭ·¡½º¸¦ ÇϳªÀÇ ºÎǰ ¶Ç´Â µµ±¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Â
°ÍÀÔ´Ï´Ù. ^^ ¾Æ·¡ ¼Ò½º ³ª°©´Ï´Ù^^.. < ¿¹Á¦ 3. Ŭ·¡½ºÈ­ ÇÑ ½ºÅà > #include <stdio.h> #ifndef STACK #define STACK typedef struct tagNode { int data; tagNode* next; }node; class kStack { public: //constructure /destructure kStack(); ~kStack(); //operation int Pop(void); int Push(int k); void PrintStack(void); void ClearStack(void); private: //attribute node* head; node* tail; }; kStack::kStack() //»ý¼ºÀÚ¿¡¼­ ½ºÅøµÅ©µå¸®½ºÆ®ÀÇ head¿Í tailÀ» ÃʱâÈ­ Çϰí ÀÖ½À´Ï´Ù. { head = new node[1]; tail = new node[1]; head->next = tail; tail->next = tail; } kStack::~kStack() //¼Ò¸êÀÚ¿¡¼­ head¿Í tail ¿¡ ÇØÁØ µ¿Àû ¸Þ¸ð¸® ÇÒ´çÀ» Áö¿ì°í ÀÖ½À´Ï´Ù. *Áß¿ä* { delete [] head; delete [] tail; } int kStack::Push(int k) { //C++ÀÇ new ¿¬»êÀÚ°¡ ´õ ÆíÇϰí ÁÁ±â ¶§¹®¿¡ malloc ´ë½Å¿¡ À̰ÍÀ» »ç¿ëÇß½À´Ï´Ù node* temp = new node[1]; if(temp == NULL) { printf("\n Out of Memory..."); return -1; } temp->data = k; temp->next = head->next; head->next = temp; return k; } int kStack::Pop(void) { node* temp; int i; if(head->next == tail) { printf("\n Stack underflow."); return -1; } temp = head->next; i = temp->data; head->next = temp->next; delete [] temp; return i; } void kStack::PrintStack(void) { node* temp; if(head->next == tail) { printf("\n Stack is Empty"); return; } temp = head->next; printf("\n Stack contents : Top ----> Bottom\n"); while(temp != tail) { printf("%-6d",temp->data); temp = temp->next; } } void kStack::ClearStack(void) { node* current; node* old; if(head->next == tail) { printf("\n Stack is Empty do not clear"); return; } current = head->next; while(current != tail) { old = current; current = current->next; delete [] old; } head->next = tail; } void main() { int i; kStack stack; printf("\n Push 5, 4, 7, 8, 2, 1"); stack.Push(5); stack.Push(4); stack.Push(7); stack.Push(8); stack.Push(2); stack.Push(1); stack.PrintStack(); printf("\n Pop"); i = stack.Pop(); stack.PrintStack(); printf("\n popping value is %d", i); printf("\nPush 3, 2, 5, 7, 2"); stack.Push(3); stack.Push(2); stack.Push(5); stack.Push(7); stack.Push(2); stack.PrintStack(); printf("\nPush 3"); stack.Push(3); stack.PrintStack(); printf("\nInitialize stack"); stack.ClearStack(); stack.PrintStack(); printf("\nNow stack is empty, pop"); i = stack.Pop(); stack.PrintStack(); printf("\n popping value is %d",i); } #endif //STACK ¾î¶»½À´Ï±î? Ŭ·¡½º·Î ±¸ÇöÇϴϱñ Àǹ̰¡ ´õ¿í´õ Á¤È®ÇØ ÁöÁö ¾Ê¾Ò½À´Ï±î? ÇÏÁö¸¸ ÀÌ Å¬·¡½º¿¡µµ ¹®Á¦°¡ ÀÖ½À ´Ï´Ù. -_-;; ÀÚ²Ù¸¸ ¹«½¼ ¹®Á¦³Ä±¸¿ä...? ¿Ö ÀÚ²Ù µûÁö³Ä±¸¿ä? ±×¾ß ´õ ÁÁ°Ô ¸¸µé±â À§Çؼ­Áö¿ä ^^;; ±×·³ ¹®Á¦Á¡
À» ¸»ÇØ º¸°Ú½À´Ï´Ù. »ç½Ç ÀÌ ½ºÅÃÀº ÀڷḦ intÇüÀÇ ÀÚ·á ¹Û¿¡ ÀúÀåÇÏÁö ¸ø ÇÕ´Ï´Ù. ±×·±µ¥ ½ÇÁ¦ ÇÁ·Î±×·¥¿¡¼­´Â ±×·¸Áö ¾Ê°Åµç¿ä. ÇϳªÀÇ À©µµ¿ìÀÇ Á¤º¸¸¦ ÀúÀåÇѴٰųª... ¾Æ´Ï¸é ´Ù¸¥ ¿©·¯°¡Áö Á¤º¸°¡ ¼¯ÀÎ ÀڷḦ ½ºÅÿ¡ Àú Àå ÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ±×·³ ±× ¶§¸¶´Ù ±×¿¡ ¸Â´Â ½ºÅà Ŭ·¡½º¸¦ ¸¸µé¾î Áà¾ß ÇÒ±î¿ä???? ±×·¸´Ù¸é ÇÁ·Î±×·¡¸Óµé Àº ½ºÆ®·¹½º ¶§¹®¿¡ Á×À» °ÍÀÔ´Ï´Ù. ±× ¶§ ÀÌ¿ëÇÏ´Â °ÍÀÌ C++ÀÇ ´ÙÇü¼ºÀ̶ó´Â °ÍÀÔ´Ï´Ù. ¿©±â¼­´Â ´ÙÇü¼ºÀÇ ±Ø Ä¡ÀÎ ¹Ù·Î template(ÅÛÇø´) À» »ç¿ëÇÏ´Â °ÍÀÔ´Ï´Ù. ÅÛÇø´À» »ç¿ëÇÏ¿© Ŭ·¡½º¸¦ ¸¸µé¸é ¾î¶² ÀÚ·áÇüÀÌ µé¾î¿Íµµ »ó°üÀÌ ¾ø°ÚÁÒ? ±×·³ ´ÙÀ½¿¡ ÅÛÇø´À¸·Î ¸¸µç ½ºÅÃÀ» ¿Ã¸®°Ú½À´Ï´Ù. ^^

##############################################################################################################


 

 ¾È³çÇϼ¼¿ä^^ ¿©±â±îÁö ¿À½Ã´À¶ó±¸ Èûµå ¼ÌÁÒ? Á¶±Ý¸¸ Èû³»½Ã±æ ¹Ù¶ø´Ï´Ù. ÀÌÁ¦ ½ºÅÃÀº °ÅÀÇ ´Ù ³¡³ª°¡´Ï±î¿ä^^

  ¿©±â¼­ ¼Ò½º¸¦ ¼³¸íÇÏ°í ´ÙÀ½¿¡´Â ½ÇÁ¦ÀûÀ¸·Î ÇÁ·Î±×·¥¿¡ ½ºÅÃÀ» »ç¿ëÇÑ °æ¿ì¸¦ º¸¿©µå¸®°Ú½À´Ï´Ù.^^


#include <stdio.h> #include <stdlib.h> #ifndef TEMPLATE_STACK #define TEMPLATE_STACK template<class T> class Stack { protected: struct Node { Node* next; T data; }; private: Node* head; Node* tail; public: Stack(); ~Stack(); void Push(T* d); T* Pop(void); T* Get(int index); }; template<class T> Stack::Stack() { head = new Node[1]; tail = new Node[1]; head->next = tail; tail->next = tail; } template<class T> Stack::~Stack() { delete [] head; delete [] tail; } template<class T> void Stack::Push(T *d) { Node* temp = new Node[1]; temp->data = *d; temp->next = head->next; head->next = temp; } template<class T> T* Stack::Pop(void) { Node* temp; T data2; if(head->next == tail) { printf("\nStack is Empty"); exit(1); } temp = head->next; data2 = temp->data; head->next = temp->next; delete [] temp; return &data2; } template<class T> T* Stack::Get(int index) { if(index == 0) { exit(1); } Node* temp; temp = head; for(int i=0; i < index; i++) { temp = temp->next; } return &(temp->data); } #endif À§ÀÇ ¼Ò½º¸¦ º¸¸é Ŭ·¡½º ¾È¿¡ ±¸Á¶Ã¼°¡ ÀÖ½À´Ï´Ù. ¿Ö ±×·± °ÍÀϱî¿ä? ¾Æ·¡ÀÇ ±×¸²À» º¸¼¼¿ä.

ÀÌ ±×¸²À» º¸¸é ½ºÅà °´Ã¼¾È¿¡ ³ëµåµéÀÌ µé¾î ÀÖ½À´Ï´Ù. ¸¸¾à ÀÌ·¸°Ô ¼³°èÇÏÁö ¾ÊÀ¸¸é ¿ì¸®°¡ ³ëµå¿¡ ³ÖÀ» ÀÚ·áÇü ¿¡ ¹Ýµå½Ã ±× ÀÚ·áÇüÀ» °¡¸®Å³ ¼ö ÀÖ´Â Æ÷ÀÎÅͰ¡ ÀÖ¾î¾ß ÇÕ´Ï´Ù. ±¸Á¶Ã¼·Î ¿¹·Î µé¸é .. ³»°¡ POINT¶ó´Â ±¸Á¶Ã¼¸¦ ³ëµå¿¡ ³ÖÀ¸·Á ÇÒ ¶§ ¹Ýµå½Ã POINT¸¦ °¡¸®Å³ ¼ö ÀÖ´Â Æ÷ÀÎÅ͸¦ ¼±¾ðÇØ ÁÖ¾î¾ß ÇÑ´Ù´Â ¸»ÀÌÁÒ ´ÙÀ½°ú °°ÀÌ.. struct POINT { int x; int y; POINT* next; //POINT¸¦ °¡¸®Å³ ¼ö ÀÖ´Â Æ÷ÀÎÅÍ }; ÇÏÁö¸¸ ¿ì¸®°¡ ÀúÀåÇÏ°í ½ÍÀº ÀÚ·á ÇüŸ¦ ¸¸µé ¶§¸¸´Ù Àú°ÍÀ» ì°ÜÁà¾ß Çϸé Á» ºÒÆíÇϰÚÁÒ... ±×·¡¼­ Ŭ·¡½º¿¡ Node¶ó´Â ±¸Á¶Ã¼¸¦ Æ÷ÇÔÇÑ °ÍÀÔ´Ï´Ù.^^ ÀÌ stackÀÇ »ç¿ë¹ýÀº Stack<POINT> stack ÀÌ·± Çü½ÄÀ¸·Î ¼±¾ðÇØ ÁÖ°í¿ä POINT pt ÀڷḦ Push ÇÒ ¶§´Â ........ stack.Push(&pt); ÀÌ·¸°Ô Æ÷ÀÎÅ͸¦ ³Ñ°Ü ÁÝ´Ï´Ù. ÀÌ·¸°Ô ÇØ¾ß ¸Þ¸ð¸® ³¶ºñ°¡ ¾ø°ÚÁÒ? ±×¸®°í Pop()Àº POINT ÀÚ·áÇüÀÇ Æ÷ÀÎÅÍ(ÁÖ¼Ò)¸¦ ³Ñ°ÜÁÝ´Ï´Ù. ±×·¡¼­ POINT* ptr = stack.Pop(); ÀÌ·¸°Ô »ç¿ë ÇØ ÁÝ´Ï´Ù. ±×¸®°í ¸î ¹øÂ° ÀڷḦ ¾Ë°í ½ÍÀ» ¶§ POINT* ptr = stack.Get(2); // µÎ¹øÂ° ÀڷḦ ¾Ë°í ½ÍÀ» ¶§ ............ ÀÌ·¸°Ô »ç¿ëÇØ ÁÝ´Ï´Ù. ^^ ÀÌ·¸°Ô ÇÔÀ¸·Î½á ¸ðµç ÀÚ·áÇüÀ» ÀúÁ¤ÇÒ ¼ö ÀÖ´Â ½ºÅÃÀÌ ¸¸µé¾î Á³½À´Ï´Ù. ^^

##############################################################################################################


ÀÌ ¹ø¿¡´Â Å¥¸¦ ÀÌ¿ëÇÏ¿© °í½ºÆ® ¸¶¿ì½º¶ó´Â ÇÁ·Î±×·¥À» ¸¸µé¾î º¸°Ú½À´Ï´Ù. °í½ºÆ® ¸¶ ¿ì½º¶ó´Â ÇÁ·Î±×·¥Àº ¸¶¿ì½º ¿òÁ÷ÀÓÀ» ±â¾ïÇß´Ù°¡ Ç÷¹À̸¦ ´©¸£¸é ¸¶¿ì½º°¡ ¿òÁ÷¿´´ø ´ë·Î Àç»ýÀÌ µÇ´Â ÇÁ·Î±×·¥ ÀÔ´Ï´Ù.^^ ¸¶¿ì½º°¡ °Å²Ù·Î°¡ ¾Æ´Ñ ¶È °°ÀÌ Àç»ýÀÌ µÇ´Ï±ñ Å¥°¡ ÇÊ¿äÇϰÚÁÒ? ¿©±â¼­ Å¥(Queue)¶õ ½ºÅðú´Â ¹Ý´ë·Î óÀ½¿¡ µé¾î¿Â ÀÚ·á°¡ óÀ½¿¡ ³ª°¡´Â ÀÚ·á°¡ µÇ°Ú½À´Ï´Ù. ½ºÅÃÀ» ÀÌÇØÇϼ̴٠¸é ÀÌÇØ°¡ Àß µÇ½Ç °ÍÀÔ´Ï´Ù. ¿ì¸®°¡ °í½ºÆ® ¸¶¿ì½º¸¦ ¸¸µé±â À§ÇØ ÀúÀåÇØ¾ßÇÒ Á¤º¸´Â ¸¶¿ì½º ÁÂÇ¥ X,Y ¿Í ¸¶¿ì½º ¿Þ ÂÊ ´©¸§ ¹öư È®ÀÎ(True/False) ±×¸®°í ¿À¸¥ÂÊ ¸¶¿ì½º ´©¸§ ¹öư È®ÀÎ(True/False) ÀÔ´Ï´Ù. ±¸Á¶Ã¼·Î Ç¥ÇöÇϸé.... struct MouseData{ LONG x; LONG y; BOOL IsLButtonDown; BOOL IsRButtonDown; }; ÀÌ µÇ°ÚÁÒ. ^^ ±×·³ ÀÌ ·± ÀÚ·áÇüµµ ÀúÀåÇÒ ¼ö ÀÖ°í ¶Ç ´Ù¸¥ ÀÚ·áÇüµµ ÀúÀåÇÒ ¼ö ÀÖ´Â ÅÛÇø®Æ® Å¥¸¦ ¸¸µé¸é ÁÁÀ» °Í °°½À´Ï´Ù. ÀÚ ¾Æ·¡ ÅÛÇø®Æ®·Î ¸¸µç Å¥ ¼Ò½º¸¦ »Ñ¸³´Ï´Ù. ¸µÅ©µå ¸®½ºÆ®¸¦ ÀÌ¿ëÇßÁö¸¸ ÀÌÁß ¸µÅ©µå ¸®½ºÆ®¸¦ ÀÌ¿ëÇß½À´Ï´Ù. ÀÌÁßÀ» »ç¿ëÇÑ °ÍÀº Å¥°¡ ÀÔ±¸¿Í Ãⱸ°¡ ³ªÀ§¾îÁ® Àֱ⠶§¹®¿¡ ÀÌÁß ¸µÅ©µå ¸®½ºÆ®¸¦ »ç¿ëÇÏ´Â °ÍÀÌ Ç¥ÇöÇϱ⿡ ÆíÇÕ´Ï´Ù. ´ÜÀϷεµ ¹°·Ð ¾ïÁö·Î¶ó¸é ±¸ÇöÇÒ ¼öµµ ÀÖ½À´Ï´Ù.. ÇÏÁö¸¸ ¿Ø¸¸Çϸé Á¤½Å°Ç°­À» À§ÇÏ¿© ^^ //##########################################################// //## Template Queue ##// //## ±è¼ºÃ¶ ##// //## http://paran.pe.kg ##// //## 2000. 5. 3 ##// //##########################################################// #ifndef KQUEUE #define KQUEUE #ifndef NULL #define NULL 0 #endif #include <stdio.h> template<class T> class Queue { protected: struct Node { T data; Node* next; Node* prev; }; public: Queue(); virtual ~Queue(); //operation void Push(T* d); //tail ³ëµå ¾Õ¿¡ »õ·Î¿î ³ëµå¸¦ Ãß°¡ void Get(T* buffer,int index); //index ¼ø¼­¿¡ ÀÖ´Â °ªÀ» ¾ò¾î ¿Ã ¼ö ÀÖÀ½ void RemoveAll(void); //¸ðµç ³ëµå¸¦ Áö¿î´Ù void Remove(T* buffer); //head ³ëµå ´ÙÀ½ ³ëµåÀÇ °ªÀ» ¾ò°í ±× ³ëµå¸¦ »èÁ¦ÇÑ´Ù. private: Node* head; Node* tail; }; //»ý¼ºÀÚ¿¡¼­ head¿Í tailÀ» »ý¼ºÇÏ°í ±×µéÀÇ ¼­·Î ¿¬°áÇÑ´Ù. template<class T> Queue::Queue() { head = new Node[1]; tail = new Node[1]; head->prev = head; head->next = tail; tail->prev = head; tail->next = tail; } //¼Ò¸êÀÚ¿¡¼­ head¿Í tailÀ» »èÁ¦ÇÑ´Ù. template<class T> Queue::~Queue() { delete [] head; delete [] tail; } //Push ÇÔ¼ö´Â tail ¾Õ¿¡ »õ·Î¿î ³ëµå¸¦ ¸¸µç´Ù template<class T> void Queue::Push(T* d) { Node* insert = new Node[1]; if(insert == NULL) { printf("Error :: Push Function"); return; } insert->data = *d; //tail ³ëµå ¾Õ¿¡ ³ëµå¸¦ Ãß°¡ÇÏ´Â ¸ð½À(?) tail->prev->next = insert; insert->prev = tail->prev; tail->prev = insert; insert->next = tail; } //index ¿¡ 3À̶ó°í ÁÖ¸é 3¹øÂ° ³ëµåÀÇ °ªÀ» ¾ò¾î¿Â´Ù.(¸¸¾à 3¹øÂ° ³ëµå°¡ ÀÖ´Ù¸é..) template<class T> void Queue::Get(T* buffer,int index) { if(head->next == tail) { printf("\nError :: Get Function"); return; } Node* temp; temp = head->next; for(int i=0; i < index; i++) { temp = temp-> next; } *buffer = temp->data; } //¸ðµç ³ëµå¸¦ »èÁ¦ÇÑ´Ù. template<class T> void Queue::RemoveAll(void) { if(head->next == tail) { printf("Error :: RemoveAll"); return; } Node* current; Node* old; current = head->next; while(current != tail) { old = current; current = current->next; delete [] old; } head->next = tail; tail->prev = head; } //head ÀÇ ´ÙÀ½ ³ëµåÀÇ °ªÀ» ¾ò°í ±× ³ëµå¸¦ »èÁ¦ÇÑ´Ù. template<class T> void Queue::Remove(T* buffer) { if(head->next == tail) { printf("\nError :: Remove Function"); return; } Node* temp; temp = head->next; *buffer = temp->data; //head ÀÇ ´ÙÀ½´ÙÀ½ ³ëµå¿Í ¿¬°áÇϰí ÀÖ´Ù. head->next = temp->next; temp->next->prev = head; tail->prev=tail->prev->prev; delete [] temp; } struct POINT { int x; int y; }; void main(void) { POINT pt[5] = {1,1,2,2,3,3,4,4,5,5}; Queue queue; for(int i=0; i<5; i++) { queue.Push(&pt[i]); } POINT temp; // queue.RemoveAll(); for(int j=0; j<5; j++) { queue.Get(&temp,j); printf("\n%d %d",temp.x, temp.y); } } #endif //class Queue