41-3.ÄÁÅ×ÀÌ³Ê ¾î´ðÅÍ

41-3-°¡.½ºÅÃ

ÄÁÅ×ÀÌ³Ê ¾î´ðÅÍ´Â ±âÁ¸ ÄÁÅ×À̳ÊÀÇ ±â´É Áß ÀϺθ¸À» °ø°³ÇÏ¿© ±â´ÉÀÌ Á¦Çѵǰųª º¯ÇüµÈ ÄÁÅ×À̳ʸ¦ ¸¸µç´Ù. ±âÁ¸ ÄÁÅ×À̳ÊÀÇ ±¸Çö Áß ÀϺδ ±×´ë·Î »ç¿ëÇ쵂 ¿ÜºÎ¿¡¼­ »ç¿ëÇÏ´Â ÀÎÅÍÆäÀ̽º¸¸ º¯°æÇÏ´Â °ÍÀÌ´Ù. STLÀº ½ºÅÃ, Å¥, ¿ì¼± ¼øÀ§ Å¥ ¼¼ °¡ÁöÀÇ ÄÁÅ×À̳ʸ¦ ¾î´ðÅÍ·Î Á¦°øÇÑ´Ù.

½ºÅÃÀ̶ó´Â ÀÚ·á ±¸Á¶´Â ¼±ÇüÀûÀÎ ±â¾ï °ø°£¿¡ ÀڷḦ ÀúÀåÇ쵂 ¹Ýµå½Ã ³ÖÀº ¿ª¼øÀ¸·Î »©±â(LIFO)¸¦ ÇÒ ¼ö ÀÖ´Ù. ±×·¡¼­ ±â¾ï °ø°£À» °ü¸®ÇÏ´Â ´É·Â°ú ³Ö±â¿Í »©±â Á¤µµÀÇ µ¿ÀÛ¸¸ Á¦°øÇÏ¸é ½±°Ô ¸¸µé ¼ö ÀÖ´Ù. ÀÓÀÇ À§Ä¡¸¦ ¾×¼¼½ºÇѴٰųª Áß°£¿¡¼­ »ðÀÔ, »èÁ¦ÇÏ´Â µ¿ÀÛÀº ÇÊ¿äÇÏÁö ¾ÊÀ¸¸ç ½ºÅÃÀÌ À̸¦ ¿ä±¸ÇÏÁöµµ ¾Ê´Â´Ù.

½ºÅÃÀº º¤Åͳª ¸®½ºÆ®¿¡ ºñÇØ¼­´Â Á¦°øÇØ¾ß ÇÒ ±â´É ¸ñ·ÏÀÌ ´Ü¼øÇÑ ÆíÀε¥ ÀÌ·± ÄÁÅ×À̳ʸ¦ óÀ½ºÎÅÍ ´Ù½Ã ¸¸µé ÇÊ¿ä¾øÀÌ ±âÁ¸ ÄÁÅ×À̳ÊÀÇ ±â´ÉÀ» ºô·Á¼­ ±¸ÇöÇÒ ¼ö ÀÖ´Ù. ±â¾ï Àå¼Ò¸¦ °ü¸®ÇÏ´Â ±â´ÉÀº ½ÃÄö½º ÄÁÅ×À̳ʰ¡ ¾ÆÁÖ ÈǸ¢ÇÏ°Ô Á¦°øÇϰí ÀÖÀ¸¹Ç·Î ÀÌ ÄÁÅ×À̳ʵéÀÇ ÈûÀ» ºô¸®°í ½ºÅÃÀº ÇÊ¿äÇÑ ÀÎÅÍÆäÀ̽º¸¸ °ø°³ÇÏ¸é µÇ´Â °ÍÀÌ´Ù. ½ºÅÃÀÇ ÅÛÇø´ Á¤ÀÇ´Â ´ÙÀ½°ú °°´Ù.

 

template<class T, class Cont=deque<T> >

class stack { ... }

 

