40-2-´Ù.¸µÅ©ÀÇ Àç¹èÄ¡

¸®½ºÆ®ÀÇ ³ëµå¸¦ ¿¬°áÇÏ´Â ¸µÅ©´Â Æ÷ÀÎÅÍÀ̹ǷΠÁ¶ÀÛÇÒ ¼ö ÀÖ´Â ¿©Áö°¡ ¾ÆÁÖ ¸¹´Ù. ´Ù¸¥ ÄÁÅ×À̳ʿ¡¼­´Â ¿ä¼Ò¸¦ Á÷Á¢ À̵¿ÇØ¾ß ÇÏ´Â ÀÛ¾÷µµ ¸®½ºÆ®´Â ¸µÅ©¸¸ Àç¹èÄ¡ÇÏ¿© ¾ÆÁÖ °£´ÜÇÏ°Ô ºü¸¥ ¼Óµµ·Î ¼öÇàÇÒ ¼ö ÀÖ´Ù. ¸®½ºÆ®¿¡´Â ¸µÅ© Àç¹èÄ¡ÀÇ ÀåÁ¡À» »ì¸± ¼ö ÀÖ´Â ¿©·¯ °¡Áö ¸â¹ö ÇÔ¼öµéÀÌ ÁغñµÇ¾î ÀÖ´Ù.

 

void swap(list& Right);

void reverse( );

void merge(list& Right);

 

ÀÌ ÇÔ¼öµéÀº ¸ðµÎ Àü¿ª ¾Ë°í¸®Áò ÇÔ¼ö·Îµµ Á¦°øµÈ´Ù. ¸®½ºÆ®°¡ ¶È°°Àº À̸§ÀÇ ¸â¹ö ÇÔ¼ö¸¦ Á¦°øÇÏ´Â ÀÌÀ¯´Â ¸µÅ© Àç¹èÄ¡ÀÇ ÀåÁ¡À» È°¿ëÇϸé ÀϹÝÀûÀÎ ¾Ë°í¸®Áòº¸´Ù ÈξÀ ´õ ºü¸£°Ô µ¿ÀÛÇϱ⠶§¹®ÀÌ´Ù. ¿¹¸¦ µé¾î ¸®½ºÆ®³¢¸® ±³È¯ÇÏ´Â swap ÇÔ¼ö´Â ½ÇÁ¦·Î ¿ä¼Ò¸¦ ±³È¯ÇÒ ÇÊ¿ä¾øÀÌ ¸®½ºÆ®³¢¸® head, tail Á¤º¸¸¸ ¹Ù²Ù¸é °£´ÜÇÏ°Ô ±¸ÇöÇÒ ¼ö ÀÖ´Ù.

¾îÂ÷ÇÇ ³ëµåµéÀº ¸Þ¸ð¸®ÀÇ ¾Æ¹« °÷¿¡³ª Èð¾îÁ® ÀÖ°í ¸µÅ©¿¡ ÀÇÇؼ­¸¸ ¿¬°áµÇ¹Ç·Î ½ÃÀÛÁ¡°ú ³¡Á¡ÀÇ ¸µÅ©¸¸ ¼öÁ¤ÇÏ¸é ¼Ò¼Óµµ ½±°Ô ¹Ù²ï´Ù. ¼³»ç ¸®½ºÆ®ÀÇ ¿ä¼Ò°¡ ¹é¸¸°³¸¦ ³Ñ´Â´Ù ÇÏ´õ¶óµµ ºÒ°ú µÎ ½ÖÀÇ Æ÷ÀÎÅ͸¸ ±³È¯ÇÏ¸é ¸ðµç ÀÛ¾÷ÀÌ ¿Ï·áµÈ´Ù. reverseµµ ¿ä¼ÒµéÀ» °Å²Ù·Î Àç¹èÄ¡ÇÏ¿© ÀÏÀÏÀÌ ¿Å±æ ÇÊ¿ä¾øÀÌ next, prev ¸µÅ©¸¦ ¹Ý´ë·Î ¹Ù²Ù±â¸¸ ÇÏ¸é µÇ°í ¸®½ºÆ®³¢¸® º´ÇÕÇÏ´Â mergeµµ ¸¶Âù°¡Áö·Î ¸µÅ©¸¦ Á¶ÀÛÇÏ¿© ÇÑÂÊ ¸®½ºÆ®¸¦ ´Ù¸¥ ÂÊÀÇ ³¡°ú ¿¬°áÇϱ⸸ ÇÏ¸é µÈ´Ù.