µÎ °³ÀÇ Àμö¸¦ ¹Þ¾ÆµéÀ̴µ¥ ½ºÅÿ¡ µé¾î°¥ µ¥ÀÌÅÍ Å¸ÀÔ T¿Í ½ºÅÃÀÌ ÀÚ·á ÀúÀåÀ» À§ÇØ »ç¿ëÇÒ ÄÁÅ×ÀÌ³Ê ContÀÌ´Ù. À̶§ Cont´Â ½ºÅÃÀÇ ¿ä¼Ò ŸÀÔ°ú °°Àº ŸÀÔÀ» ÀúÀåÇÏ´Â ÄÁÅ×À̳ʿ©¾ß ÇÑ´Ù. ContÀÇ µðÆúÆ®´Â µ¥Å©·Î µÇ¾î Àִµ¥ ¿øÇÑ´Ù¸é º¤Åͳª ¸®½ºÆ®·Î º¯°æÇÒ ¼öµµ ÀÖ´Ù. ½ÃÄö½º°¡ µ¿ÀûÀÎ ±â¾ï Àå¼Ò °ü¸® ±â´ÉÀ» Á¦°øÇϹǷΠÀÌ·¸°Ô ¸¸µé¾îÁø ½ºÅÃÀÇ Å©±â´Â »ç½Ç»ó ¹«ÇÑÇÏ´Ù°í ÇÒ ¼ö ÀÖ´Ù.

½ºÅÃÀÌ Á¦°øÇϴ ŸÀÔÀº size_type, value_type, container_type ¼¼ °¡Áö ¹Û¿¡ ¾ø´Ù. ÀÌÁß container_typeÀº ½ºÅÃÀÌ ÀÚ·á °ü¸®¸¦ À§ÇØ »ç¿ëÇÏ´Â ±âº» ÄÁÅ×À̳ÊÀÇ Å¸ÀÔÀ̸ç ÅÛÇø´ Àμö Cont¿Í °°Àº ŸÀÔÀÌ´Ù. »ý¼ºÀÚ´Â ´ÙÀ½ Çϳª¹Û¿¡ ¾ø´Ù.

 

explicit stack(const allocator_type& al = allocator_type());

 

Àμö·Î ÇÒ´ç±â¸¦ ¹ÞÀ» ¼ö ÀÖÁö¸¸ µðÆúÆ®°¡ ÁöÁ¤µÇ¾î ÀÖÀ¸¹Ç·Î °á±¹ ÀÌ »ý¼ºÀÚ´Â Àμö¸¦ ÃëÇÏÁö ¾Ê´Â µðÆúÆ® »ý¼ºÀÚ¶ó°í ÇÒ ¼ö ÀÖ´Ù. ½ºÅÃÀº ¸¸µéÀÚ ¸¶ÀÚ ºñ¾î ÀÖ¾î¾ß ÇϹǷΠÃʱâÈ­ÇÏ´Â ¹æ¹ýÀÌ º°´Ù¸¥ °Ô ¾ø´Â ¼ÀÀÌ´Ù. stack<T> s; ½ÄÀ¸·Î ÀúÀåÇÒ Å¸ÀÔ¸¸ ÅÛÇø´ Àμö·Î ÁöÁ¤ÇÏ¸é µÈ´Ù.

½ºÅÃÀÇ °íÀ¯ÇÑ µ¿ÀÛÀº push, pop, top ¼¼ °¡Áö »ÓÀÌ´Ù. ±× ¿ÜÀÇ ºÒÇÊ¿äÇÑ ¿¬»ê, ¿¹¸¦ µé¾î Áß°£¿¡ »ðÀÔ, »èÁ¦ÇѴٰųª ±¸°£ º¹»ç¸¦ ÇÏ´Â ±â´ÉÀº ¼û°Ü¼­ ¾µ ¼ö ¾øµµ·Ï µÇ¾î ÀÖ´Ù. Áß°£¿¡ »ðÀÔ, »èÁ¦°¡ °¡´ÉÇÏ¸é ±×°ÍÀº ´õ ÀÌ»ó ½ºÅÃÀÌ ¾Æ´Ï´Ù. topÀº »ó¼ö, ºñ»ó¼ö ¹öÀüÀÌ µû·Î Á¦°øµÈ´Ù.

 

void push(const T& x);

void pop();

value_type& top();

const value_type& top() const;

 

push´Â ½ºÅÃÀÇ »ó´Ü¿¡ °ªÀ» Ãß°¡Çϴµ¥ Àμö·Î Ãß°¡ÇÒ °ªÀ» Àü´ÞÇÏ¸é µÈ´Ù. ±â¾ï Àå¼Ò°¡ ¹«ÇÑÇØ¼­ Ãß°¡´Â Ç×»ó ¼º°øÇϹǷΠ¸®ÅϰªÀº ¾ø´Ù. popÀº »ó´ÜÀÇ °ªÀ» Á¦°ÅÇÏ¿© ¹ö¸®´Âµ¥ ÀÌ °ªÀº °¡Àå ÃÖ±Ù¿¡ Ãß°¡µÈ °ªÀÌ´Ù. ½ºÅÿ¡ °ªÀÌ ¾ø´Â »óÅ¿¡¼­´Â popÀ» ÇØ¼­´Â ¾ÈµÇ´Âµ¥ popÀº ¸®ÅϰªÀÌ ¾øÀ¸¹Ç·Î ÀÌ·± ¿¡·¯¸¦ ó¸®ÇÒ ¼ö ¾ø´Ù. ´ë½Å ´ëºÎºÐÀÇ ÄÄÆÄÀÏ·¯¿¡¼­ ºó ½ºÅÿ¡ ´ëÇØ popÀ» È£ÃâÇϸé assert°¡ È£ÃâµÇµµ·Ï µÇ¾î ÀÖ´Ù.

topÀº ½ºÅà »ó´ÜÀÇ °ªÀ» ÀÐ¾î ·¹ÆÛ·±½º·Î ¸®ÅÏÇÑ´Ù. »ó¼ö ¹öÀü°ú ºñ»ó¼ö ¹öÀüÀÌ µû·Î ÁغñµÇ¾î ÀÖ´Ù. ½Ã½ºÅÛ ½ºÅÃÀ» ºñ·ÔÇÑ ÀϹÝÀûÀÎ ½ºÅÃÀº °ªÀ» Àд ÇÔ¼ö¿Í ¹ö¸®´Â ÇÔ¼ö°¡ µû·Î Á¦°øµÇÁö ¾ÊÀ¸¸ç pop ÇÔ¼ö¸¦ È£ÃâÇϸé Á¦ÀÏ »ó´ÜÀÇ °ªÀ» Á¦°ÅÇϸ鼭 ¸®ÅÏÇϵµ·Ï µÇ¾î Àִµ¥ STLÀÇ ½ºÅÃÀº Àд ÇÔ¼ö¿Í Á¦°ÅÇÏ´Â ÇÔ¼ö°¡ ºÐ¸®µÇ¾î ÀÖ´Ù. ½ºÅÃÀ̶ó´Â ÀÚ·á ±¸Á¶ÀÇ ¿ø·ÐÀ» ÁöŰÁö ¾Ê°í ÀÖ´Â ¼ÀÀε¥ ÀÓÀÇ Å¸ÀÔ¿¡ ´ëÇØ µ¿ÀÛÇØ¾ß Çϱ⠶§¹®ÀÌ´Ù.

¸¸¾à popÀÌ »ó´Ü ¿ä¼Ò¸¦ Á¦°ÅÇÔ°ú µ¿½Ã¿¡ ·¹ÆÛ·±½º¸¦ ¸®ÅÏÇÑ´Ù°í ÇØ º¸ÀÚ. ÀÌ·¸°Ô µÇ¸é ÀÌ¹Ì Á¦°ÅµÇ¾î ¹ö¸° ¿ä¼Ò¸¦ °¡¸®Å°´Â ¹«È¿ÇÑ ·¹ÆÛ·±½º¸¦ ¸®ÅÏÇÏ´Â ¼ÀÀ̹ǷΠ³í¸®ÀûÀ¸·Î ¸ð¼øÀÌ´Ù. ·¹ÆÛ·±½º°¡ À¯È¿ÇÏ·Á¸é ´ë»óü°¡ °ÇÀçÇÏ°Ô ³²¾Æ ÀÖ¾î¾ß ÇÑ´Ù. »©³»¸é¼­ µ¿½Ã¿¡ ¸®ÅÏÇÏ·Á¸é °ªÀ» ¸®ÅÏÇÏ´Â ¼ö¹Û¿¡ ¾øÀ¸¸ç ½Ã½ºÅÛ ½ºÅÃÀº ½ÇÁ¦·Î °ªÀ» ¸®ÅÏÇÑ´Ù. ±×·¯³ª STLÀÇ ½ºÅÃÀº int, double°°Àº ±âº» ŸÀÔ»Ó¸¸ ¾Æ´Ï¶ó »ç¿ëÀÚ Á¤ÀÇ Å¸ÀÔÀ» Æ÷ÇÔÇÑ ÀÓÀÇÀÇ Å¸ÀÔÀ» ´Ù·ê ¼ö ÀÖ¾î¾ß Çϴµ¥ ÀÌ·± ŸÀÔÀ» °ªÀ¸·Î ¸®ÅÏÇÏ¸é º¹»ç°¡ ¹ß»ýÇϹǷΠ¾öû³­ È¿À² ÀúÇϸ¦ °¨¼öÇØ¾ß ÇÑ´Ù.