ÀÌ ÇÔ¼öµéÀº °£´ÜÇÏ°Ô Å×½ºÆ®ÇØ º¼ ¼ö Àִµ¥ ¾Õ ¿¹Á¦ÀÇ li.remove('l')À» li.reverse() È£Ãâ·Î ¹Ù²Ù¸é ¹®ÀÚµéÀÌ ¹Ý´ë·Î µÚÁýÇô Ãâ·ÂµÉ °ÍÀÌ´Ù. ¹°¸®ÀûÀÎ À̵¿ÀÌ ¹ß»ýÇÏ´Â °ÍÀÌ ¾Æ´Ï¹Ç·Î µÚÁý´Â ¼Óµµµµ ±²ÀåÈ÷ ºü¸£´Ù. swapÀ̳ª mergeµµ µÎ °³ÀÇ ¸®½ºÆ®¸¦ ¸¸µç ÈÄ ±³È¯ ¹× º´ÇÕÇØ º¸¸é ½±°Ô Å×½ºÆ®ÇÒ ¼ö ÀÖ´Ù.

¸µÅ©¸¦ Á¶ÀÛÇÏ´Â °¡Àå ¸ÚÁö°íµµ ½Ç¿ëÀûÀÎ ÇÔ¼ö´Â spliceÀÌ´Ù. splice´Â »õ³¢ÁÙ°°Àº °ÍÀ» ²¿¾Æ¼­ ¼­·Î Àմ´ٴ ÀǹÌÀε¥ ¶æ ±×´ë·Î µÎ °³ÀÇ ¸®½ºÆ®¸¦ ¼­·Î Àհųª ÇÑÂÊ ¿ä¼ÒµéÀ» »Ì¾Æ¼­ ´Ù¸¥ÂÊÀ¸·Î À̵¿½ÃŲ´Ù. ´ÙÀ½ ¼¼ °³ÀÇ ¿øÇüÀÌ Á¤ÀǵǾî ÀÖ´Ù.

 

void splice(iterator it, list& x);

void splice(iterator it, list& x, iterator first);

void splice(iterator it, list& x, iterator first, iterator last);

 

ù ¹ø° ¿øÇüÀº it À§Ä¡¿¡ x¸®½ºÆ®ÀÇ ¸ðµç ¿ä¼ÒµéÀ» À̵¿½ÃŲ´Ù. ¸¶Ä¡ ÀÛÀº »õ³¢ÁÙÀ» Å« »õ³¢ÁÙÀÇ Ç㸮 ºÎ±Ù¿¡ ¿¬°áÇÏ´Â °Í°ú °°´Ù. º¹»ç°¡ ¾Æ´Ñ À̵¿À̹ǷΠx¿¡ ÀÖ´ø ¿ä¼ÒµéÀº ¸ðµÎ Á¦°ÅµÈ´Ù. x´Â È£ÃâÇÏ´Â °´Ã¼¿Í´Â ´ç¿¬È÷ ´Þ¶ó¾ß Çϴµ¥ ÀÚ½ÅÀ» Àڽſ¡°Ô ÀÌÀ» ¼ö´Â ¾ø´Â ³ë¸©ÀÌ´Ù.

µÎ ¹ø° ¿øÇüÀº xÀÇ firstÀ§Ä¡¿¡ ÀÖ´Â ¿ä¼Ò Çϳª¸¸ itÀ§Ä¡·Î À̵¿½ÃŲ´Ù. ¼¼ ¹ø° ¿øÇüÀº ÇϳªÀÇ ¿ä¼Ò°¡ ¾Æ´Ï¶ó ¹Ýº¹ÀÚ ±¸°£À» ÁöÁ¤ÇÏ¿© ÀÏÁ¤ ¹üÀ§ÀÇ ¿ä¼Ò¸¦ ÇѲ¨¹ø¿¡ À̵¿½ÃŲ´Ù´Â Á¡ÀÌ ´Ù¸£´Ù. °°Àº ¸®½ºÆ®³»¿¡¼­ÀÇ À̵¿µµ °¡´ÉÇϹǷΠÀÌ µÎ ¿øÇüÀº x°¡ È£ÃâÇÏ´Â °´Ã¼ ÀÚ½ÅÀ̾ »ó°ü¾ø´Ù. ´ÙÀ½ ¿¹Á¦´Â splice ÇÔ¼öÀÇ ¼¼°¡Áö ¿øÇüÀ» ¸ðµÎ Å×½ºÆ®Çϴµ¥ ÁÖ¼®À» Ç®¾î°¡¸é¼­ ½ÇÇàÇØ º¸ÀÚ.

 

¿¹ Á¦ : splice

#include <iostream>

#include <list>

using namespace std;

 

template<typename C> void dump(const char *desc, C c) { cout.width(12);cout << left << desc << "==> ";

      copy(c.begin(),c.end(),ostream_iterator<typename C::value_type>(cout," ")); cout << endl; }

 

void main()