±×·¡¼­ °ªÀ» ¸®ÅÏÇÏ´Â °ÍÀº ¹Ù¶÷Á÷ÇÏÁö ¾ÊÀ¸¸ç ¾î·µç ·¹ÆÛ·±½º¸¦ ¸®ÅÏÇØ¾ß ÇÏ´Â °ÍÀÌ´Ù. ¿ä¼Ò°¡ ¾ÆÁ÷ ½ºÅÿ¡ ³²¾Æ ÀÖ´Â »óÅ¿¡¼­ ·¹ÆÛ·±½º¸¦ ¸®ÅÏÇÏ´Â top ÇÔ¼ö¸¦ µû·Î µÎ°í ´Ù »ç¿ëÇÑ ¿ä¼Ò¸¦ Á¦°ÅÇÏ´Â pop ÇÔ¼ö¸¦ µû·Î Á¦°øÇÏ¸é ¹®Á¦°¡ ÇØ°áµÈ´Ù. »ó´ÜÀÇ °ªÀ» ÀÐ°í ¹ö¸®·Á¸é ÀÏ´Ü topÀ¸·Î ¸ÕÀú Àо »ç¿ëÇϰí popÀ¸·Î »©¼­ ¹ö¸®´Â °ÍÀº µû·Î ÇØ¾ß ÇÑ´Ù. ÀϹÝÀûÀÎ ±â´ë¿Í´Â ´Ù¸£°í ´Ù¼Ò ¹ø°Å·ÓÁö¸¸ ´ë½Å¿¡ ÀϹݼºÀ» ¾òÀ» ¼ö ÀÖ´Ù.

ÀÌ ¿Ü¿¡ ½ºÅÃÀÇ Å©±â¸¦ Á¶»çÇÏ´Â size¿Í ½ºÅÃÀÌ ºñ¾î ÀÖ´ÂÁö¸¦ Á¶»çÇÏ´Â empty ¸â¹ö ÇÔ¼ö°¡ Á¦°øµÈ´Ù. ÀÌ ÇÔ¼öµéÀÌ ½ºÅÃÀÌ Á¦°øÇÏ´Â ÇÔ¼öÀÇ ÀüºÎÀÌ´Ù. °£´ÜÇÑ ¿¹Á¦¸¦ ¸¸µé¾î º¸ÀÚ.

 

¿¹ Á¦ : stack

#include <iostream>

#include <stack>

using namespace std;

 

void main()

{

     stack<int> s;

 

     s.push(4);

     s.push(7);

     s.push(2);

 

     while (!s.empty()) {

          cout << s.top() << endl;

          s.pop();

     }

}

 

Á¤¼öÇü ½ºÅà s¸¦ ¸¸µé°í ¼¼ °³ÀÇ °ªÀ» ¹Ð¾î ³ÖÀº ÈÄ ´Ù½Ã »© º¸¾Ò´Ù. topÀ¸·Î Àаí, popÀ¸·Î ¹ö¸®±â¸¦ ½ºÅÃÀÌ ºô ¶§±îÁö ¹Ýº¹ÇÏ¸é µÈ´Ù. ÅÛÇø´ÀÇ µÎ ¹øÂ° Àμö¸¦ ÁöÁ¤Çϸé s¸¦ ´ÙÀ½°ú °°ÀÌ ¼±¾ðÇÒ ¼öµµ ÀÖ´Ù. ¹°·Ð »ç¿ëÇÏ´Â ÄÁÅ×À̳ÊÀÇ Çì´õ ÆÄÀÏÀº ÀûÀýÈ÷ ÀÎŬ·çµåÇØ¾ß ÇÑ´Ù.

 