{

     const char *alpha="abcdefghij";

     const char *num="12345";

     list<char> la(&alpha[0],&alpha[10]);

     list<char> ln(&num[0],&num[5]);

     list<char>::iterator ita,it1,it2;

 

     dump("¾ËÆĺª",la);dump("¼ýÀÚ",ln);

     ita=la.begin();ita++;ita++;

     it1=ln.begin();it1++;it1++;

     it2=ln.end();it2--;

 

     // Àüü À̵¿

     //la.splice(ita,ln);

 

     // ¾ÕÂÊ 2¹ø°¸¸ À̵¿

     // la.splice(ita,ln,it1);

    

     // ±¸°£ À̵¿

     la.splice(ita,ln,ln.begin(),ln.end());

    

     dump("¾ËÆĺª",la);dump("¼ýÀÚ",ln);

}

 

Å©±â 10ÀÇ ¾ËÆĺª ¸®½ºÆ® la¿Í Å©±â 5ÀÇ ¼ýÀÚ ¸®½ºÆ® lnÀ» ¼±¾ðÇØ µÎ°í ÀÌ µÎ ¸®½ºÆ®³¢¸® ¿ä¼ÒµéÀ» À̵¿ÇØ º¸¾Ò´Ù. ita°¡ laÀÇ 2¹ø° ³ëµå¸¦ °¡¸®Å°µµ·Ï ÇØ ³õ°í ÀÌ À§Ä¡¿¡ ln ¸®½ºÆ® Àüü¸¦ À̵¿ÇØ º¸¾Ò´Ù. ½ÇÇà °á°ú´Â ´ÙÀ½°ú °°´Ù.

 

¾ËÆĺª      ==> a b c d e f g h i j

¼ýÀÚ        ==> 1 2 3 4 5

¾ËÆĺª      ==> a b 1 2 3 4 5 c d e f g h i j

¼ýÀÚ        ==>

 

ita ÀÚ¸®ÀÎ cÀ§Ä¡¿¡ ¼ýÀÚ ¸®½ºÆ®ÀÇ ¼ýÀÚµéÀÌ ¸ðµÎ »ðÀԵǾú°í ¼ýÀÚ ¸®½ºÆ®´Â ÅÖ ºñ¾î ÀÖ´Ù.

¾ÕÂÊ 2¹ø°¸¸ À̵¿ÇÏ¸é ¼ýÀÚ ¸®½ºÆ®ÀÇ 3¸¸ ¾ËÆĺª ¸®½ºÆ®·Î ¿Å°ÜÁö¸ç ³ª¸ÓÁö ¿ä¼ÒµéÀº Á¦ÀÚ¸®¸¦ ±×´ë·Î À¯ÁöÇÑ´Ù. lnÀÇ 3ÀÌ b¿Í c»çÀÌ¿¡ ¸µÅ©·Î ¿¬°áµÇ¸ç lnÀÇ 2, 4 ³ëµå³¢¸® ¿¬°áµÉ °ÍÀÌ´Ù.

 

¾ËÆĺª      ==> a b c d e f g h i j

¼ýÀÚ        ==> 1 2 3 4 5

¾ËÆĺª      ==> a b 3 c d e f g h i j

¼ýÀÚ        ==> 1 2 4 5

 

±¸°£ À̵¿Àº ÁöÁ¤ÇÑ ±¸°£¸¸ À̵¿½ÃŲ´Ù. ¿¹Á¦¿¡¼­´Â lnÀº 2¹ø° ¿ä¼ÒÀÎ 3¿¡¼­ºÎÅÍ ³¡¿¡¼­ 1¹ø° ¿ä¼ÒÀÎ 4±îÁö¸¦ À̵¿½ÃÄ×´Ù.

 

¾ËÆĺª      ==> a b c d e f g h i j

¼ýÀÚ        ==> 1 2 3 4 5

¾ËÆĺª      ==> a b 3 4 c d e f g h i j

¼ýÀÚ        ==> 1 2 5

 

Àüü¸¦ À̵¿Çϴ ù ¹ø° ¹öÀü¿¡ ºñÇØ ÀϺθ¸ À̵¿µÈ´Ù´Â Â÷ÀÌ°¡ ÀÖ´Ù.

»ç½Ç Àüü¸¦ À̵¿½ÃÅ°´Â splice(it, x)´Â Àüü ±¸°£À» À̵¿ÇÏ´Â splice(it, x.begin(),x.end())¿Í µ¿ÀÏÇÑ ÇÔ¼ö¶ó°í ÇÒ ¼ö ÀÖ´Ù. ±¸°£À» À̵¿ÇÒ ¶§´Â ±¸°£ÀÇ ½ÃÀÛ°ú ³¡ ÁÖº¯ÀÇ ¸µÅ©µé¸¸ Á¶ÀÛÇÏ¸é µÈ´Ù. Áß°£ÀÇ ³ëµå´Â ¸µÅ©¸¦ Á¶ÀÛÇÏÁö ¾Ê¾Æµµ °°ÀÌ µû¶ó °¥ °ÍÀÌ´Ù.