stack<int, vector<int> > s;

stack<int, list<int> > s;

 

µ¥Å©³ª º¤ÅÍ, ¸®½ºÆ® ¸ðµÎ ½ºÅÃÀ» À§ÇÑ ÀÚ·á °ü¸®´Â ÃæºÐÈ÷ Á¦°øÇϹǷΠ¾î¶² ÄÁÅ×À̳ʸ¦ »ç¿ëÇϳª ±Ù¼ÒÇÑ ¼Óµµ Â÷À̿ܿ¡´Â º°´Ù¸¦ °Ô ¾ø´Ù. ½ÉÁö¾î ÀÌ¹Ì ÀÛ¼ºµÇ¾î ÀÖ´Â ½ºÅÃÀÇ ±âº» ÄÁÅ×À̳ʸ¦ ´Ù¸¥ °ÍÀ¸·Î ¹Ù²ãµµ Àß ÄÄÆÄÀϵǰí ÈǸ¢ÇÏ°Ô µ¿ÀÛÇÑ´Ù. ½ºÅÃÀÌ »ç¿ëÇÏ´Â ÀÎÅÍÆäÀ̽º°¡ ¼¼ ½ÃÄö½º°¡ Á¦°øÇÏ´Â ±â´ÉÀÇ ±³ÁýÇÕÀ¸·Î Á¦ÇѵǾî Àֱ⠶§¹®¿¡ ¸»½éÀÌ »ý±æ ¿©Áö°¡ ¾ø´Ù.

19Àå¿¡¼­ C·Î °è»ê±â ¿¹Á¦¸¦ ¸¸µé¾î º¸¾Ò°í 31Àå¿¡¼­ ´Ù½Ã ½ºÅà ÅÛÇø´À» ÀÌ¿ëÇÑ °è»ê±â¸¦ ¸¸µé¾î º¸¾Ò´Âµ¥ STLÀÇ stack Ŭ·¡½º¸¦ »ç¿ëÇØ¼­ ¸¸µé ¼öµµ ÀÖ´Ù. Áö¸é °ü°è·Î ÀÎÇØ ¼Ò½ºÀÇ ÀϺκθ¸ º¸À̴µ¥ °ü½ÉÀÖ´Â »ç¶÷Àº Á÷Á¢ ¼öÁ¤ÇØ º¸±â ¹Ù¶õ´Ù.

 

¿¹ Á¦ : stlcalc

#include <Turboc.h>

#include <math.h>

#include <stack>

using namespace std;

 

....

 

void MakePostfix(char *Post, const char *Mid)

{

     stack<char> cS;

          ....

              while (!cS.empty() && GetPriority(cS.top()) >= GetPriority(*m)) {

                   *p++=cS.top();

                   cS.pop();

              }

     ....

 

stack Çì´õ ÆÄÀÏÀ» ÀÎŬ·çµåÇÏ°í ½ºÅà ¼±¾ð¹®Àº stack<char> ŸÀÔÀ¸·Î ¼öÁ¤Çϸç PopÀ» pop°ú topÀÇ Á¶ÇÕÀ¸·Î¸¸ º¯°æÇÏ¸é µÈ´Ù. ±×¸®°í GetTop()!=-1À» !empty() È£Ãâ·Î¸¸ ¼öÁ¤ÇÏ¸é µ¿ÀÏÇÏ°Ô µ¿ÀÛÇÏ´Â ½ÇÇà ÆÄÀÏÀ» ¾òÀ» ¼ö ÀÖ´Ù. ¾ð¾î°¡ Á¦°øÇϴ ǥÁØ ¶óÀ̺귯¸®¸¦ »ç¿ëÇßÀ¸¹Ç·Î ÀÌÇØÇϱ⵵ ½±°í ¼Ò½º ºÐ·®µµ ÈξÀ ÁÙÀÏ ¼ö ÀÖ¾î ¿©·¯ ¸ð·Î ÁÁ´Ù.