c °2005, sangjin@kut.ac.kr
„ ę –‰ Ë Ï� ̛ P ò Laboratory 1. Logbook ADT
1
� ×X Ò Ä Ï • \  " f 6 x  &
_ Ăą Ă&#x2019; Ă&#x2020; Â&#x153;X Š <s ' { (abstract data type)\ 9 Œ½ ¨Â&#x2030; ÂłK & Â&#x2018; r : . â&#x20AC;˘ java.util J v t \  e Â? Â&#x201D; H GregorianCalendar 9 tA Ăž Ă&#x203A; Âź\ ÂŚ 6 xK  Â&#x2018; r : . â&#x20AC;˘ B jÂ&#x2122; èĂ&#x2014; Âź\ ÂŚ overloading Â? H~ Ă&#x201C;Z ½ ` O ÂŚÂ&#x2020; Ă&#x2020;_ < vĂ´ Ăž Ă&#x2021; .
2
4 ~ Âż â&#x20AC;˘ 4ĂŠ Z Â&#x2013;0 Ă&#x; AÂ&#x2013; Ă?Ă&#x2022; ÂŞÂĄ ¤ ¡(monthly logbook)s ĂŞ Ă? ø 4_ Z y Â&#x2022;Âą Â&#x152; Â&#x2DC; Ăş _ ° â&#x20AC;Ť`×&#x203A;â&#x20AC;Ź Ăş ÂŚÂ&#x192; Â&#x203A; ar ' ~ ´Ă&#x192; Âşe Â? Â&#x201D; H ÂŤ Ă&#x2018;½ ¨Â&#x203A; ¸s . V) y Â&#x2022;Âą Â&#x152; Â&#x2DC; Ăş Â&#x2019; &x ĂŻ Â&#x2013;_ Ă&#x; Ă&#x192; Âş â&#x20AC;&#x201C; \ â&#x20AC;˘ Â&#x201E; + A& Ăž h Â&#x201C; Â&#x2013; Ă?Ă&#x2022; ÂŞÂĄ ¤ ¡_ ¸ Â&#x2014;_ vÂ&#x201C; Ăž r Ă&#x2030; 6 §þ ÂŁ °  ú . 2002¸ 2 4 Z 3 (3) 10 (2) 17 (2) 24 (0)
3
4 (5) 11 (3) 18 (2) 25 (1)
5 (2) 12 (5) 19 (3) 26 (4)
6 (4) 13 (0) 20 (1) 27 (1)
7 (0) 14 (5) 21 (2) 28 (0)
1 (3) 8 (3) 15 (2) 22 (3)
2 (0) 9 (0) 16 (1) 23 (0)
Logbook ADT â&#x20AC;˘ ½ ¨$
â&#x20AC;Ť×&#x203A;â&#x20AC;Ź à šÂ&#x2122; è 4ĂŠ Z Â&#x2013;0 Ă&#x; AÂ&#x2013; Ă?Ă&#x2022; ª¡ ¤` ÂĄ ÂŚ0 AĂ´ Ă&#x2021;&
Ă&#x192; Ăą º° â&#x20AC;Ť[×&#x203A;â&#x20AC;Ź Ăş t_ Ăž | 9 ½ Ă&#x2039;Ăľ + Â&#x2013; Ă?Ă&#x2022; ª¡ ¤þ ÂĄ Â&#x203A; aÂş ' Â? a² ) Â&#x2DC;§ Ăş 4 â&#x20AC;&#x201C; â&#x20AC;˘ Ă? Â&#x2013;ÂŞ Ă&#x2022;¡ ¤: int[] entry = new int[31]; ÂĄ â&#x20AC;˘ Â&#x2013; Ă?ÂŞ Ă&#x2022;¡ ¤_ ÂĄ 4& Z
Â&#x2DC; Ăą Ă?: int logMonth â&#x20AC;˘ Â&#x2013; Ă?ÂŞ Ă&#x2022;ÂĄ ¡_ ¤ ¸ &
Â&#x2DC; Ăą Ă?: int year â&#x20AC;&#x201C; y Â&#x2022;& Â&#x152;
Ă&#x192; Ăą º° â&#x20AC;ŤÂ&#x201C;×&#x203A;â&#x20AC;Ź Ăş rĂ&#x2026; Ă&#x2030; Ă&#x2019;# Q Â&#x201D; 4_ Z : ¤& ÂŁ
Âą Ăą Â&#x2DC;\ Ăş  K { Â&#x153; Š Â? HÂ&#x2020; Ă&#x201C;s ½ . â&#x20AC;&#x201C; Â&#x2013; Ă?Ă&#x2022; ª¡ ¤\ ÂĄ  e Â? Â&#x201D; HÂ&#x2020; Ă&#x201C;_ ½ Ă&#x192; ÂşÂ? HĂ&#x2026; Ă&#x2019;# Q Â&#x201D; 4\ Z  Ă&#x2DC; Ă&#x201D; . â&#x20AC;˘ Â&#x192; Ă Â&#x2013; Ă&#x; â&#x20AC;&#x201C; Ă&#x2019; t$ q
Ă : public Logbook(int month, int year) b Â&#x201A; 9 Ă?Z : 1 â&#x2030;¤monthâ&#x2030;¤ 12 Ă&#x152; â&#x20AC;˘ â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : monthĂź Ă&#x152; < year ° â&#x20AC;Ť\×&#x203A;â&#x20AC;Ź Ăş  Â&#x2018; Â&#x2013; Ă?Ă&#x2022; ª¡ ¤` ÂĄ ÂŚĂ&#x2019; t$ q
Ă´ Ă Ă&#x2021; . Â&#x2018; Â&#x2013; Ă?Ă&#x2022; ª¡ ¤s ÂĄ ĂŞ Ă?Â&#x2013; ø Ă?Ă&#x2022; ª¡ ¤_ ÂĄ Â&#x2014; ¸Â&#x17D; HÂ&#x2020; Ă&#x201C;_ ½ ° â&#x20AC;Ť×&#x203A;â&#x20AC;Ź Ăş ÂŚ 0Ă&#x153; ` ÂźÂ&#x2013; Ă?Â&#x153; Ăl o Â? H ` â&#x20AC;Ť×&#x203A;â&#x20AC;Ź Ϋ Â&#x2DC;Ă´ Ăş Ă&#x2021; . Ă&#x201E; ´ ò t ¡ §Â&#x201C; Ăş r month ° Ă&#x2030; â&#x20AC;Ť\×&#x203A;â&#x20AC;Ź Ăş  @ /K " fÂ? HÂ&#x2030; ÂłF & 4(Â&#x161; Z ¸Z tÂą Ăž Â&#x2DC; Ăş )\  { K Â&#x153; Š Â? HĂ? Â&#x2013;Ă&#x2022; ª¡ ¤` ÂĄ ÂŚĂ&#x2019; t$ q
Ă´ Ă Ă&#x2021; . Ă&#x201C;Ă&#x2020; ½ Ă&#x2019; : public void putEntry(int day, int value) â&#x20AC;&#x201C; Â&#x2020; b Â&#x201A; 9 Ă?Z : 1 â&#x2030;¤dayâ&#x2030;¤daysInMonth Ă&#x152; â&#x20AC;˘ â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ă&#x2019; Ă&#x152; Ă&#x2026;# QÂ&#x201D; Âą Â&#x2DC;\ Ăş  K { Â&#x153; Š Â? HÂ&#x2020; Ă&#x201C;\ ½  value ° â&#x20AC;Ť×&#x203A;â&#x20AC;Ź Ăş` ÂŚ$  Â&#x153;Ă´ Š Ă&#x2021; . Ă&#x201C;\ ½ | P Ă?: public int getEntry(int day) Ă&#x192; â&#x20AC;&#x201C; Â&#x2020; â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : 1 â&#x2030;¤dayâ&#x2030;¤daysInMonth Ă&#x152;
1
â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ă&#x2026; Ă&#x152; Ă&#x2019;# QÂ&#x201D; Âą Â&#x2DC;\ Ăş  K { Â&#x153; Š Â? HÂ&#x2020; Ă&#x201C;° ½ â&#x20AC;Ť`×&#x203A;â&#x20AC;Ź Ăş ÂŚĂŹ Ă?¨ ø Â&#x160; 8 Ă&#x2026; Ă&#x2019;# Q Â&#x201D; Âą Â&#x2DC;s Ăş Ă&#x201E; ´ ò t ¡ §Ă&#x153; Ăş ÂźÂ&#x20AC; â&#x2C6;&#x2019;1` ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . â&#x20AC;&#x201C; public int month() â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : \ Ă&#x152; 6 O § ÂŁ â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ă? Ă&#x152; Â&#x2013;Ă&#x2022; ª¡ ¤_ ÂĄ 4& Z
Â&#x2DC; Ăą Ă?\ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . â&#x20AC;&#x201C; public int year() â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : \ Ă&#x152; 6 O § ÂŁ â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ă? Ă&#x152; Â&#x2013;Ă&#x2022; ª¡ ¤_ ÂĄ ¸ Â&#x2022; ¸&
Â&#x2DC; Ăą Ă?\ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . â&#x20AC;&#x201C; public int daysInMonth() â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : \ Ă&#x152; 6 O § ÂŁ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Â&#x2013; Ă&#x152; Ă?Ă&#x2022; ª¡ ¤_ ÂĄ 4\ Z  8 xÂą Ăş Â&#x2DC;Ă&#x192; Ăş Âş\ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . daysInMonth(int month) B jÂ&#x2122; èĂ&#x2014; Âź\ ÂŚs 6 xĂ´  Ă&#x2021; . â&#x20AC;˘ â&#x20AC;&#x201C; public int daysInMonth(int month) â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : 1 â&#x2030;¤monthâ&#x2030;¤ 12 Ă&#x152; â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ă? Ă&#x152; Â&#x2013;Ă&#x2022; ª¡ ¤_ ÂĄ 4\ Z  8 xÂą Ăş Â&#x2DC;Ă&#x192; Ăş Âş\ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . Â&#x201E; Â&#x203A; ¸| \  0 AC á &Â&#x20AC; â&#x2C6;&#x2019;1\ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . â&#x20AC;&#x201C; private boolean isLeapYear() â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : \ Ă&#x152; 6 O § ÂŁ â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ă? Ă&#x152; Â&#x2013;Ă&#x2022; ª¡ ¤_ ÂĄ ¸ Â&#x2022; ¸ ĂŽ r¸ s Â&#x20AC; true\ ÂŚĂŹ Ă?¨ ø Â&#x160; 8 Â&#x201C; ÂŚ, m Â&#x20AC; false\ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; .
4
PreLab â&#x20AC;˘ y Â&#x153;_ Š < Ă&#x152;` Â&#x2026;s t  \" f Logbook.java\ ÂŚ ĂŽ r~ Ă&#x17D; Ă&#x192; ¢ a$
à . ¢ a$
K Ă Â? HB jÂ&#x2122; èĂ&#x2014; ÂźÂ? H 6 §þ ÂŁ °  ú . â&#x20AC;&#x201C; public Logbook(int month, int year) â&#x20AC;&#x201C; public int getEntry(int day) â&#x20AC;&#x201C; private boolean isLeapYear() â&#x20AC;˘ ½ ¨Â&#x2030; Âłr & Ă&#x201E; Âť_ Â&#x2020; Ă&#x201C; ½ Â&#x201E; Â&#x203A; ¸| [ t` Ăž ÂŚ Â&#x17D; K 9, Â&#x201E; Â&#x203A; ¸| ` ÂŚĂŤ Â&#x2013;7 Ă&#x; ¤ ĂĄ t 3 w l Â&#x20AC; Â&#x161; ¸Ă&#x20AC; Ă&#x201C;B jr t \ ÂŚÂł Ă°ĂŻ rĂ&#x2DC; Τ Ă&#x153; 4 ÂźÂ&#x2013; Ă?Ă&#x2DC; Τ 4 . â&#x20AC;&#x201C; \ V) void putEntry(int day, int value) public void putEntry(int day, int value){ if(day > daysInMonth() || day < 1) System.out.println("Invalid day of month!"); else entry[day-1] = value; } â&#x20AC;&#x201C; q Ă&#x2019;$ t
Ă \ Œ½ ¨Â&#x2030; ³½ & Ă&#x2030;M + :Ă&#x2026; Ă&#x2019;# Q Â&#x201D; 4& Z
Â&#x2DC; Ăą Ă? Â&#x201E; Â&#x203A; ¸| ` ÂŚĂ&#x2DC; ĂŚ7 ¤ ĂĄ t ¡ §Ă&#x153; Ăş ÂźÂ&#x20AC; GregorianCalendar_ get B j Â&#x2122; èĂ&#x2014; Âź\ ÂŚs 6 x  # Â&#x152;Â&#x2030; ÂłF & 4Ăľ Z ¸ Â&#x2022; ¸&
Â&#x2DC; Ăą Ă?\ ÂŚ% # 3 Q Logbook_ Ă? r! l Q Ă&#x192; Âş[ t` Ăž ÂŚÂ&#x153; Ăl oĂ´ Ă&#x2021; . s M : get B jÂ&#x2122; è Ă&#x2014; ÂźÂ? H 1 4` Z ÂŚ 0, . . ., 12 4Â&#x201C; Z r 11Â&#x2013; Ă&#x2030; Ă?ĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; Â? H ` â&#x20AC;Ť×&#x203A;â&#x20AC;Ź ÂŚĂ&#x201E; Âť _K Ă´ Ă&#x2021; . â&#x20AC;&#x201C; GregorianCalendar\ ÂŚ 6 x  l 0 AK " fÂ? H java.util.GregorianCalendar` ÂŚ importK Ă´ Ă&#x2021; . ¢ ¸ô Ă&#x2021; get B jÂ&#x2122; èĂ&#x2014; Âź_ Â&#x201C; Â&#x2013; Ă? 6 xá  &Â? H # Â&#x152; Q Â&#x153;Âş Š Ă&#x192;[ tÂ&#x201C; Ăž r Calendar 9 Ă&#x2030; tA Ăž Ă&#x203A; Âź\  &
_ Ăą á &# Q e Ă&#x153; Â&#x201D; ÂźĂ&#x2122; ÂźÂ&#x2013; Ă? java.util.CalendarÂ&#x2022; ¸ importK Ă´ Ă&#x2021; . â&#x20AC;&#x201C; isLeapYear() B jÂ&#x2122; èĂ&#x2014; ÂźÂ? H GregorianCalendar_ isLeapYear B jÂ&#x2122; èĂ&#x2014; Âź\ ÂŚ 6 xĂ´  Ă&#x2021; . â&#x20AC;˘ ¢ a$
` Ă ÂŚ Â&#x20AC; 6 § Study 9 ÂŁ tA Ăž Ă&#x203A; Âź\ ÂŚs 6 x  # Â&#x152;_ Â&#x2026;Ă&#x203A; Ÿà Ă&#x201D;Ă´ Ă&#x2021; . class Study { // Records number of hours studied for August 2005. public static void main(String args[]){ int day; // Day loop counter // Number of hours studied for August 2005. Logbook studylog = new Logbook(8, 2005); // Record entries for the 1st, 7th, 11th of August 2003 2
studylog.putEntry(1, 5); studylog.putEntry(7, 3); studylog.putEntry(11, 3); // Output the logbook entries. System.out.println("Month/Year : " + studylog.year() + "." studylog.month() + "."); for(day = 1; day <= studylog.daysInMonth(); day++) System.out.println(day + " : " + studylog.getEntry(day) + "hours"); } // main() } // class Study
â&#x20AC;˘ Test1 9 tA Ăž Ă&#x203A; Âź\ ÂŚ Study 9 tA Ăž Ă&#x203A; Ÿß <Ă&#x201E; Âť > ĂŤ Â&#x2013;[ Ă&#x; t# Ăž Q 6 §° ÂŁ â&#x20AC;Ť[×&#x203A;â&#x20AC;Ź Ăş t` Ăž ÂŚĂ&#x2DC; Τ 4 # Â&#x152;½ ¨Â&#x2030; Âłs & ` ÂŚ Ă&#x2DC; Ă&#x201D;> á &% Â? 3 Ht S Â&#x2030;Â&#x201C; X Ă&#x2021; Ă´ . _ Â&#x2026;Ă&#x203A; Ÿà Ă&#x201D; Â&#x2013;Ă Ă&#x; ĂŠ H² Â&#x2DC; Ăş Ăľ p A ÂłF & Â&#x2030; 2 4(ĂŽ Z r¸ s Â?
Ă&#x201E; â Âş) 2 4(ĂŽ Z r¸ ) Ă&#x201E; ´ ò t ¡ §Â&#x201C; Ăş r² Ă&#x2030; Â&#x2DC; Ăş
Â&#x17D; ² Â&#x2DC; Ăş 2004.1. 2002.6. 2005.3.
² Â&#x2DC;_ Ăş Âą Â&#x2DC;Ă&#x192; Ăş Âş 31
s Â&#x153;Ă&#x201E; Š à º
1997.2. 2004.2. 2002.13.
Ă&#x160;r < ` ÂŚ Â? rĂş Ă&#x2030; â&#x20AC;Ť×&#x203A;â&#x20AC;Ź °s Ă&#x2DC; Τ á 4 &t ¡ §Ă&#x153; Ăş ÂźÂ&#x20AC; Â&#x161; ¸Ă&#x20AC; Ă&#x201C;\ Œš Ă&#x201D; 1 Ă&#x192; Âş&
Ă´ Ăą Ă&#x2021; .
5
In-Lab â&#x20AC;˘ 6 §B ÂŁ jÂ&#x2122; èĂ&#x2014; Âź\ ÂŚ Logbook 9 tA Ăž Ă&#x203A; Âź\  Ă&#x2020; Ă&#x2019; . â&#x20AC;&#x201C; void displayCalendar() â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : \ Ă&#x152; 6 O § ÂŁ â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ă&#x152; 6 §þ ÂŁ °  Â&#x201C; Ăş r+ Ă&#x2030; AI Ăž Â&#x2013; Ă?Â&#x2013; Ă?Ă&#x2022; ª¡ ¤` ÂĄ ÂŚĂ&#x2DC; Τ Ă´ 4 Ă&#x2021; . Sun
Mon
Tue
2002. 2. Wed
Thu
3 (3) 10 (2) 17 (2) 24 (0)
4 (5) 11 (3) 18 (2) 25 (1)
5 (2) 12 (5) 19 (3) 26 (4)
6 (4) 13 (0) 20 (1) 27 (1)
7 (0) 14 (5) 21 (2) 28 (0)
Fri 1 (3) 8 (3) 15 (2) 22 (3)
Sat 2 (0) 9 (0) 16 (1) 23 (0)
displayCalendar\ Œ½ ¨Â&#x2030; Âł & l 0 AK " fÂ? HĂ&#x2026; Ă&#x2019;# QÂ&#x201D; ² Â&#x2DC; Ăş_ '  Ă? P :Âą Â&#x2DC;_ Ăş â&#x20AC;Ť×&#x203A;â&#x20AC;Ź š{ 9 ` Œ¡ Â&#x2DC; Ăş Ă´ Ă&#x2021; . s \ ÂŚ0 AK 6 §þ ÂŁ °  Â&#x201C; Ăş rB Ă&#x2030; jÂ&#x2122; èĂ&#x2014; Âź\ ÂŚÂ&#x20AC; $ ½ ¨Â&#x2030; ³ô & Ă&#x2021; . â&#x20AC;&#x201C; int dayOfWeek(int day) b Â&#x201A; 9 Ă?Z : 1 â&#x2030;¤dayâ&#x2030;¤daysInMonth Ă&#x152; â&#x20AC;˘ â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ă&#x2019; Ă&#x152; Ă&#x2026;# QÂ&#x201D; Âą Â&#x2DC;_ Ăş â&#x20AC;Ť×&#x203A;â&#x20AC;Ź š{ 9 ` ÂŚ ? /Â? H&
Ă&#x192; Ăą Âş\ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . 0Ă&#x201A; Ă&#x2019;' 6 t _ &
Ă&#x192; Ăą º° â&#x20AC;Ť`×&#x203A;â&#x20AC;Ź Ăş ÂŚ 6 x  9, 0Â&#x201C; r Ă&#x2030; â&#x20AC;Ť×&#x203A;â&#x20AC;Ź 9 { š{ ` 9 ÂŚ, 1Ă&#x201A; Ă&#x2019;' 6Â&#x201C; r Ă&#x2030; 4â&#x20AC;Ť×&#x203A;â&#x20AC;Ź Z š{ Ă&#x201A; 9 Ă&#x2019;' Â&#x17E; Ă?â&#x20AC;Ť×&#x203A;â&#x20AC;Ź š{ ` 9 ÂŚ Y VÂ&#x2013; Ă? p ¡ . $ Â&#x20AC; set` ÂŚs 6 x  # Â&#x152;Ă? r! l Q Ă&#x192; Âş logCalendar Ă&#x2026; Ă&#x2019;# Q Â&#x201D; Âą Â&#x2DC;` Ăş ÂŚ o v Â&#x2022; ¸2 ¤[ Â&#x; & O
Ă´ Ăą Ă&#x2021; . Ă&#x2022; ÂŞ 6 §\ ÂŁ  get` ÂŚ s 6 x  # Â&#x152;â&#x20AC;Ť×&#x203A;â&#x20AC;Ź š{ 9 ` Œ¡ Â&#x2DC; Ăş p ¡ . s M : getÂ&#x201C; r 1Ă&#x201A; Ă&#x2030; Ă&#x2019;' 7 t _ ° â&#x20AC;Ť`×&#x203A;â&#x20AC;Ź Ăş ÂŚĂŻ r Â? H \ â&#x20AC;Ť×&#x203A;â&#x20AC;Ź  Ă&#x201E; Âť_ K Ă´ Ă&#x2021; . tA Ăž Ă&#x203A; Âź\ ÂŚ Study 9 tA Ăž Ă&#x203A; Ÿß <Ă&#x201E; Âť > ĂŤ Â&#x2013;[ Ă&#x; t# Ăž Q 6 §° ÂŁ â&#x20AC;Ť[×&#x203A;â&#x20AC;Ź Ăş t` Ăž ÂŚĂ&#x2DC; Τ 4 # Â&#x152;½ ¨Â&#x2030; Âłs & ` ÂŚ Ă&#x2DC; Ă&#x201D;> á &% Â? 3 Ht â&#x20AC;&#x201C; Test2 9 Â&#x2030; X S Â&#x201C; Ă´ Ă&#x2021; .
3
_ Û ¼à Ô í ß é H² ú õ p A ³F & 2 4(î Z r¸ s
Ä â º) 2 4(î Z r¸ )
² ú 2001.4. 1998.12. 2005.12.
² ú_ ' Í P :± _ ú כ ¹{ 9 כ 9 { ¹{ 9 oכ ¹{ 9 ºכ Ã ¹{ 9
2002.2. 2004.2.
Fכ K ¹{ 9 כ 9 { ¹{ 9
s Ä © »Á º
Êr < ` ¦ r° É כs ú Ø ¦§ ÷ 4 &t · §Ü ú ¼ ¸À Ó\ ¦¹ Ô 1 à º&
ô ñ Ç . • \ " f H° ú rs É 2 §_ £ j B è× ¼\ ¦# Q> h&
_ ñ ½ ÉÃ + ºe . Ó t ü rs : M :y B j è× ¼_ " f"
î r² É ú ô Ç . 6 § £ ¦ `½ ¨ ³ & . – Logbook() b 9 ÐZ : \ Ì 6 O §. £ • • Ö ³ ÐZ : Ì l rÒ : tí q
$ Ð" f, ³F & ² \ ú K { © H ÐÕ ª· ¤` ¡ ¦Ò t$ q
í # ï r . – void putEntry(int value) • b 9 ÐZ : Ð Ì Õ ª· ¤s ¡ ³F & 4 Z Ð[ & O
÷ ñ &# Qe # Q ô Ç . • Ö ³ ÐZ : ¸ Ì Z tú þ ± \ K { © H Ó\ ½ value ° כ ú` ¦$ ô © Ç . • # Q> h_ Ъ Õ· ¤` ¡ ¦ н Ëu + ¦z · . s \ ¦0 AK 6 §õ £ ° ú r É í ` ß ¦ Logbook 9 tA þ Û ¼\ Æ Ò ô Ç . – void plus(Logbook aBook) • b 9 ÐZ : Ð Ì Õ ª· ¤[ ¡ ts þ ° ú r² É ú Ð[ & O
÷ ñ &# Qe # Q ô Ç . Ö ³ ÐZ : abook\ Ì e Hy Ó_ ½ ° `כ ú ¦s ÐÕ ª· ¤\ ¡ K { © Hy Ó\ ½ 8ô Ç . •
6
Post-Lab • GregorianCalendar\ ¦s 6 x t · § ú ¦î r¸ #  Ò\ ¦> í ß H 6 §B £ j è× ¼\ ¦½ ¨ ³ & . private boolean leapYear(int year) ³ 2à Ô. î r¸ s ÷ &l 0 Aô Ç ¸| ¸ 4_ C à ºs t ë 100_ ß C à º H m . – ¸ – ¸ ¸ 400_ C à ºs . • GregorianCalendar\ ¦s 6 x t · § ú ¦ private int dayOfWeek(int day)\ ¦½ ¨ ³ & . ³ 2à Ô. 1900¸ 1 4 1{ Z 9 r É 4כ Z ¹{ s 9 H z ´` ¦s 6 xô Ç .
4
c °2005, sangjin@kut.ac.kr
Â&#x201E; Ă&#x201E;Â&#x2122; Â&#x2013;Â&#x2030; ÂŹĂ&#x2039; ĂŹĂ? ĂŚÂ&#x203A; P ò Laboratory 2. String ADT
1
Â? Ă&#x2014;X Ă&#x2019; Ă&#x201E; ĂŹ â&#x20AC;˘ s Ă&#x161; Ă&#x201D; Q o\  " f] j/ N B Â? H String 9 tA Ăž Ă&#x203A; Âź_ ĂŠ Â&#x2013;& Ă&#x; ` h Œ¡ Â&#x2DC; Ăş Â&#x2018; r : . tA Ăž Ă&#x203A; Âź\ ÂŚS Â&#x2030; X Â&#x153;K Š Â&#x2018; r : . â&#x20AC;˘ String 9
2
4 ~ Âż â&#x20AC;˘ ĂŤ H \ Â&#x201C; P rĂĄ Ă&#x2030; Ă&#x201D;Â&#x2013; Ă?Ă&#x2022; ÂŞA b ç
½ Ă&#x2030;M + :  Â&#x153;´ Š §s Ăş 6 x  Â? H { Ă&#x2014; 9 ĂŚ s . \  Â? HĂŤ H \ P { 9 s Â&#x201D; rF > t ĂŤ Â&#x2013;& Ă&#x;
Ăą Ă&#x192; Âş\ ÂŚ Ă&#x2019; ÂŚM : 6 x  Â? H intĂź <°  Â&#x201C; Ăş r Ă&#x2030; { 9 s 2 §s ÂŁ ^ Â&#x2030;\  Â? H\ O . @ /Â&#x2019; \  Í H \ Âź P o # > % Â&#x192;o ½ Ă&#x2030;Ă&#x192; + Âşe Â&#x201D; Â&#x2022; ¸2 ¤ Strings Â&#x; Â? H9 tA Ăž Ă&#x203A; Âź \ ÂŚ s Ă&#x161; Ă&#x201D; Qo \ ÂŚ: xK Â&#x; ] j/ NĂ´ B Ă&#x2021; . â&#x20AC;˘ StringÂ&#x201C; r9 Ă&#x2030; tA Ăž Ă&#x203A; Âźs Ă&#x2122; ÂźÂ&#x2013; Ă?" Âśr ĂŠ { 9 ` ÂŚ Ă&#x20AC; Ă&#x2019;Â? H Ăľ â&#x20AC;Ť×&#x203A;â&#x20AC;Ź Â? H 6 § ÂŁĂľ °  Â&#x201C; Ăş r Ă&#x2030; s & s h e Â&#x201D; . â&#x20AC;&#x201C; ĂŤ H \ Â&#x201C; P r Ă&#x2030;q Â&#x201C; §Â&#x192; Ă Â&#x2013; Ă&#x; \ ÂŚs 6 x  # Â&#x152;q Â&#x201C; §½ Ă&#x2030;Ă&#x192; + Âş\ Â&#x201C; O ÂŚ, String 9 tA Ăž Ă&#x203A; Âź\  " f] j/ N B Â? H 6 §¿ ÂŁ ÂşB jÂ&#x2122; èĂ&#x2014; Âź\ ÂŚ s 6 x  # Â&#x152;q Â&#x201C; §K Ă´ Ă&#x2021; . â&#x20AC;˘ boolean equals(Object other) â&#x20AC;˘ int compareTo(String other) ĂŤ H \ _ P ? /6 xÂ&#x201C;  r Ă&#x2030;
½ â Ă&#x2030;Ă&#x192; + Âş\ O . 7 ¤, String 9 ÂŁ tA Ăž Ă&#x203A; Âź_ Â&#x201C; Ă&#x203A; ÂźÂ&#x2021; Ă&#x203A; ÂźÂ? HĂ´ Ă&#x2021; ? /Ă&#x201A; Ă&#x2019; Â&#x153;I Š \ ÂŚ[ & O
Ăą Â&#x20AC; Ă&#x2022; ÂŞ Â&#x153; Š â&#x20AC;&#x201C; I \ ÂŚÂ
½ â Ă&#x2030;Ă&#x192; + Âş\ Â? O H¡ ÂŁ >[ o cW Ă&#x2039; Â&#x2026;(immutable object)s . s M :ĂŤ H\  Í H \ _ P ? /6 x`  ŒĂ&#x192; Âşr Â&#x2013; Ă?Â
K â ´ Â&#x20AC; òĂ&#x2013; ÂŚ$
s Ă b # Â? QÂ&#x201D; . " fĂŤ H \ _ P ? /6 x` Â ÂŚĂ&#x192; Âş rÂ&#x2013; Ă?Â
K â � H
Ă&#x201E; â Âş\  Â? H String 9 tA Ăž Ă&#x203A; ÂźÂ&#x2DC; Ă? H StringBuffer 9 Â? tA Ăž Ă&#x203A; Âź\ ÂŚ 6 x  Â? H s â&#x20AC;Ť×&#x203A;â&#x20AC;Ź 8 | Ă?f Ă&#x192; Â&#x201D; . â&#x20AC;&#x201C; \  " fĂ&#x152; o^ Â? Â&#x2030;Â? HÂ&#x2DC; Ă?: x new Â&#x192; Â&#x; Ă Â&#x2013; Ă&#x; \ ÂŚs 6 x  # Â&#x152;Ă&#x2019; t$ q
K Ă t ĂŤ Â&#x2013; String 9 Ă&#x; tA Ăž Ă&#x203A; ÂźÂ? H\ VĂź @& Ă&#x153; h ÂźÂ&#x2013; Ă? 6 x  t ¡ Ăş §Â&#x201C; ÂŚĂ&#x2019; t$ q
½ Ă Ă&#x2030;Ă&#x192; + Âşe Â&#x201D; . String name = "Sangjin Kim"; â&#x20AC;˘ â&#x20AC;?Sangjin Kimâ&#x20AC;?Ă&#x153; ÂźÂ&#x2013; Ă?Â&#x153; Ăl oÂ? a name Ă&#x152; ) o^ Â? Â&#x2030;\  Â? rĂŤ Ă&#x2030; H \ ` P ÂŚ@ /{ 9 Â&#x20AC; l Â&#x201D; r â&#x20AC;?Sangjin Kimâ&#x20AC;? ĂŤ > H \ Â&#x201C; P r garbage Ă&#x2030; collection_ @ / Â&#x153;s Š Â? a ) . â&#x20AC;˘ String 9 tA Ăž Ă&#x203A; ÂźÂ? HÂŞ Ă&#x2022; _ â&#x20AC;Ť×&#x203A;â&#x20AC;Ź ´ Us \ ÂŚĂŹ Ă?¨ ø Â&#x160; 8 Â? H length() Â? HB jÂ&#x2122; èĂ&#x2014; Âź\ ÂŚ] j/ NĂ´ B Ă&#x2021; .
3
String ADT â&#x20AC;˘ String ADTÂ? H java.lang J v t \ ÂŚ: xK Â&#x; ] j/ Ná B &Â? H ADTs . â&#x20AC;˘ ½ ¨$
â&#x20AC;Ť×&#x203A;â&#x20AC;Ź à šÂ&#x2122; è: ĂŤ H _ | ½ 9 Ă&#x2039; + â&#x20AC;˘ ½ ¨Â&#x203A; ¸: ĂŤ H \ ` P Œ½ ¨$
Ă Â? HĂŤ H Â? HÂ&#x201A; + AĂ Ăž H" f\ ÂŚ Â&#x201D; . ĂŤ H _ 0 Au Â? H 0Ă&#x201A; Ă&#x2019;' r  Â&#x2022;Â? Â&#x152; a ) . â&#x20AC;˘ Â&#x192; Ă Â&#x2013; Ă&#x; â&#x20AC;&#x201C; l Â&#x2018; rĂ&#x2019; : t$ q
Ă : String() â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : / Ă&#x152; ?6 xs  Â&#x2018; D h String Ă&#x152; o^ Â? Â&#x2030;\ ÂŚĂ&#x2019; t$ q
Ă´ Ă Ă&#x2021; . t$ q
Ă : String(char[] charSeq) â&#x20AC;&#x201C; Ă&#x2019; â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ă&#x2019; Ă&#x152; Ă&#x2026;# QÂ&#x201D; ĂŤ H \ ` P ÂŚ o v Â? H String Ă&#x152; o^ Â? Â&#x2030;\ ÂŚĂ&#x2019; t$ q
Ă´ Ă Ă&#x2021; . â&#x20AC;&#x201C; Ă&#x2019; t$ q
Ă : String(String str) â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ă&#x2026; Ă&#x152; Ă&#x2019;# QÂ&#x201D; String Ă&#x152; o^ Â? Â&#x2030; strĂľ ? /6 xs  °  Â&#x201C; Ăş rĂŤ Ă&#x2030; H \ ` P ÂŚ o v Â? HD hÂ&#x2013; Ă?ĂŽ rĂ&#x152; o^ Â? Â&#x2030;\ ÂŚĂ&#x2019; t$ q
Ă´ Ă Ă&#x2021; . h\ D v> Ă&#x2019; t$ q
Â? Ă aĂ&#x152; ) o^ Â? Â&#x2030;Â? Hl Â&#x201D; r strĂľ > ? /6 xs  °  t Ăş ĂŤ Â&#x2013;" Ă&#x; fÂ&#x2013; Ă? Â? r4 Ă&#x2030; ¤ Â&#x; Â&#x2018; r` : ÂŚ o v Â&#x201C; ÂŚe Â&#x201D; . 1
â&#x20AC;&#x201C; char charAt(int n) â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : 0â&#x2030;¤n<length() Ă&#x152; â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : n Ă&#x152; P :ĂŤ H \ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . â&#x20AC;˘ \ VĂź @: StringIndexOutOfBoundsException â&#x20AC;&#x201C; ĂŤ H \ q P Â&#x201C; §: int compareTo(String str) â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : str!=null Ă&#x152; â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z :  Ă&#x152; ĂąĂ&#x2DC; ÂŚÂ? aĂ&#x152; ) o^ Â? Â&#x2030;_ ĂŤ H \ ? P /6 xs  Â&#x201E; Ă H" f\  " f strÂ&#x2DC; Ă? ¡ ÂĄ\ Ăş  e Ă&#x153; Â&#x201D; ÂźÂ&#x20AC; 6 §Ă&#x192; ÂŁ Âş\ ÂŚ, °  Ă&#x153; Ăş ÂźÂ&#x20AC; 0` ÂŚ, '\ +  e Ă&#x153; Â&#x201D; ÂźÂ&#x20AC; Â&#x20AC; Â&#x153;Ă&#x192; ÂŞ Âş\ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . VĂź @: NullPointerException â&#x20AC;˘ \ â&#x20AC;&#x201C; boolean equals(String rightstr) â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z :  Ă&#x152; ĂąĂ&#x2DC; ÂŚÂ? aĂ&#x152; ) o^ Â? Â&#x2030;_ ĂŤ H \ ? P /6 xs  rightstr Ă&#x152; o^ Â? Â&#x2030;_ ĂŤ H \ ? P /6 xĂľ  °  Ă&#x153; Ăş ÂźÂ&#x20AC; true\ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . â&#x20AC;&#x201C; String substring(int start) â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : 0 â&#x2030;¤start<length() Ă&#x152; â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : start 0 Ă&#x152; Au Ă&#x201A; Ă&#x2019;' l Â&#x201D; rĂŤ > H \ = P Q ĂĽ t Â&#x2013; Ă?½ ¨$
Â? Ă aD ) h String Ă&#x152; o^ Â? Â&#x2030;\ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . â&#x20AC;˘ \ VĂź @: StringIndexOutOfBoundsException â&#x20AC;&#x201C; String substring(int start, int end) b Â&#x201A; 9 Ă?Z : 0 â&#x2030;¤start<length(), end<length(), start<end Ă&#x152; â&#x20AC;˘ â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : start 0 Ă&#x152; Au Ă&#x201A; Ă&#x2019;' end-1 t Â&#x2013; Ă?½ ¨$
Â? Ă aD ) h String Ă&#x152; o^ Â? Â&#x2030;\ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . â&#x20AC;˘ \ VĂź @: StringIndexOutOfBoundsException â&#x20AC;&#x201C; int indexOf(int ch) â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ă&#x2019; Ă&#x152; Ă&#x2026;# QÂ&#x201D; ĂŤ H ch  ùĂ&#x2DC; ÂŚÂ? aĂ&#x152; ) o^ Â? Â&#x2030;_ ĂŤ H \ \ P  " f% Â&#x192;6 §Ă&#x153; ÂŁ ÂźÂ&#x2013; Ă?1 x p Â&#x153; Š Â? H0 Au \ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . Ă&#x2026; Ă&#x2019; QÂ&#x201D; # ĂŤ H ĂŤ H \ \ P  1 x p Â&#x153; Š t ¡ §Ă&#x153; Ăş ÂźÂ&#x20AC; â&#x2C6;&#x2019;1` ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . â&#x20AC;&#x201C; int indexOf(int ch, int start) â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : 0 â&#x2030;¤start<length() Ă&#x152; â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ă&#x2026; Ă&#x152; Ă&#x2019;# QÂ&#x201D; ĂŤ H ch  ùĂ&#x2DC; ÂŚÂ? aĂ&#x152; ) o^ Â? Â&#x2030;_ ĂŤ H \ \ P  " f% Â&#x192;6 §Ă&#x153; ÂŁ ÂźÂ&#x2013; Ă?1 x p Â&#x153; Š Â? H0 Au \ ÂŚĂŹ Ă?¨ ø Â&#x160; 8 Â? HX < Â&#x17D; o` Â? Ă&#x2019; ÂŚ% Â&#x192;6 §Ă&#x201A; ÂŁ Ă&#x2019;' t ¡ §Â&#x201C; Ăş ÂŚ start 0 Au Ă&#x201A; Ă&#x2019;' Ă´ Ă&#x2021; . Ă&#x2026; Ă&#x2019;# Q Â&#x201D; ĂŤ H ĂŤ H \ \ P  1 x p Â&#x153; Š t ¡ §Ă&#x153; Ăş ÂźÂ&#x20AC; â&#x2C6;&#x2019;1` ÂŚ Ă?¨ ø ĂŹ Â&#x160;Ă´ 8 Ă&#x2021; .
4
PreLab â&#x20AC;˘ < Ă&#x152;` Â&#x2026;s t \  Ă&#x2019; Ă&#x2026;# QÂ&#x201D; TestString 9 tA Ăž Ă&#x203A; Âź\  l Â&#x201D; r String ADT\ > ÂŚs 6 x  # Â&#x152; 6 §B ÂŁ jÂ&#x2122; èĂ&#x2014; Âź[ t` Ăž Œ½ ¨Â&#x2030; Âł & # Â&#x152; . â&#x20AC;&#x201C; static void showStructure(String str) â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : str!=null Ă&#x152; â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : ĂŤ Ă&#x152; H \ \ P  Â&#x; ĂÂ&#x2020; Ă&#x160;Â? < aĂŤ ) H \ ÂŚ m Â&#x201D; Y VĂ? Â&#x2013;Ă&#x2DC; Τ Ă´ 4 Ă&#x2021; . jÂ&#x2122; èĂ&#x2014; Âź\ ÂŚs 6 x  # Â&#x152;½ ¨Â&#x2030; ³ô & Ă&#x2021; . â&#x20AC;˘ charAt B â&#x20AC;&#x201C; static boolean lessThan(String leftstr, String rightstr) â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : leftstr!=null, rightstr!=null Ă&#x152; Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ă&#x2026; Ă&#x152; Ă&#x2019;# Q Â&#x201D; Âż ºÍ H \ ` P ÂŚq Â&#x201C; § # Â&#x152; leftstrs rightstrÂ&#x2DC; Ă? Â&#x201E; Ă H" f Â&#x153;¡ Š ÂĄ\ Ăş  e Ă&#x153; Â&#x201D; ÂźÂ&#x20AC; â&#x20AC;˘ true\ ÂŚĂŹ Ă?¨ ø Â&#x160; 8 Â&#x201C; ÂŚ, °  ú + '\  e Ă&#x153; Â&#x201D; ÂźÂ&#x20AC; false\ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . jÂ&#x2122; èĂ&#x2014; Âź\ ÂŚs 6 x  # Â&#x152;½ ¨Â&#x2030; ³ô & Ă&#x2021; . â&#x20AC;˘ compareTo B â&#x20AC;&#x201C; static boolean greaterThan(String leftstr, String rightstr) â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : leftstr!=null, rightstr!=null Ă&#x152; â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ă&#x2026; Ă&#x152; Ă&#x2019;# Q Â&#x201D; Âż ºÍ H \ ` P ÂŚq Â&#x201C; § # Â&#x152; leftstrs rightstrÂ&#x2DC; Ă? Â&#x201E; Ă H" f Â&#x153;+ Š '\  e Ă&#x153; Â&#x201D; ÂźÂ&#x20AC; true\ ÂŚĂŹ Ă?¨ ø Â&#x160; 8 Â&#x201C; ÂŚ, °  ú ¡ ÂĄ\ Ăş  e Ă&#x153; Â&#x201D; ÂźÂ&#x20AC; false\ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . jÂ&#x2122; èĂ&#x2014; Âź\ ÂŚs 6 x  # Â&#x152;½ ¨Â&#x2030; ³ô & Ă&#x2021; . â&#x20AC;˘ compareTo B â&#x20AC;&#x201C; static int strCharCount(String inputstr, char ch) â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : inputstr!=null Ă&#x152; 2
â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ă&#x2019; Ă&#x152; Ă&#x2026;# QÂ&#x201D; inputstr\  " f ch ĂŤ H 1 x p Â&#x153; Š Â? H rĂ&#x192; Âş\ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . â&#x20AC;˘ indexOf B jÂ&#x2122; èĂ&#x2014; Âź\ ÂŚs 6 x  # Â&#x152;½ ¨Â&#x2030; ³ô & Ă&#x2021; . â&#x20AC;&#x201C; static String findSubstring(String inputstr, int start, int count) â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : 0 â&#x2030;¤start<inputstr.length(), count>0, Ă&#x152; start+count<inputstr.length(), inputstr!=null â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : inputstr\ Ă&#x152;  " f startĂ&#x201A; Ă&#x2019;' count ĂŤ Â&#x2013; Ă&#x; p u_ ĂŤ H Â&#x2013; Ă?½ ¨$
Â? Ă aD ) hĂ&#x152; o^ Â? Â&#x2030;\ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . Â&#x201E; ¸| Â&#x203A; \  A 0C á &Â&#x20AC; & ] h Ă´ X Ă&#x2021;Ă&#x201A; Ă&#x2019;ĂŹ rĂŤ H \ ` P ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . 7 ¤, start 0Â&#x2DC; ÂŁ Ă?  Â&#x2022;Ă&#x153; Â&#x152; ÂźÂ&#x20AC; 0° â&#x20AC;Ť×&#x203A;â&#x20AC;ŹĂ&#x153; Ăş ÂźÂ&#x2013; Ă?[ & O
Ăą Â&#x201C; ÂŚ, start+count>inputstr.length()s Â&#x20AC; startĂ&#x201A; Ă&#x2019;' ĂŤ H \ = P Q ĂĽ t Â&#x2013; Ă?½ ¨$
Â? Ă aĂ&#x201A; ) Ă&#x2019;ĂŹ rĂŤ H \ ` P ÂŚ Ă?¨ ø ĂŹ Â&#x160;Ă´ 8 Ă&#x2021; . jÂ&#x2122; èĂ&#x2014; Âź\ ÂŚs 6 x  # Â&#x152;½ ¨Â&#x2030; ³ô & Ă&#x2021; . â&#x20AC;˘ subString B
5
In-Lab 1 â&#x20AC;˘ ĂĄ Ă&#x201D;Â&#x2013; Ă?Ă&#x2022; ÂŞA b
Â? ç ĂŻĂ&#x2014; Âź\ ÂŚ(
Â&#x17D; { 9 l 0 AK " fÂ? HĂĄ Ă&#x201D;Â&#x2013; Ă?Ă&#x2022; ÂŞĂ? Â&#x203A;Â? Ăž ĂŻĂ&#x2014; Âź\ ÂŚĂŹ r$ ½ 3 Ă&#x2030;Ă&#x192; + Âşe # Â&#x201D; Q Ă´ Ă&#x2021; . ĂŹ r$ ` 3 ÂŚ l 0 AK " fÂ? H ĂĄ Ă&#x201D;Â&#x2013; Ă?Ă&#x2022; ÂŞĂ? Â&#x203A;` Ăž ÂŚÂ? Ho 7 & ĂŠ h Â&#x2013;0 Ă&#x; AÂ&#x201C; Ă? Â&#x17E; HĂ&#x153; ÂźÂ&#x2013; Ă?Ă&#x201E; ÂşÂ&#x201A; ž Âş# Q Ă´ Ă&#x2021; . \ V) if(grade >= 90) return â&#x20AC;&#x2122;Aâ&#x20AC;&#x2122;; 0 AĂź <°  Â&#x201C; Ăş r Ă&#x2030; Â? ĂŻĂ&#x2014; Âź e Ă&#x153; Â&#x201D; ÂźÂ&#x20AC; (
Â&#x17D; { 9 QÂ? HĂ&#x201E; ÂşÂ&#x201A; s Â? ĂŻĂ&#x2014; Âź\ ÂŚ 6 §þ ÂŁ °  Â&#x201C; Ăş rÂ&#x17E; Ă&#x2030; Ă? HĂ&#x153; ÂźÂ&#x2013; Ă?½ ¨Ï rĂ´ Ă&#x2021; . "if", "(", "grade", ">=", "90", ")", "return" "â&#x20AC;&#x2122;", "A", "â&#x20AC;&#x2122;", ";" â&#x20AC;˘ \  " fÂ&#x17E; Ă? H _ĂŹ ro Â? H java.io J v t \  e Â? Â&#x201D; H StringTokenizer 9 tA Ăž Ă&#x203A; Âź\ ÂŚs 6 x½  Ă&#x2030;Ă&#x192; + Âşe Â&#x201D; . Ă?H ` ÂŚĂŹ ro l Â&#x201E; \ Â
{ ¢ 9 ¸Â? Hv Â&#x2DC; Ă?Ă&#x2014; ÂźÂ&#x2013; Ă?Ă&#x201A; Ă&#x2019;' ĂŹ ro ½ Ă&#x2030;/ + ?6 x`  Œ~ Ă&#x17D; Ă&#x192; 9, v Â&#x2DC; Ă?Ă&#x2014; Ÿ¢ ¸Â? H
{ 9 Â&#x2013; Ă?Ă&#x201A; Ă&#x2019;' X <s â&#x20AC;˘ Â&#x17E; ' \ ÂŚ{ 9 ` ÂŚM :\  Â? H InputStreamReader 9 tA Ăž Ă&#x203A; Âź\ ÂŚ 6 xĂ´  Ă&#x2021; . InputStreamReader reader = new InputStreamReader(System.in); §Â&#x201C; Ăş rX Ă&#x2030; <s ' \ ÂŚ{ 9 # Q ½ Ă&#x2030; +
Ă&#x201E; â Âş\  Â? H! Q( a A` ÂŚ 6 x  Â? H BufferedReader 9 tA Ăž Ă&#x203A; Âź\ ÂŚ 6 x  Â? H s â&#x20AC;Ť×&#x203A;â&#x20AC;Ź | Ă?f Ă&#x192; Â&#x201D; â&#x20AC;˘ ´ . BufferedReader bufReader = new BufferedReader(new InputStreamReader(System.in)); â&#x20AC;˘
{ 9 Â&#x2013; Ă?Ă&#x201A; Ă&#x2019;' X <s ' \ ÂŚ{ 9 Â&#x201C; ÂŚ Â&#x20AC; FileInputStream 9 tA Ăž Ă&#x203A; Âź\ ÂŚs 6 xĂ´ Â Ă&#x2021; .
{ 9 \ Â e Â? Â&#x201D; HX <s ' \ ÂŚ{ l 9 0 A K " fÂ? H
{ ` 9 ÂŚÂ&#x20AC; $ \ # P Q 9, 6 xs  ¢ aÂŤ Ă&#x2018;á &Â&#x20AC; { Â&#x2014; Â&#x152; Ă´ Ă&#x2021; . FileInputStream inFile; try{ inFile = new FileInputStream("1.txt"); } catch(FileNotFoundException e){ System.out.println("Error Openning a file"); System.exit(0); } BufferedReader bufReader = new BufferedReader(new InputStreamReader(inFile)); ... inFile.close();
â&#x20AC;˘ BufferedReaderÂ? HÂż Âşh >_ { 9 l B jÂ&#x2122; èĂ&#x2014; Âź readĂź < readLine` ÂŚ] j/ NĂ´ B Ă&#x2021; . readÂ? HĂŤ H ĂŠ Â&#x2013;0 Ă&#x; AÂ&#x2013; Ă?{ Â&#x201C; 9 ÂŚ, readLineÂ&#x201C; rĂ&#x2014; Ă&#x2030; ÂŚĂŠ Â&#x2013;0 Ă&#x; AÂ&#x2013; Ă?{ 9 Â? H . readÂ? H int\ ÂŚĂŹ Ă?¨ ø Â&#x160; 8 Ă&#x2122; ÂźÂ&#x2013; Ă? charÂ&#x2013; Ă? { 9  ¨ Â&#x160;K 8 Ă´ Ă&#x2021; . readLineÂ&#x201C; r{ Ă&#x2030; Â&#x201C; 9 r Ă&#x2030; ÂŚ` Ă&#x2014; ÂŚĂŤ H \ Â&#x2013; P Ă?ĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . char readChar; String readStr; ... char readChar = (char)bufReader.read(); ... String readStr = bufReader.readLine(); v t \  " f] j/ Ná B &Â? H9 tA Ăž Ă&#x203A; Âź â&#x20AC;˘ StringTokenizer ADT: java.util J 3
â&#x20AC;&#x201C; Ă&#x2019; t$ q
Ă : StringTokenizer(String str) â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : ĂŤ Ă&#x152; H \ str` P ÂŚÂ&#x17E; Ă?H Z Â&#x2013; > Ă? Ă? tD Ăź hÂ&#x2013; Ă?ĂŽ r StringTokenizer\ ÂŚĂ&#x2019; t$ q
Ă´ Ă Ă&#x2021; . â&#x20AC;˘ l : Â&#x2018;& r Ă&#x153; h ÂźÂ&#x2013; Ă? 6 x  Â? HĂŹ ro Â? H/ NĂ&#x2018; B Â&#x2DC;ĂŤ Ăž H , Ăą Â&#x153;ĂŤ Ă H , D h Â&#x201C; s . â&#x20AC;&#x201C; int countTokens() Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Â&#x152; Ă&#x152; Â&#x2122; zÂ&#x201C; rĂ? Ă&#x2030; Â&#x17E;H _ > hĂ&#x192; Âş\ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . â&#x20AC;˘ â&#x20AC;&#x201C; boolean hasMoreTokens() â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : ĂŤ Ă&#x152; H \ \ P  f ĂŹ Â&#x201D; ro t ¡ §Â&#x201C; Ăş rÂ&#x17E; Ă&#x2030; Ă?H s e Ă&#x153; Â&#x201D; ÂźÂ&#x20AC; true\ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . â&#x20AC;&#x201C; String nextToken() â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : ĂŤ Ă&#x152; H \ ? P /\  f ĂŹ Â&#x201D; ro t ¡ §Â&#x201C; Ăş rÂ&#x17E; Ă&#x2030; Ă?H s e # Â&#x201D; Q Ă´ Ă&#x2021; . Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ă&#x152; 6 §Ă? ÂŁ Â&#x17E;H ` ÂŚĂŤ H \ Â&#x2013; P Ă?ĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . â&#x20AC;˘ â&#x20AC;˘ \ VĂź @: NoSuchElementException â&#x20AC;˘ String, BufferedReader, StringTokenizer 9 tA Ăž Ă&#x203A; Âź\ ÂŚs 6 x  # Â&#x152;% Â&#x2DC;Ă&#x203A; 7 Ÿà Ă&#x201D;
{ 9 ` ÂŚÂ&#x17E; Ă? HZ Â&#x2013; > Ă?ĂŹ ro Â? H ĂĄ Ă&#x201D;Â&#x2013; Ă?Ă&#x2022; ÂŞĂ? Â&#x203A; Lexical.java\ Ăž ΢ a$
Ă . s ĂĄ Ă&#x201D;Â&#x2013; Ă?Ă&#x2022; ÂŞĂ? Â&#x203A;Â&#x201C; Ăž r Ă&#x2030; 6 §þ ÂŁ °  s Ăş Ă&#x2DC; Τ K 4 Ă´ Ă&#x2021; . 1: Ă? ' P :Â&#x17E; Ă?H 2: Âż Âş  P :Â&#x17E; Ă? H ... s ĂĄ Ă&#x201D;Â&#x2013; Ă?Ă&#x2022; ÂŞĂ? Â&#x203A;` Ăž ÂŚÂ Â&#x2022;Â&#x201C; Â&#x152; r Ă&#x2030; ĂĄ Ă&#x201D;Â&#x2013; Ă?Ă&#x2022; ÂŞĂ? Â&#x203A;Â&#x2122; Ăž èĂ&#x203A; Âź
{ ` 9 ÂŚs 6 x  Â&#x152; #z ´' Â?K Â&#x; Â&#x2018; r : .
6
In-Lab 2 o^ Â? Â&#x2030;Â? HĂ&#x201D; ÂŚÂ Ă&#x152; o^ Â? Â&#x2030;s . 7 ¤, Ă´ ÂŁ Ă&#x2021; Í H \ Â&#x2013; P Ă?[ & O
á Ăą &Â&#x20AC; Ă&#x2022; ÂŞĂŤ H \ _ P ? /6 x  Œ `Â
½ â Ă&#x2030;Ă&#x192; + Âş\ O . â&#x20AC;˘ String Ă&#x152; â&#x20AC;˘ Ă&#x; ĂŤÂ&#x20AC; Â&#x2013; Â&#x2022;[ Â? & O
Â? Ăą aĂŤ ) H \ _ P ? /6 x  Œ ` Ă&#x2039; ¨ Ă&#x2039; ¨# Q Â&#x20AC; String 9 tA Ăž Ă&#x203A; Âź@ / Â&#x2019; \  StringBuffer 9 tA Ăž Ă&#x203A; Âź\ ÂŚ 6 x  Ă&#x2030;Ă&#x192; + ½ Âşe Â&#x201D; . â&#x20AC;˘ StringBuffer ADT t$ q
Ă : StringBuffer() â&#x20AC;&#x201C; Ă&#x2019; â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : 6 Ă&#x152; x|  Ă&#x201C;s ž 16Â&#x201C; StringBuffer Ă&#x152; o^ Â? Â&#x2030;\ ÂŚĂ&#x2019; t$ q
Ă´ Ă Ă&#x2021; . 16> h_ Â&#x2014; ¸Â&#x17D; HĂŤ H \ ? P /\  0 Au Â? H nullÂ&#x2013; Ă? Ăl Â&#x153; oÂ? a ) . â&#x20AC;&#x201C; Ă&#x2019; t$ q
Ă : StringBuffer(int size) â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : size>0 Ă&#x152; â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : 6 Ă&#x152; x|  Ă&#x201C;s ž sizeÂ&#x201C; StringBuffer Ă&#x152; o^ Â? Â&#x2030;\ ÂŚĂ&#x2019; t$ q
Ă´ Ă Ă&#x2021; . Â&#x2014; ¸Â&#x17D; HĂŤ H \ ? P /\  0 Au Â? H nullÂ&#x2013; Ă?Â&#x153; Ă l oÂ? a ) . â&#x20AC;&#x201C; Ă&#x2019; t$ q
Ă : StringBuffer(String str) â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ă&#x2026; Ă&#x152; Ă&#x2019;# QÂ&#x201D; strÂ&#x2013; Ă?G 0 > Â&#x201D; StringBuffer Ă&#x152; o^ Â? Â&#x2030;\ ÂŚĂ&#x2019; t$ q
Ă Â&#x201C; ÂŚ, Ă&#x2020; Ă&#x2019; Â&#x2013; Ă? 16> h_ ĂŤ H \ ÂŚ$  Â&#x153;½ Š Ă&#x2030; + Âşe Ă&#x192; Â? Â&#x201D; HB N /ç Â&#x2013;` Ă&#x; ÂŚS Â&#x2030;Â&#x2DC; X Ă?Ă´ Ă&#x2021; . 7 ¤, Ă&#x2019; ÂŁ t$ q
Â? Ă aĂ&#x152; ) o^ Â? Â&#x2030;_ 6 x|  Ă&#x201C;Â&#x201C; ž r str.length()+16s Ă&#x2030; . â&#x20AC;&#x201C; StringBuffer append(String str) â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ă&#x2019; Ă&#x152; Ă&#x2026;# QÂ&#x201D; str\ ÂŚÂ ĂąĂ&#x2DC; ÂŚÂ? a StringBuffer Ă&#x152; ) o^ Â? Â&#x2030;_ ? /6 x+  '\  ½ Ă&#x2039;Ă´ + Ă&#x2021; . â&#x20AC;&#x201C; StringBuffer append(char c) Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ă&#x2019; Ă&#x152; Ă&#x2026;# QÂ&#x201D; ĂŤ H c\ ÂŚÂ ĂąĂ&#x2DC; ÂŚÂ? a StringBuffer Ă&#x152; ) o^ Â? Â&#x2030;_ ? /6 x+  '\  Ă&#x2020; Ă&#x2019; Ă´ Ă&#x2021; . â&#x20AC;˘ â&#x20AC;&#x201C; int capacity() â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ăą Ă&#x152;  Ă&#x2DC; ÂŚÂ? aĂ&#x152; ) o^ Â? Â&#x2030;_ 6 x|  Ă&#x201C;` ž ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . â&#x20AC;&#x201C; int length() â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ăą Ă&#x152;  Ă&#x2DC; ÂŚÂ? aĂ&#x152; ) o^ Â? Â&#x2030;\  $  Â&#x153;á Š &# Qe Â? Â&#x201D; HĂŤ H \ _ P U ´s \ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . â&#x20AC;&#x201C; char charAt(int n) â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : nÂ&#x201C; Ă&#x152; r StringBuffer_ Ă&#x2030; Ă&#x; Âźl Â&#x2DC; Ă?  Â&#x2022; Â&#x152; 9, Â&#x20AC; Â&#x153;_ ÂŞ &
Ă&#x192; Ăą Âşs # Q Ă´ Ă&#x2021; . â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ăą Ă&#x152;  Ă&#x2DC; ÂŚÂ? aĂ&#x152; ) o^ Â? Â&#x2030;_ n P :ĂŤ H \ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . â&#x20AC;&#x201C; StringBuffer delete(int start, int end) 4
â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : 0 â&#x2030;¤start<length(), start<end Ă&#x152; â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z :  Ă&#x152; ĂąĂ&#x2DC; ÂŚÂ? aĂ&#x152; ) o^ Â? Â&#x2030;_ ĂŤ H \ \ P  " f startĂ&#x201A; Ă&#x2019;' end t _ ĂŤ H \ ÂŚ] j Ă´ Ă&#x2021; . end s Ă&#x160; ĂŞ_ ĂŤ H tÂ&#x201C; Ăž [ r¢ Ă&#x2030; aA , ¤Ă&#x153; ĂĄ ÂźÂ&#x2013; Ă?s 1 xĂ´ l Ă&#x2021; . end Ă&#x152; o^ Â? Â&#x2030;_ U ´s Â&#x2DC; Ă? U ´Â&#x20AC; startĂ&#x201A; Ă&#x2019;' ĂŤ H \ _ P = Q ĂĽ t _ ĂŤ H \ ÂŚ] j Ă´ Ă&#x2021; . â&#x20AC;˘ \ VĂź @: StringIndexOutOfBoundsException â&#x20AC;&#x201C; StringBuffer insert(int index, String str) â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : 0 â&#x2030;¤index<length() Ă&#x152; â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ă&#x2026; Ă&#x152; Ă&#x2019;# Q Â&#x201D; str` ÂŚÂ ĂąĂ&#x2DC; ÂŚÂ? aĂ&#x152; ) o^ Â? Â&#x2030;_ index 0 Au \  œ Â&#x161;{ Ăş Ă´ 9 Ă&#x2021; . " ÂśA ĂŠ 0 Au s Ă&#x160; ĂŞ\  e Â? Â&#x201D; HÂ&#x2014; ¸Â&#x17D; HĂŤ H HĂş Â? Â&#x161; Âś{ Â? 9 aĂŤ ) H \ + P '\  0 Au Â&#x2022; ¸2 ¤s Â&#x; 1 xÂ? l a ) . VĂź @: StringIndexOutOfBoundsException â&#x20AC;˘ \ â&#x20AC;&#x201C; void setCharAt(int index, char ch) â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : 0 â&#x2030;¤index<length() Ă&#x152; â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ăą Ă&#x152;  Ă&#x2DC; ÂŚÂ? aĂ&#x152; ) o^ Â? Â&#x2030;_ index 0 Au \  e Â? Â&#x201D; HĂŤ H \ ÂŚĂ&#x2026; Ă&#x2019;# Q Â&#x201D; ĂŤ H chÂ&#x2013; Ă? Ăľ H . â&#x20AC;˘ \ VĂź @: StringIndexOutOfBoundsException â&#x20AC;&#x201C; String substring(int start) â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : 0 â&#x2030;¤start<length() Ă&#x152; â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : start 0 Ă&#x152; Au Ă&#x201A; Ă&#x2019;' l Â&#x201D; rĂŤ > H \ = P Q ĂĽ t Â&#x2013; Ă?½ ¨$
Â? Ă aD ) h String Ă&#x152; o^ Â? Â&#x2030;\ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . â&#x20AC;˘ \ VĂź @: StringIndexOutOfBoundsException â&#x20AC;&#x201C; String substring(int start, int end) â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : 0 â&#x2030;¤start, end<length(), start<end Ă&#x152; â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : start 0 Ă&#x152; Au Ă&#x201A; Ă&#x2019;' end-1 t Â&#x2013; Ă?½ ¨$
Â? Ă aD ) h String Ă&#x152; o^ Â? Â&#x2030;\ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . â&#x20AC;˘ \ VĂź @: StringIndexOutOfBoundsException â&#x20AC;˘ Hangman > e ĂĄ Â&#x201D; Ă&#x201D;Â&#x2013; Ă?Ă&#x2022; ÂŞĂ? Â&#x203A;: s Ăž > e Â&#x201C; Â&#x201D; r( Ă&#x2030; Ă&#x2030; Â&#x17D; Ă&#x201C;' Â&#x201A; Ă&#x2014; Â&#x2DC;Ă´ Ăž Ă&#x2021;%
ĂŤ ò HĂŠ Â&#x2013;# Ă&#x; Q\ Œ¡ Â&#x2DC; Ăş ´ Â?Ă&#x2020; Ăş Ă&#x2019;Â? H> e s Â&#x201D; . 6 x  Â? HĂŠ Â&#x2013;# Ă&#x; Q\ ÂŚ ½ ¨$
Ă Â? HĂŤ H \ ÂŚ m Ă&#x2020; Â&#x201D; Ă&#x2019;8 ¤ ÂŁ > á &9, Ă&#x2020; Ă&#x2019;8 ¤ô ÂŁ Ă&#x2021;ĂŤ H ĂŠ Â&#x2013;# Ă&#x; Q\  1 x p Â&#x153; Š Â&#x20AC; Ă&#x2022; ÂŞĂŤ H 1 x p Â&#x153;Ă´ Š Ă&#x2021;Â&#x2014; ¸Â&#x17D; H0 Au \ ÂŚÂ&#x2DC; Ă? # Â&#x152;Ă&#x2026; Ă&#x2019;> Â? a ) . s ĂĄ Ă&#x201D;Â&#x2013; Ă?Ă&#x2022; ÂŞĂ? Â&#x203A;Â&#x201C; Ăž r Hangman, HangmanProgram, wordDB [ Ă&#x2030; j> h_ 9 tA Ăž Ă&#x203A; ÂźÂ&#x2013; Ă?½ ¨$
Â? Ă a ) . Hangman 9 tA Ăž Ă&#x203A; ÂźÂ? HÂ&#x2030; ÂłF & > e Â&#x201D; Â&#x201D; Â? ' Â&#x; Â&#x2020; Ă&#x201C;` ½ ÂŚ StringBuffer Ă&#x152; o^ Â? Â&#x2030;\ ÂŚ: xK Â&#x; Ă&#x201E; Âťt 9, 6 x  Ă&#x2020; Ă&#x2019;8 ¤ô ÂŁ Ă&#x2021;ĂŤ H \  > e Â&#x201D; Â&#x201D; ' Â? Â&#x; Â&#x2020; Ă&#x201C;` ½ ÂŚĂ&#x152; t q Â&#x2019; Ă´ Ă&#x2021; . HangmanProgram 9 tA Ăž Ă&#x203A; ÂźÂ? H> e ` Â&#x201D; ÂŚÂ&#x201D; ' Â? Â&#x; l 0 AĂ´ Ă&#x2021; Â&#x201C; ' ` Â&#x2026;s Ă&#x203A; Âź\ ÂŚ] j/ NĂ´ B Ă&#x2021; . wordDB 9 tA Ăž Ă&#x203A; ÂźÂ? H% 7 Â&#x2DC;Ă&#x203A; Ÿà Ă&#x201D;
{ 9 Â&#x2013; Ă?½ ¨$
Â? Ă aX ) <s ' Z Â&#x2026;s Ă&#x203A; Ÿ \" fe _ Â&#x201D; _ ĂŠ Â&#x2013;# Ă&#x; Q\ ÂŚÂ&#x201A; Ă&#x2014; Â&#x2DC; Ăž # Â&#x152;ĂŻ r . Hangman 9 tA Ăž Ă&#x203A; Âź_ 6 §B ÂŁ jÂ&#x2122; èĂ&#x2014; Âź\ ΢ a$
Ă Â&#x201C; ÂŚ, â&#x20AC;&#x201C; public boolean guessALetter(char guessChar) â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ă&#x2026; Ă&#x152; Ă&#x2019;# Q Â&#x201D; guessChar ĂŠ Â&#x2013;# Ă&#x; Q\  1 x p Â&#x153; Š Â? Ht Â&#x17D; # Â&#x152;1 x p Â&#x153; Š Â? H0 Au > e Â&#x201D; Â&#x201D; Â? ' Â&#x; Â&#x2020; Ă&#x201C;` ½ ÂŚ tÂ&#x2019; q Ă&#x152; Ă´ Ă&#x2021; . ¸ ¢ô Ă&#x2021;p x 1 Â&#x153; Š Â&#x20AC; true\ ÂŚĂŹ Ă?¨ ø Â&#x160; 8 Â&#x201C; ÂŚ, 1 x p Â&#x153; Š t ¡ §Ă&#x153; Ăş ÂźÂ&#x20AC; false\ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . HangmanProgram 9 tA Ăž Ă&#x203A; Âź_ main Â&#x2020; Ă&#x160;Ă&#x192; < Âş\ ΢ a$
Ă r Â&#x161; ¸. 6 x  Â? HĂž j@ /# Â&#x152;$  à t ¸ Â&#x2DC;3 Ăş wÂ? l aĂ&#x2020; ) Ă&#x2019;8 ¤` ÂŁ Œ½ Ă&#x2030;Ă&#x192; + Âş e Â&#x201D; . $
/ Ă NĂ´ B Ă&#x2021;
Ă&#x201E; â Âş\  Â? HY
 > _ Ă&#x2020; Ă&#x2019;8 ¤Í ÂŁ Â&#x2013;\ Ă&#x;  $
/ Ă N B % Â? i Ht Ă&#x2DC;§ ÂŚ Ă´ 4 Ă&#x2021; . 6 x  Â&#x2013; Ă?Ă&#x201A; Ă&#x2019;' ĂŤ H \ ÂŚ{ § 9 ~ 4 Ă&#x17D;` Ă&#x192; ÂŚM : Hangman_ guessALetter\ ÂŚs 6 x  # Â&#x152;> e Â&#x201D; Â&#x201D; ' Â? Â&#x; Â&#x2020; Ă&#x201C;` ½ ÂŚĂ&#x152; t q Â&#x2019; Â&#x201C; ÂŚ, Ă&#x2022; ÂŞ Ăľ \ ÂŚÂ&#x2DC; Ă?# Â&#x152;ĂŻ r . ĂŤ H _ { § 9 Ăľ 4 B jr t _ Ă&#x2DC; Τ Â&#x201C; 4 r JOptionPane_ Ă&#x2030; showInputDialogĂź < showOutputDialog` ÂŚs 6 xĂ´  Ă&#x2021; .
7
Post-Lab â&#x20AC;˘ ĂŤ H \ ` P ÂŚ% Â&#x192;o ½ Ă&#x2030;M + : String 9 tA Ăž Ă&#x203A; Ÿ¢ ¸Â? H StringBuffer 9 tA Ăž Ă&#x203A; Âź\ ÂŚ 6 x½  Ă&#x2030;Ă&#x192; + Âşe Â&#x201D; . Âż Âş9 tA Ăž Ă&#x203A; Âź\ ÂŚ 6 x½  Ă&#x2030; + M : s & ` h ÂŚ 6 §Â? ÂŁ ĂŻĂ&#x2014; Âź\ ÂŚ s6 x  # Â&#x152;q Â&#x201C; §[ " O
ĂŽ r Â&#x161; ¸. String String str2 = str1 =
str1 = "test"; str2; str1; str1 + "s";
StringBuffer bstr1 = new StringBuffer("test"); StringBuffer bstr2; bstr2 = bstr1; bstr1.append("s");
5
c °2005, sangjin@kut.ac.kr
Ä ¬Ë ìÍ æ P ò Laboratory 3. PointList ADT
1
×X Ò Ä ì • C \ ` P ¦s 6 x #o Û ¼à Ô\ ¦¨ ½ ³K & r : . • _ tokenizer\ ¦s 6 x # v Ð× ¼ РÒ' X <s ' \ ¦{ § 9 ~ 4 Î Ã H~ ÓZ ½ ` O ¦z ´_ vô þ Ç . • java.awt J v t \ ¦s 6 x # E e ¦a @` Å ¦: xK / G B ` ¦Õ ªo H~ ÓZ ½ ` O ¦z ´_ vô þ Ç .
2
4 ~ ¿ • o Û ¼à Ô(list) HX <s ' \ ¦ + A& þ Ü h ¼ Ð ao ' ½ ÉM + : 6 x « ѽ ¨ ¸s . + A& þ Ü h ¼ Ð ao ' a ) H כ r' É כ Í ¹ è ¦] \ jü @ ¦ H ¸¿ º ' כ ¹ è\ ¦ t ¦e Ü ¼9, t } כ ¹ è\ ¦] jü @ ¦ H ¸¿ ºÊ ê5 qכ Å ¹ è\ ¦ t ¦e H ` כ ¦´ ô ú Ç . s z ´_ v\ þ " f H 2 " ¶ý é a³ ð (x, y)\ ¦¶ " é è Ð t Ho Û ¼à Ô\ ¦½ ¨ ³K & r : . s o Û ¼à Ô\ ¦ PointList 9, Õ ªA i 6 x6 £ x\ " f´ §s ú 6 x a ) . • s ü <° ú ro É ¼ Ûà Ô H ¸f ý a³ ð&
ñ Ðë Ä ß »t ½ Éà + ºe Ü ¼Ù ¼ Ð# 6 3 x « ѽ ¨ ¸ m .
3
PointList ADT • ½ ¨$
כ í ¹ è: x ý a³ ðü <yý a³ ð\ ¦ ? / H&
à ñ º s © . s z ´_ v\ þ " f H java.awt J v t \ e H Point 9 tA þ Û ¼ ¦s \ 6 x # y ý a³ ð\ ¦ p · . • ½ ¨ ¸: ý a³ ð[ tÉ þ r C \ ` P ¦s 6 x # ½ ¨ ³ & a ) + Ao þ Û ¼à Ô\ Ä »t a ) . ¢ ¸ô Ç& " f\ ¦ Ä »t # Ò o ¦e H ³F & 0 Au \ ¦ p · . – 9 { ì Í& ø Ü h ¼ Ðo ¼ Ûà Ô « ѽ ¨ ¸\ ¦½ ¨ ³½ & ÉM + :¶ { ú õ 9 ] j\ ¹ §f ¡ s H& " fü <° ú r& É
ñ Ð\ ¦Ä »t t · § ú H . • í ß – l rÒ : t$ q
í : PointList() • b 9 ÐZ : \ Ì 6 O §. £ • Ö ³ ÐZ : setup B Ì j è× ¼\ ¦ ñØ ¦ # DEF_MAX_LIST_SIZE ë ß u_ p ý a³ ð\ ¦$ ½ © Éà + ºe H Û o ¼à Ô\ ¦ë ß H . – Ò t$ q
í : PointList(int maxNumber) b 9 ÐZ : maxNumber> 0 Ì • • Ö ³ ÐZ : setup B Ì j è× ¼\ ¦ ñØ ¦ # maxNumber ë ß p u_ ý a³ ð\ ¦$ ½ © Éà + ºe H o Û ¼à Ô\ ¦ë ß H . s M : ¸| s Ø æ7 ¤÷ á &t · §Ü ú ¼ DEF_MAX_LIST_SIZE ë ß u_ p ý a³ ð\ ¦$ ½ © Éà + ºe H oÛ ¼à Ô\ ¦ë ß H . – Ò t$ q
í ¸¹ §s ¡ : void setup(int maxNumber) b 9 ÐZ : maxNumber> 0, s Ì B j è× ¼ HÒ t$ q
í ë ß 6 x Ù ¼ Ð private B j è× ¼ Ðë ß H . • • Ö ³ ÐZ : maxNumber ë Ì ß u_ p ý a³ ð\ ¦$ ½ © Éà + ºe H o Û ¼à Ô\ ¦ë ß H . a³ ðÆ Ò : void append(Point newPoint) – ý • b 9 ÐZ : isFull()==false, newPoint!=null Ì Ö ³ ÐZ : Ò Ì Å# Q ý a³ ð\ ¦o Û ¼à Ô_ = Q\ å Æ Ò ô Ç . & " f HÆ Ò aý ) a³ ð\ ¦ o v ¸2 ¤s 1 xô l Ç . • – ý a³ ð\ | P Ð: Point getCursor() à b 9 ÐZ : isEmpty()==false Ì • 1
â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ă&#x152; &" f Â&#x2030; ÂłF & o v Â? HĂ˝ aÂł Ă°\ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . â&#x20AC;&#x201C; void clear() â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : \ Ă&#x152; 6 O § ÂŁ â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : o Ă&#x152; Ă&#x203A; Ÿà Ă&#x201D;\  e Â? Â&#x201D; HÂ&#x2014; ¸Â&#x17D; HĂ˝ aÂł Ă°\ ÂŚ] j Ă´ Ă&#x2021; . o Ă&#x203A; Ÿà Ă&#x201D;_ Ă&#x; Âźl &
Â&#x2DC; Ăą Ă?Â? H 0s á &# Q 9, & " fÂ? H -1Â&#x2013; Ă?[ & O
K Ăą Ă´ Ă&#x2021; . â&#x20AC;&#x201C; boolean isEmpty() â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : \ Ă&#x152; 6 O § ÂŁ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ă&#x152; oĂ&#x203A; Ÿà Ă&#x201D; q # Qe Ă&#x153; Â&#x201D; ÂźÂ&#x20AC; true\ ÂŚĂŹ Ă?¨ ø Â&#x160; 8 Â&#x201C; ÂŚĂ&#x2022; ÂŞX t O ¡ §Ă&#x153; Ăş ÂźÂ&#x20AC; false\ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . â&#x20AC;˘ â&#x20AC;&#x201C; boolean isFull() â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : \ Ă&#x152; 6 O § ÂŁ â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ă&#x152; oĂ&#x203A; Ÿà Ă&#x201D; T ` q e Ă&#x153; Â&#x201D; ÂźÂ&#x20AC; true\ ÂŚĂŹ Ă?¨ ø Â&#x160; 8 Â&#x201C; ÂŚĂ&#x2022; ÂŞX t O ¡ §Ă&#x153; Ăş ÂźÂ&#x20AC; false\ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . Â&#x2030; ÂłF & o Ă&#x203A; Ÿà Ă&#x201D;_ Âźl Ă&#x; Ăź <o Ă&#x203A; Ÿà Ă&#x201D;\ Œ½ ¨Â&#x2030; ³ô & Ă&#x2021;C \ _ P 6 x|  Ă&#x201C;` ž ÂŚq Â&#x201C; § # Â&#x152;o Ă&#x203A; Ÿà Ă&#x201D; T ` q e Â? Â&#x201D; Ht Â&#x17D; Ă´ Ă&#x2021; . â&#x20AC;&#x201C; boolean gotoBeginning() b Â&#x201A; 9 Ă?Z : \ Ă&#x152; 6 O § ÂŁ â&#x20AC;˘ â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : o Ă&#x152; Ă&#x203A; Ÿà Ă&#x201D; q # Qe Ă&#x153; Â&#x201D; ÂźÂ&#x20AC; false\ ÂŚĂŹ Ă?¨ ø Â&#x160; 8 Â&#x201C; ÂŚ, Ă&#x2022; ÂŞX t O ¡ §Ă&#x153; Ăş ÂźÂ&#x20AC; & " f\ ÂŚo Ă&#x203A; Ÿà Ă&#x201D;_ % Â&#x192;6 §Ă&#x153; ÂŁ ÂźÂ&#x2013; Ă?s 1 x l Â&#x201C; ÂŚ true\ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . â&#x20AC;&#x201C; boolean gotoEnd() â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : \ Ă&#x152; 6 O § ÂŁ â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : o Ă&#x152; Ă&#x203A; Ÿà Ă&#x201D; q # Qe Ă&#x153; Â&#x201D; ÂźÂ&#x20AC; false\ ÂŚĂŹ Ă?¨ ø Â&#x160; 8 Â&#x201C; ÂŚ, Ă&#x2022; ÂŞX t O ¡ §Ă&#x153; Ăş ÂźÂ&#x20AC; & " f\ ÂŚo Ă&#x203A; Ÿà Ă&#x201D;_ = QĂ&#x153; ĂĽ ÂźÂ&#x2013; Ă?s 1 x l ÂŚ true\ Â&#x201C; ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . â&#x20AC;&#x201C; boolean gotoNext() â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : \ Ă&#x152; 6 O § ÂŁ â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : & Ă&#x152; " f o Ă&#x203A; Ÿà Ă&#x201D;_ = Q\ ĂĽ  e Ă&#x153; Â&#x201D; ÂźÂ&#x20AC; false\ ÂŚĂŹ Ă?¨ ø Â&#x160; 8 Â&#x201C; ÂŚ, Ă&#x2022; ÂŞX t O ¡ §Ă&#x153; Ăş ÂźÂ&#x20AC; & " f\ ÂŚĂ&#x2022; ÂŞ 6 §ý ÂŁ aÂł Ă°\ ÂŚ o v Â&#x2022; ¸2 ¤ Â&#x; s1 x l Â&#x201C; ÂŚ true\ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . â&#x20AC;&#x201C; boolean gotoPrior() â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : \ Ă&#x152; 6 O § ÂŁ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : & Ă&#x152; " f o Ă&#x203A; Ÿà Ă&#x201D;_ % Â&#x192;6 §\ ÂŁ  e Â&#x201D; o Âź Ă&#x203A;Ă Ă&#x201D; ^ Â&#x2030; q # Qe Ă&#x153; Â&#x201D; ÂźÂ&#x20AC; false\ ÂŚĂŹ Ă?¨ ø Â&#x160; 8 Â&#x201C; ÂŚ, Ă&#x2022; ÂŞX t O â&#x20AC;˘ §Ă&#x153; Ăş ¡ ÂźÂ&#x20AC; & " f\ ÂŚ Â&#x2013; Ă?Â&#x201E; Ă˝ aÂł Ă°\ ÂŚ o v Â&#x2022; ¸2 ¤s Â&#x; 1 x l Â&#x201C; ÂŚ true\ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . â&#x20AC;&#x201C; void showStructure() â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : \ Ă&#x152; 6 O § ÂŁ â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : o Ă&#x152; Ă&#x203A; Ÿà Ă&#x201D;\  e Â? Â&#x201D; HÂ&#x2014; ¸Â&#x17D; HĂ˝ aÂł Ă°\ ÂŚĂ&#x2DC; Τ Ă´ 4 Ă&#x2021; . ĂŤ Â&#x2013;Â&#x20AC; Ă&#x; Â&#x2022;o Â? Ă&#x203A; Ÿà Ă&#x201D; q # Qe Ă&#x153; Â&#x201D; ÂźÂ&#x20AC; â&#x20AC;&#x153;List is empty.â&#x20AC;?\ ÂŚĂ&#x2DC; ÂŚ Ă´ 4 § Ă&#x2021; . sB jÂ&#x2122; èĂ&#x2014; ÂźÂ? Hn ! Q^
` ç ÂŚ3 q& l Ă&#x153; h ÂźÂ&#x2013; Ă?ĂŤ Â&#x2013; Ă&#x; 6 xÂ?  a ) .
4
PreLab â&#x20AC;˘ 6 § ÂŁ ÂŚ `s 6 x  Â&#x152; # PointList ADT\ ΢ a$
Ă . class PointList{ public static final int DEF_MAX_LIST_SIZE = 10; // Data members; private int size; private int cursor; private Point[] ptList; // Constructor public PointList() {} public PointList(int maxNumber){} private void setup(int maxNumber){} // List Manipulation Operator public void append(Point newPoint){} public Point getCursor(){} public void clear(){} // List Status Operator 2
public boolean isEmpty(){ return (size == 0); } public boolean isFull(){ return (size >= ptList.length); } // List iteration Operator public boolean gotoBeginning(){} public boolean gotoEnd(){} public boolean gotoNext(){} public boolean gotoPrior(){} public void showStructure(){ if(size == 0) System.out.println("List is empty."); else{ System.out.print("size = " + size + ", cursor = " + cursor); for(int i=0; i<ptList.length; i++){ if(i%4 == 0) System.out.println(); System.out.print(i + ": "); if(j < size) System.out.print("("+ptList[i].x+","+ptList[i].y+")\t"); else System.out.print("(-,-)\t"); } // end for System.out.println( ); } // end else } // end showStructure() } // end PointList class â&#x20AC;˘ ½ ¨Â&#x2030; Âłr & Ă&#x201E; Âť_ Â&#x2020; Ă&#x201C; ½ â&#x20AC;&#x201C; Â&#x201E; Â&#x203A; ¸| \  0 AC á &Â&#x20AC; & X h ]Ă´ Ă&#x2021;Â&#x161; ¸Ă&#x20AC; Ă&#x201C;B jr t \ ÂŚÂ&#x2013; H_ B t\ "  Ă&#x2DC; Τ Ă´ 4 Ă&#x2021; . â&#x20AC;&#x201C; cursorÂ? H â&#x2C6;&#x2019;1Â&#x2013; Ă?Â&#x153; Ăl o Ă&#x2021; Ă´ . â&#x20AC;˘ ¢$ a
` Ă ÂŚ Â&#x20AC; ConstructPointList 9 tA Ăž Ă&#x203A; Âź\ ÂŚs 6 x  # Â&#x152; PointList\ Œ½ ¨ ¤K ÂĄ Â&#x2018; r : . s 9 tA Ăž Ă&#x203A; ÂźÂ? Hy Â&#x153;_ Š < Ă&#x152; ` Â&#x2026;s t \  " f ĂŽ r~ Ă&#x17D;` Ă&#x192; ÂŚÂş Ă&#x192;e Â&#x201D; . â&#x20AC;˘ TestPointList 9 tA Ăž Ă&#x203A; Âź\ ÂŚs 6 x  # Â&#x152; PointList\ ÂŚ] j@ /Â&#x2013; Ă?½ ¨Â&#x2030; Âł & % Â? i Ht 6 § ÂŁ ÂŚ ` Â&#x17D; # Â&#x152;S Â&#x2030;Â&#x201C; X Ă´ Ă&#x2021; . s 9 tA Ăž Ă&#x203A; ÂźÂ&#x2022; ¸y Â&#x153;_ Š < Ă&#x152;` Â&#x2026;s t  \" f ĂŽ r~ Ă&#x17D;` Ă&#x192; ÂŚĂ&#x192; Âşe Â&#x201D; . â&#x20AC;&#x201C; Ăž j@ /Ă&#x; Âźl t > 5 qĂ˝ Ă&#x2026; aÂł Ă°\ ÂŚĂ&#x2020; Ă&#x2019; K Â&#x2018; r : . â&#x20AC;&#x201C; isFull B jÂ&#x2122; èĂ&#x2014; Âź\ ÂŚS Â&#x2030;Â&#x201C; X Ă´ Ă&#x2021; . â&#x20AC;&#x201C; gotoBeginning B jÂ&#x2122; èĂ&#x2014; Âź\ ÂŚS Â&#x2030;Â&#x201C; X Ă´ Ă&#x2021; . â&#x20AC;&#x201C; gotoNext B jÂ&#x2122; èĂ&#x2014; Âź\ ÂŚ s6 x  # Â&#x152;o Ă&#x203A; Ÿà Ă&#x201D;_ = Q ĂĽ t s l x 1Ă´ Ă&#x2021; . s 1 x l Â&#x20AC; " fÂ&#x2030; ÂłF & & " f_ ° â&#x20AC;Ť`×&#x203A;â&#x20AC;Ź Ăş ÂŚĂ&#x2DC; Τ Ă´ 4 Ă&#x2021; . â&#x20AC;&#x201C; gotoPrior B jÂ&#x2122; èĂ&#x2014; Âź\ ÂŚs 6 x  # Â&#x152;o Ă&#x203A; Ÿà Ă&#x201D;_ % Â&#x192;6 §Ă&#x153; ÂŁ ÂźÂ&#x2013; Ă?s 1 xĂ´ l Ă&#x2021; . â&#x20AC;&#x201C; T `Ă° q Ă?o ø Ă&#x203A; Ÿà Ă&#x201D;\ ÂŚ clearĂ´ Ă&#x2021; . â&#x20AC;&#x201C; isEmpty B jÂ&#x2122; èĂ&#x2014; Âź\ ÂŚS Â&#x2030; X Â&#x201C; Ă´ Ă&#x2021; . â&#x20AC;&#x201C; Ă˝ aÂł Ă°\ ÂŚY
> > h r Ă&#x2020; Ă&#x2019; K Â&#x2018; r : .
5
In-Lab â&#x20AC;˘ p ¢ a$
Â? Ă a DrawCurv 9 ) tA Ăž Ă&#x203A; Âź\ ÂŚy Â&#x153;_ Š < Ă&#x152;` Â&#x2026;s t \  " f ĂŽ r~ Ă&#x17D; Ă&#x192; { 9 § ~ 4 Ă&#x17D;Â&#x201C; Ă&#x192; r& Ă&#x2030; [ h t` Ăž ÂŚ Y VÂ&#x2013; Ă?s # QĂ&#x2026; Ă&#x2019;Â? HÂ&#x201A; ` ÂŚĂ&#x2022; ÂŞo Â&#x2022; ¸2 ¤ DrawCurv 9 Â&#x; tA Ăž Ă&#x203A; Âź_ paint B jÂ&#x2122; èĂ&#x2014; Âź\ ΢ a$
Ă # Â&#x152; . â&#x20AC;&#x201C; Graphics2D 9 tA Ăž Ă&#x203A; Âź_ drawLine B jÂ&#x2122; èĂ&#x2014; ÂźÂ? HĂ´ Ă&#x2021;& \ h  Â? r& Ă&#x2030; h t _ Â&#x201A; ` ÂŚĂ&#x2022; ÂŞ 9ĂŻ r . \ V) g.drawLine(10, 10, 30, 20); (10, 10)\  " f (30, 20) t _ Â&#x201A; ` ÂŚĂ&#x2022; ÂŞ 9ĂŻ r . Â&#x2DC; Âś ĂťÂ&#x2022; ¸Ă&#x201E; º \" fĂ˝ aÂł Ă°Â? H¢ aA , ¤ ĂĄ Â&#x153;ĂŠ Š Â&#x2013;s Ă&#x; (0,0)s . Ă&#x2022; ÂŞa >1Â&#x201A; Ă&#x2039; Ă?Â&#x203A; Ă&#x192; ¸. 3
(0, 0)
(10, 0)
(20, 0)
(30, 0)
(10, 10)
(0, 10)
(0, 20)
(30, 20)
(0, 30)
<Ă&#x2022; ÂŞa > 1> Â&#x2DC; Ă&#x2039; ÂśÂ&#x2022; Ăť ¸Ă&#x201E; ºý aÂł Ă°
6
Post-Lab â&#x20AC;˘ 6 §Â&#x192; ÂŁ Ă Â&#x2013;` Ă&#x; ÂŚ PointList\  Ă&#x2020; Ă&#x2019; Ă´ Ă&#x2021; . â&#x20AC;&#x201C; void insertBeginning(Point newPoint) â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : isFull()==false, newPoint!=null Ă&#x152; â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : D Ă&#x152; hĂ˝ aÂł Ă°\ ÂŚo Ă&#x203A; Ÿà Ă&#x201D;_ p% Âą Â&#x192;6 §\ ÂŁ  Ă&#x2020; Ă&#x2019; Ă´ Ă&#x2021; . & " fÂ? HĂ&#x2020; Ă&#x2019; Ă´ Ă&#x2021;D hĂ˝ aÂł Ă°\ ÂŚ o v Â&#x2022; ¸2 ¤ Â&#x;
Ă´ â Ă&#x2021; . â&#x20AC;&#x201C; void delete(Point aPoint) â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : isEmpty()==false, aPoint!=null Ă&#x152; â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ă&#x152; Â&#x2022;] Â&#x152; j½ Ă&#x2030;Ă˝ + aÂł Ă° o Ă&#x203A; Ÿà Ă&#x201D;\  Â&#x201D; rF > Â&#x20AC; Ă&#x2022; ÂŞĂ˝ aÂł Ă°\ ÂŚ Â&#x2022;] Â&#x152; jĂ´ Ă&#x2021; . s M :s Ă˝ aÂł Ă°+ '\  e Â? Â&#x201D; HĂ˝ aÂł Ă°[ t Ăž r Ă&#x2030; Â&#x201C; m ¢ Â&#x201D; aA , ¤Ă&#x153; ĂĄ ÂźÂ&#x2013; Ă?s 1 xK l 9, & " fÂ? H Â&#x2022;] Â&#x152; jĂ´ Ă&#x2021;Ă˝ aÂł Ă° 6 §\ ÂŁ  0 Au Â&#x2022; ¸2 ¤ô Â&#x; Ă&#x2021; . ĂŤ Â&#x2013;Â&#x20AC; Ă&#x; Â&#x2022; Â? p Âą t } Â&#x2022; Â&#x152; aÂł Ă˝ Ă°\ ÂŚ Â&#x2022;] Â&#x152; j % Ă&#x153; i ÂźÂ&#x20AC; & " fÂ? H' Ă˝ Ă? aÂł Ă°\ ÂŚ o & 9, Â&#x2022;] Â&#x152; jM :ĂŤ H\  Â&#x2018; o Ă&#x203A; Ÿà Ă&#x201D; á &Â&#x20AC; & " fÂ? H -1 â&#x20AC;Ť×&#x203A;â&#x20AC;ŹĂ&#x153; Ăş ° ÂźÂ&#x2013; Ă?[ & O
K Ăą Ă´ Ă&#x2021; . s Â&#x192; Ă Â&#x2013;Â&#x201C; Ă&#x; rÂ&#x192; Ă&#x2030; ] j  Â&#x153;q Š ´ òĂ&#x2013; ÂŚ& h Â&#x201C; ?
4
c °2005, sangjin@kut.ac.kr
Â&#x201E; Ă&#x201E;Â&#x2122; Â&#x2013;Â&#x2030; ÂŹĂ&#x2039; ĂŹĂ? ĂŚÂ&#x203A; P ò Laboratory 4. List ADT
1
Â? Ă&#x2014;X Ă&#x2019; Ă&#x201E; ĂŹ â&#x20AC;˘ z ´_ v 3\ Ăž  " fÂ? HĂ˝ aÂł Ă°&
Â&#x2DC; Ăą Ă?ĂŤ Â&#x2013;$ Ă&#x;  Â&#x153;½ Š Ă&#x2030;Ă&#x192; + Âşe Â? Â&#x201D; H PointList\ ÂŚ9 tA Ăž Ă&#x203A; Âź\ Œ½ ¨Â&#x2030; Âł & % i . s z ´_ v\ Ăž  " fÂ? H Â&#x20AC; Â&#x153;Ă´ ÂŞ Ă&#x2021;&
Ăą Â&#x2DC; Ă?\ ÂŚ$  Â&#x153;½ Š Ă&#x2030;Ă&#x192; + Âşe Â? Â&#x201D; H# 6 3 xo  Ă&#x203A; Ÿà Ă&#x201D; ADT\ Œ½ ¨Â&#x2030; ÂłK & Â&#x2018; r : . â&#x20AC;&#x201C; s z ´_ v\ Ăž  " f½ ¨Â&#x2030; Âł & Â&#x201C; ÂŚ Â? H# 6 3 xo  Ă&#x203A; Ÿà Ă&#x201D; ADTÂ? H´ _ z v 3\ Ăž  " f½ ¨Â&#x2030; ³ô & Ă&#x2021; PointListĂź < Ă° Ă? t ø Â&#x2013; Ă?C \ P ÂŚs ` 6  x # Â&#x152;o Ă&#x203A; Ÿà Ă&#x201D;\ Œ½ ¨Â&#x2030; ³ô & Ă&#x2021; . â&#x20AC;&#x201C; PointListÂ? Ho Ă&#x203A; Ÿà Ă&#x201D;Â&#x203A; ¸ Â&#x2022;Ăľ Â&#x152; Â&#x203A; aÂş ' # Â&#x152; append B jÂ&#x2122; èĂ&#x2014; ŸÍ Â&#x2013;] Ă&#x; j/ N B % t i ĂŤ Â&#x2013;s Ă&#x; z ´_ v\ Ăž  " fÂ? HÂ&#x2DC; Ă?: x Â&#x; ÂŤ Ă&#x2018;½ ¨ Â&#x203A; ¸\  " f] j/ N B Â? HÂś Â&#x161;{ Ăş 9 , Â&#x2022;] Â&#x152; j, Â&#x201C; §^ Â&#x2030;, Ă&#x2019; Â&#x17D; oÂ&#x192; Â? Ă Â&#x2013;1 Ă&#x; x` p Œ½ ¨Â&#x2030; ÂłK & Â&#x2018; r : . â&#x20AC;˘ Â&#x201C; ' ` Â&#x2026;s Ă&#x203A; Âź\ Œ ¸6 Ă&#x2013; xK  Â&#x2018; r : .
2
4 ~ Âż â&#x20AC;˘ o Ă&#x203A; Ÿà Ă&#x201D;Â? H°  Â&#x201C; Ăş r Ă&#x2030; { _ 9 â&#x20AC;Ť×&#x203A;â&#x20AC;Ź šÂ&#x2122; è[ t` Ăž ÂŚ" fÂ&#x2013; Ă?Â&#x201A; + AÂ&#x203A; Ăž a> ' \ ÂŚ t Â&#x2022; ¸Â&#x; ¤ 2Ă&#x201E; Âťt Â? H ÂŤ Ă&#x2018;½ ¨Â&#x203A; ¸s . â&#x20AC;˘ z ´_ v 3\ Ăž  " f% Â&#x192;! # 3 QÂ&#x2039; : " ¤& ÂŁ
Ăą { _ 9 â&#x20AC;Ť×&#x203A;â&#x20AC;Ź šÂ&#x2122; è[ t` Ăž ÂŚ$  Â&#x153; Š Â? Ho Âź Ă&#x203A;Ă Ă&#x201D;\ ÂŚy Â&#x2022;y Â&#x152; Â&#x2022;ĂŤ Â&#x152; Â&#x2013;[ Ă&#x; t# Ăž Q 6 x½  Ă&#x2030;Ă&#x192; + Âşe t Â&#x201D; ĂŤ Â&#x2013;s Ă&#x; Â&#x201C; â&#x20AC;Ť×&#x203A;â&#x20AC;Ź r Ă&#x2030; v \ . \  " fÂ? HÂ&#x2014; ¸Â&#x17D; HĂž t 9A Ă&#x203A; Âź_ Â&#x203A; ¸ Â&#x153;s Š á &Â? H Object 9 tA Ăž Ă&#x203A; Âź\ ÂŚs 6 x  # Â&#x152;# 6 3 xo  Ă&#x203A; Ÿà Ă&#x201D;\ ÂŚĂŤ Â&#x2013;[ Ă&#x; tĂ&#x192; Ăž Âşe Â&#x201D; . t ĂŤ Â&#x2013; Object 9 Ă&#x; tA Ăž Ă&#x203A; Âź\ ÂŚs 6 x  Â&#x20AC; Âś " ĂŠr { 9 Â&#x201C; rs Ă&#x2030; ½ ¨Â&#x203A; ¸\  $  Â&#x153;½ Š Ă&#x2030;Ă&#x192; + Âş\ Â? O HĂŤ H] j& s h e Â&#x201D; . â&#x20AC;˘ â&#x20AC;˘ \  " f intĂź <°  Â&#x201C; Ăş rÂś Ă&#x2030; " ĂŠ { 9 Â&#x201C; rÂ&#x201A; Ă&#x2030; Ă?Â&#x203A; Ă&#x192; ¸ { 9 s m Ă&#x2122; ÂźÂ&#x2013; Ă? Object C \ \ P  f ] Â&#x201D; @ X /{ 9 ½ Ă&#x2030;Ă&#x192; + Âş\ O . @ / Â&#x2019; s ĂŤ H] j\ ÂŚ K ½ Ă&#x2030;Ă&#x192; + Âşe Â&#x2022; Â&#x201D; ¸2 ¤ Â&#x; Â? Hr Ă&#x203A; Âź% 7 Â&#x203A; s Ă&#x161; Ă&#x201D; Qo : xK Â&#x; Â&#x2014; ¸Â&#x17D; HĂŠ "r Âś { \ 9  @ /Ă´ Ă&#x2021; wrapper 9 tA Ăž Ă&#x203A; Âź\ ÂŚ] j/ N B Â&#x201C; ÂŚe Â&#x201D; . Wrapper Class Boolean Byte Character Double Float Integer Long Short
Ă&#x2019;$ t q
Ă : " Âś ĂŠ { â&#x2020;&#x2019; Wrapper 9 Boolean(boolean value) Byte(byte value) Character(char value) Double(double value) Float(float value) Integer(int value) Long(long value) Short(short value)
BÂ&#x2122; j èĂ&#x2014; Âź: Wrapper â&#x2020;&#x2019; Âś " ĂŠ { 9 boolean booleanValue() byte byteValue() char charValue() double double doubleValue() float floatValue() int intValue() long longValue() short shortValue()
\ V) &
Ă&#x192; Ăą Âş\ ÂŚ wrapper Ă&#x152; o^ Â? Â&#x2030;Â&#x2013; Ă? Ă&#x2039; ¨Â&#x201C; ÂŚ r wrapper Ă&#x152; o^ Â? Â&#x2030;\ ÂŚ&
Ă&#x192; Ăą ÂşÂ&#x2013; Ă? Ă&#x2039; ¨Â? H~ Ă&#x201C;Z ½ O int i = 77; int j; Integer a = new Integer(i); j = a.intValue();
3
List ADT ¨$
â&#x20AC;Ť×&#x203A;â&#x20AC;Ź à šÂ&#x2122; è: Object { _ 9 Ă&#x152; o^ Â? Â&#x2030;[ t` Ăž ÂŚ$  Â&#x153;½ Š Ă&#x2030;Ă&#x192; + Âşe Â? Â&#x201D; Ho Ă&#x203A; ÂźĂ&#x201D; Ă , o Ă&#x203A; Ÿà Ă&#x201D;\  Â&#x2030; ÂłF & $  Â&#x153;á Š &# Qe Â? Â&#x201D; Hâ&#x20AC;Ť×&#x203A;â&#x20AC;Ź šÂ&#x2122; è_ > hĂ&#x192; Âş, o Ă&#x203A; Âź â&#x20AC;˘ ½ Ă Ă&#x201D;\ ÂŚ] H X ½ Ă&#x2030;M + : 6 x  Â? H &" f â&#x20AC;˘ ½ ¨Â&#x203A; ¸: Â&#x201A; + AĂ Ăž H" f\ ÂŚ t 9, Â&#x152; Â&#x2022; yâ&#x20AC;Ť×&#x203A;â&#x20AC;Ź šÂ&#x2122; è_ Ă H" fÂ? HÂś Â&#x161;{ Ăş Â? 9 ar ) ç Â&#x2013;Ăľ Ă&#x; 0 Au \  _ K &
Â? Ăą a ) . y Â&#x2022;â&#x20AC;Ť×&#x203A;â&#x20AC;Ź Â&#x152; šÂ&#x2122; è_ ] H X Â&#x201C; r& Ă&#x2030; " f ÂŚs \ 6 xĂ´  Ă&#x2021; . & " Ă? M h⠍ç Ă&#x192; j # aĂ&#x2018; Ă? Ă? Âż M Ă&#x2039; R Ă Â&#x; ¡V  g C Â&#x201D; §Ă? / M Ă&#x2014;( Â&#x2018; Ă&#x2014; Â&#x2018; Â&#x2DC; +Âł Ă&#x20AC;Â&#x161; ÂżÂ&#x; ¡ h Ă > . 1
â&#x20AC;&#x201C; C \ ` P ÂŚs 6 x  # Â&#x152;½ ¨Â&#x2030; Âł & Ă&#x2122; ÂźÂ&#x2013; Ă?â&#x20AC;Ť×&#x203A;â&#x20AC;Ź šÂ&#x2122; è_ > hĂ&#x192; ÂşÂ? H 0Ă&#x153; ÂźÂ&#x2013; Ă?Â&#x153; Ăl oK 9, & " fÂ? H -1Â&#x2013; Ă?Â&#x153; Ăl o Ă&#x2021; Ă´ . â&#x20AC;˘ Â&#x192; Ă Â&#x2013; Ă&#x; â&#x20AC;&#x201C; l Â&#x2018; rĂ&#x2019; : t$ q
Ă : List() â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : 6 Ă&#x152; x|  Ă&#x201C;s ž DEF_LIST_CAPACITYÂ&#x201C; Â&#x2018; o Ă&#x203A; Ÿà Ă&#x201D;\ ÂŚĂ&#x2019; t$ q
Ă´ Ă Ă&#x2021; . o Ă&#x203A; Ÿà Ă&#x201D;_ Ă&#x2019; t$ q
Â? Ă H setup() B j èĂ&#x2014; Â&#x2122; Âź\ ÂŚs 6 xĂ´  Ă&#x2021; . â&#x20AC;&#x201C; Ă&#x2019; t$ q
Ă : List(int capacity) â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : capacity>0 Ă&#x152; â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : capacity>0s Ă&#x152; Â&#x20AC; 6 x|  Ă&#x201C;s ž capacityÂ&#x201C; Â&#x2018; o Ă&#x203A; Ÿà Ă&#x201D;\ ÂŚĂ&#x2019; t$ q
Ă Â&#x201C; ÂŚ, Ă&#x2022; ÂŞX t O ¡ §Ă&#x153; Ăş ÂźÂ&#x20AC; 6 x|  Ă&#x201C;s ž DEF_LIST_CAPACITYÂ&#x201C; Â&#x2018; o Ă&#x203A; Ÿà Ă&#x201D;\ ÂŚĂ&#x2019; t$ q
Ă´ Ă Ă&#x2021; . o Ă&#x203A; Ÿà Ă&#x201D;_ Ă&#x2019; t$ q
Â? Ă H setup() B jÂ&#x2122; èĂ&#x2014; Âź\ ÂŚs 6 xĂ´  Ă&#x2021; . â&#x20AC;&#x201C; Ă&#x2019; t$ q
Ă Â&#x2022; ¸š §s ÂĄ : void setup(int capacity) â&#x20AC;˘ sB jÂ&#x2122; èĂ&#x2014; ÂźÂ? HĂ&#x2019; t$ q
Ă ĂŤ Â&#x2013; Ă&#x; 6 x  Ă&#x2122; ÂźÂ&#x2013; Ă? private B jÂ&#x2122; èĂ&#x2014; ÂźÂ&#x2013; Ă?ĂŤ Â&#x2013;Â&#x17D; Ă&#x; H . â&#x20AC;˘ 9 bÂ&#x201A; Ă?Z : capacity>0, Ă&#x152; Ă&#x2013; ÂłĂ? Â&#x201A;Z :  Ă&#x152; x 6| Ă&#x201C;s ž capacityÂ&#x201C; Â&#x2018; o Ă&#x203A; Ÿà Ă&#x201D;\ ÂŚĂ&#x2019; t$ q
Ă´ Ă Ă&#x2021; . â&#x20AC;˘ â&#x20AC;&#x201C; void insert(Object newElement) â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : newElement!=null, isFull()==false Ă&#x152; Ă&#x2013; ÂłÂ&#x201A; Ă?Z : & Ă&#x152; " f o v Â&#x201C; ÂŚe Â? Â&#x201D; Hâ&#x20AC;Ť×&#x203A;â&#x20AC;Ź šÂ&#x2122; è 6 §\ ÂŁ  Ă&#x2026; Ă&#x2019;# QÂ&#x201D; D hâ&#x20AC;Ť×&#x203A;â&#x20AC;Ź šÂ&#x2122; è\ ÂŚÂś Â&#x161;{ Ăş 9 Ă´ Ă&#x2021; . & " fÂ? HÂś Â&#x161;{ Ăş 9 Â? aâ&#x20AC;Ť×&#x203A;â&#x20AC;Ź ) šÂ&#x2122; è\ ÂŚ â&#x20AC;˘ o v Â&#x2022; ¸2 ¤s Â&#x; 1 xĂ´ l Ă&#x2021; . & " f o Ă&#x203A; Ÿà Ă&#x201D;Ă&#x2014; Ìç Â&#x2013;\ Ă&#x;  e Ă&#x153; Â&#x201D; ÂźÂ&#x20AC; & " f0 Au s Ă&#x160; ĂŞ\  e Â? Â&#x201D; Hâ&#x20AC;Ť×&#x203A;â&#x20AC;Ź šÂ&#x2122; èÂ? H Y VÂ&#x2013; Ă? ¸ Â&#x201D; m Â&#x161;Â? rA Ă&#x2030; ¤Ă&#x153; ĂĄ ÂźÂ&#x2013; Ă?s 1 x l Â&#x201C; ÂŚD hâ&#x20AC;Ť×&#x203A;â&#x20AC;Ź šÂ&#x2122; è\ ÂŚÂś Â&#x161;{ Ăş Ă´ 9 Ă&#x2021; . â&#x20AC;&#x201C; void remove() b Â&#x201A; 9 Ă?Z : isEmpty()==false Ă&#x152; â&#x20AC;˘ â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : & Ă&#x152; " f o v Â&#x201C; ÂŚe Â? Â&#x201D; Hâ&#x20AC;Ť×&#x203A;â&#x20AC;Ź šÂ&#x2122; è\ ÂŚ] j Ă´ Ă&#x2021; . & " f o Ă&#x203A; Ÿà Ă&#x201D;Ă&#x2014; Ìç Â&#x2013;\ Ă&#x;  e Ă&#x153; Â&#x201D; ÂźÂ&#x20AC; & " f0 Au s Ă&#x160; ĂŞ  e \ Â? Â&#x201D; Hâ&#x20AC;Ť×&#x203A;â&#x20AC;Ź šÂ&#x2122; èÂ? H Y VÂ&#x2013; Ă? m ¢ Â&#x201D; aA , ¤Ă&#x153; ĂĄ ÂźÂ&#x2013; Ă?s 1 xĂ´ l Ă&#x2021; . & " f = Q\ ĂĽ  e Â? Â&#x201D; H
Ă&#x201E; â Âş\  Â? H& " f\ ÂŚ% Â&#x192;6 §Ă&#x153; ÂŁ ÂźÂ&#x2013; Ă? 1 s x l Â&#x201C; ÂŚ, Ă&#x2022; ÂŞX t O ¡ §Ă&#x153; Ăş ÂźÂ&#x20AC; & " fÂ? H Â&#x2022;] Â&#x152; jĂ´ Ă&#x2021;â&#x20AC;Ť×&#x203A;â&#x20AC;Ź šÂ&#x2122; è_ 6 §â&#x20AC;Ť×&#x203A;â&#x20AC;Ź ÂŁ šÂ&#x2122; è\ ÂŚ o v Â&#x2022; ¸2 ¤s Â&#x; 1 xĂ´ l Ă&#x2021; . Â&#x2030; ÂłF & â&#x20AC;Ť×&#x203A;â&#x20AC;Ź šÂ&#x2122; è Âľ Ă&#x161;\ 1  \ Â? O H
Ă&#x201E; â Âş\  Â&#x2022;] Â&#x152; j s Ă&#x20AC; Ă&#x2019;# Qt Â&#x20AC; & " f_ ° â&#x20AC;ŤÂ&#x201C;×&#x203A;â&#x20AC;Ź Ăş r â&#x2C6;&#x2019;1s Ă&#x2030; á &# Q Ă´ Ă&#x2021; . â&#x20AC;&#x201C; void replace(Object newElement) â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : newElement!=null, isEmpty()==false Ă&#x152; â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ă&#x152; &" f o v Â&#x201C; ÂŚe Â? Â&#x201D; Hâ&#x20AC;Ť×&#x203A;â&#x20AC;Ź šÂ&#x2122; è\ ÂŚD hâ&#x20AC;Ť×&#x203A;â&#x20AC;Ź šÂ&#x2122; èÂ&#x2013; Ă? Ăľ H . & " f_ 0 Au Â? H t ¡ §Â? Ăş H . â&#x20AC;&#x201C; Object getCursor() â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : isEmpty()==false Ă&#x152; â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : o Ă&#x152; Ă&#x203A; Ÿà Ă&#x201D; q # Qe Â? Â&#x201D; H
Ă&#x201E; â Âş\  Â? H null` ÂŚĂŹ Ă?¨ ø Â&#x160; 8 Â&#x201C; ÂŚ, Ă&#x2022; ÂŞX t O ¡ §Ă&#x153; Ăş ÂźÂ&#x20AC; & " f Â&#x2030; ÂłF & o v Â? Hâ&#x20AC;Ť×&#x203A;â&#x20AC;Ź š è\ Â&#x2122; ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . â&#x20AC;&#x201C; int size() â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ă&#x152; oĂ&#x203A; Ÿà Ă&#x201D;\  e Â? Â&#x201D; Hâ&#x20AC;Ť×&#x203A;â&#x20AC;Ź šÂ&#x2122; è_ > hĂ&#x192; Âş\ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . â&#x20AC;&#x201C; void clear() Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ă&#x152; oĂ&#x203A; Ÿà Ă&#x201D;\  e Â? Â&#x201D; HÂ&#x2014; ¸Â&#x17D; Hâ&#x20AC;Ť×&#x203A;â&#x20AC;Ź šÂ&#x2122; è\ ÂŚ] j Ă´ Ă&#x2021; . â&#x20AC;˘ â&#x20AC;&#x201C; boolean isEmpty() â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ă&#x152; oĂ&#x203A; Ÿà Ă&#x201D; q # Qe Ă&#x153; Â&#x201D; ÂźÂ&#x20AC; true\ ÂŚĂŹ Ă?¨ ø Â&#x160; 8 Â&#x201C; ÂŚĂ&#x2022; ÂŞX t O ¡ §Ă&#x153; Ăş ÂźÂ&#x20AC; false\ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . â&#x20AC;&#x201C; boolean isFull() â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ă&#x152; oĂ&#x203A; Ÿà Ă&#x201D; T ` q e Ă&#x153; Â&#x201D; ÂźÂ&#x20AC; true\ ÂŚĂŹ Ă?¨ ø Â&#x160; 8 Â&#x201C; ÂŚĂ&#x2022; ÂŞX t O ¡ §Ă&#x153; Ăş ÂźÂ&#x20AC; false\ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . â&#x20AC;&#x201C; boolean gotoBeginning() b Â&#x201A; 9 Ă?Z : Ă&#x152; oĂ&#x203A; Ÿà Ă&#x201D; q # Qe t Â&#x201D; ¡ § Ăş Ă´ Ă&#x2021; . â&#x20AC;˘ â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : o Ă&#x152; Ă&#x203A; Ÿà Ă&#x201D; q # Qe Ă&#x153; Â&#x201D; ÂźÂ&#x20AC; false\ ÂŚĂŹ Ă?¨ ø Â&#x160; 8 Â&#x201C; ÂŚ, Ă&#x2022; ÂŞX t O ¡ §Ă&#x153; Ăş ÂźÂ&#x20AC; & " f\ ÂŚo Ă&#x203A; Ÿà Ă&#x201D;_ % Â&#x192;6 §Ă&#x153; ÂŁ ÂźÂ&#x2013; Ă?s 1 x l Â&#x201C; ÂŚ true\ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . â&#x20AC;&#x201C; boolean gotoEnd() â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : Ă&#x152; oĂ&#x203A; Ÿà Ă&#x201D; q # Qe t Â&#x201D; ¡ § Ăş Ă´ Ă&#x2021; . â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : o Ă&#x152; Ă&#x203A; Ÿà Ă&#x201D; q # Qe Ă&#x153; Â&#x201D; ÂźÂ&#x20AC; false\ ÂŚĂŹ Ă?¨ ø Â&#x160; 8 Â&#x201C; ÂŚ, Ă&#x2022; ÂŞX t O ¡ §Ă&#x153; Ăş ÂźÂ&#x20AC; & " f\ ÂŚo Ă&#x203A; Ÿà Ă&#x201D;_ = QĂ&#x153; ĂĽ ÂźÂ&#x2013; Ă?s 1 x l ÂŚ true\ Â&#x201C; ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . â&#x20AC;&#x201C; boolean gotoNext() 2
â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : Ă&#x152; oĂ&#x203A; Ÿà Ă&#x201D; q # Qe t Â&#x201D; ¡ § Ăş Ă´ Ă&#x2021; . â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : & Ă&#x152; " f o Ă&#x203A; Ÿà Ă&#x201D;_ = Q\ ĂĽ  e Ă&#x153; Â&#x201D; ÂźÂ&#x20AC; false\ ÂŚĂŹ Ă?¨ ø Â&#x160; 8 Â&#x201C; ÂŚ, Ă&#x2022; ÂŞX t O ¡ §Ă&#x153; Ăş ÂźÂ&#x20AC; & " f\ ÂŚĂ&#x2022; ÂŞ 6 §â&#x20AC;Ť×&#x203A;â&#x20AC;Ź ÂŁ šÂ&#x2122; è\ ÂŚ o v Â&#x2022; ¸2 ¤ Â&#x; s1 x l Â&#x201C; ÂŚ true\ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . â&#x20AC;&#x201C; boolean gotoPrior() â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : Ă&#x152; oĂ&#x203A; Ÿà Ă&#x201D; q # Qe t Â&#x201D; ¡ § Ăş Ă´ Ă&#x2021; . â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : & Ă&#x152; " f o Ă&#x203A; Ÿà Ă&#x201D;_ % Â&#x192;6 §\ ÂŁ  e Ă&#x153; Â&#x201D; ÂźÂ&#x20AC; false\ ÂŚĂŹ Ă?¨ ø Â&#x160; 8 Â&#x201C; ÂŚ, Ă&#x2022; ÂŞX t O ¡ §Ă&#x153; Ăş ÂźÂ&#x20AC; & " f\ ÂŚs Â&#x201E; â&#x20AC;Ť×&#x203A;â&#x20AC;Ź šÂ&#x2122; è\ ÂŚ o vÂ&#x2022; ¸2 ¤ Â&#x; s1 x l Â&#x201C; ÂŚ true\ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . â&#x20AC;&#x201C; void showStructure() â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : \ Ă&#x152; 6 O § ÂŁ â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : o Ă&#x152; Ă&#x203A; Ÿà Ă&#x201D;\  e Â? Â&#x201D; HÂ&#x2014; ¸Â&#x17D; HĂ&#x152; o^ Â? Â&#x2030;\ ÂŚĂ&#x2DC; Τ Ă´ 4 Ă&#x2021; . ĂŤ Â&#x2013;Â&#x20AC; Ă&#x; Â&#x2022;o Â? Ă&#x203A; Ÿà Ă&#x201D; q # Qe Ă&#x153; Â&#x201D; ÂźÂ&#x20AC; â&#x20AC;&#x153;List is empty.â&#x20AC;?\ ÂŚĂ&#x2DC; ÂŚ Ă´ 4 § Ă&#x2021; . sB jÂ&#x2122; èĂ&#x2014; ÂźÂ? Hn ! Q^
` ç ÂŚ3 q& l Ă&#x153; h ÂźÂ&#x2013; Ă?ĂŤ Â&#x2013; Ă&#x; 6 xÂ?  a ) .
4
PreLab â&#x20AC;˘ List ADTÂ? Hz ´_ v 3\ Ăž  " f½ ¨Â&#x2030; ³ô & Ă&#x2021; PointList ADTĂź <°  Â&#x201C; Ăş r7 Ă&#x2030; xĂ&#x20AC; ĂĄ Ă&#x201C;_ B jÂ&#x2122; èĂ&#x2014; Âź\ Ϋ §s Ăş ] j/ NĂ´ B Ă&#x2021; . \  " fÂ? H9 tA Ăž Ă&#x203A; Âź [ ts Ăž / N: B xĂ&#x153; Â&#x; ÂźÂ&#x2013; Ă?] j/ NK B Â? HB jÂ&#x2122; èĂ&#x2014; Âź[ t` Ăž ÂŚ interfaceÂ&#x2013; Ă?&
_ Ăą # Â&#x152; 6 xĂ´  Ă&#x2021; . s \ ÂŚ: xK Â&#x; 9 tA Ăž Ă&#x203A; Âź\ ÂŚ 6 x  Â? H 6 x  \  > # QÂ&#x2039; ĂĄ " x 7Ă&#x20AC; Ă&#x201C;_ B jÂ&#x2122; èĂ&#x2014; Âź e ` Â&#x201D; ÂŚ Â&#x201C; â&#x20AC;Ť×&#x203A;â&#x20AC;Ź t S Â&#x2030;Â&#x2019; X ` ÂŚĂ&#x2014; ÂŚĂ&#x192; Âşe > Â&#x201D; 9, _ 9 tA Ăž Ă&#x203A; Âź\  @ /Ă´ Ă&#x2021;s K \ ÂŚ Â&#x201E; Ă&#x201C;Ă&#x153; ½ Âź Â&#x2013; Ă?~ > 1 Â? r9 Ă&#x2030; tA Ăž Ă&#x203A; Âź\ ÂŚ 6 x½  Ă&#x2030;Ă&#x192; + Âşe Â&#x201D; . â&#x20AC;˘ interfaceÂ? H9 tA Ăž Ă&#x203A; Ÿß <Âť Ă&#x201E; > &
_ Ăą t ĂŤ Â&#x2013; Ă&#x; 6 §þ ÂŁ °  Â&#x201C; Ăş r Ă&#x2030; s & s h e Â&#x201D; . â&#x20AC;&#x201C; interfaceÂ? HĂ? r! l Q Ă&#x192; Âş\ ÂŚ | Ă&#x192; 9 Âş\ O . Ă&#x2022; ÂŞ Q Â&#x153;Ă&#x192; Š ÂşÂ? H&
_ Ăą ½ Ă&#x2030;Ă&#x192; + Âşe Â&#x201D; . Â&#x201C; ' ` Â&#x2026;s Ă&#x203A; Âź\  &
_ Ăą Â? a ) Â&#x153;Ă&#x192; Š ÂşÂ? H 1 xĂ&#x153; l ÂźÂ&#x2013; Ă? public static finals . " f Â&#x153;Ă&#x192; Š Âş\ ÂŚÂ&#x201A; Â&#x192; ½ Ă&#x2030;M + :s ` â&#x20AC;Ť×&#x203A;â&#x20AC;Ź ÂŚĂ&#x2019; t| q Ă&#x152; Ă&#x201E; # Â&#x152;Â&#x2022; ¸Â? a ) . â&#x20AC;&#x201C; B jÂ&#x2122; èĂ&#x2014; Âź_ ? /6 x`  Œ&
_ Ăą ½ Ă&#x2030;Ă&#x192; + Âş\ O . 7 ¤, Â&#x2014; ÂŁ ¸Â&#x17D; HB jÂ&#x2122; èĂ&#x2014; ÂźÂ? H abstract B jÂ&#x2122; èĂ&#x2014; Âźs . Ă&#x2022; ÂŞ Q abstract v 0 >Ă&#x2014; Âź\ ÂŚ 6 x  t Â? H¡ §Â? Ăş H . â&#x20AC;&#x201C; B jÂ&#x2122; èĂ&#x2014; ÂźÂ? H 1 xĂ&#x153; l ÂźÂ&#x2013; Ă? public B jÂ&#x2122; èĂ&#x2014; Âźs . " fÂ&#x201A; Â&#x192; ½ Ă&#x2030;M + : public` ÂŚ 6 x  t ¡ § Ăş Â&#x2022; ¸Â? a ) . â&#x20AC;&#x201C; interface_ Â&#x201C; Ă&#x203A; ÂźÂ&#x2021; Ă&#x203A; Âź\ ÂŚĂ&#x2019; t$ q
½ Ă Ă&#x2030;Ă&#x192; + Âş\ O . â&#x20AC;˘ List interface public interface List{ // List Manipulation void insert(Object newElement); void remove(); void replace(Object newElement); void clear(); // List Status int size(); boolean isEmpty(); boolean isFull(); // Cursor Manipulation boolean gotoBeginning(); boolean gotoEnd(); boolean gotoNext(); boolean gotoPrior(); // Element Retrieve Object getCursor(); // Debugging Purpose void showStructure(); } Œ½ ¨Â&#x2030; Âł & Â? H ArrayList 9 tA Ăž Ă&#x203A; Âź\ ΢ a$
Ă r Â&#x161; ¸. â&#x20AC;˘ List interface\ public class ArrayList implements List{ int DEF_LIST_CAPACITY = 10; private int size = 0; 3
private int cursor = -1; private Object[] element; ... } • TestListArray\ ¦s 6 x # ½ ¨ ³ô & Ç ArrayList\ ¦ ô Ç . – _ Û ¼à Ô~ ÓZ ½ O 7 xÀ á Ó = Q\ å ¶ { ú 9 % 6 §Â £ Ò' Y V Ð~ Óë ½ H = Q\ å " fì Í@ ø / Ð~ Óë ½ H & " f0 Au \ e Hכ ¹ è ] j æç × \ ß ¶ { ú 9 = Q\ å e Hכ ¹ è ] j % 6 §\ £ e Hכ ¹ è ] j כ ¹ èØ ¦§ 4 כ ¹ è §^ o Û ¼à Ô ^ ] j
5
"§
î
î +a +b +c +d <NN >PP +e +f +f >@ =g c
l@ /÷ & H õ abcd abcd abcd acd aceffd aceff ceff c geff List is empty
q ¦
In-Lab 1 • o Û ¼à Ô? /\ # Q ¹ " כ è_ : ¤& £
0 ñ Au \ ¦
½ â É + כ 9 ¹ 7 x7 á xe á ` ¦Ã ºe . s \ ¦0 Aô Ç 6 §B £ j è× ¼\ ¦½ ¨ ³ & . – void moveToNth(int n) • b 9 ÐZ : 0 ≤n<size Ì • Ö ³ ÐZ : & Ì " f 0 Au ô Çכ ¹ è\ ¦] j ¦s כ ¹ è\ ¦o Û ¼à Ô_ n P :כ ¹ è Ðs 1 xô l Ç . & " f Hכ ¹ è\ ¦` | A 0u Ðs 1 xô l Ç . \ V) o Û ¼à Ô_ I © 6 §õ £ ° ú ¦ . 0 [a] 1 [b] 2 [c] 3 [d] 4 [e] @5 [f] 6 [g] 7 [h] cursor 5\ e ` ¦M : moveToNth(2)\ ¦ o Û ¼à Ô_ I © H 6 §õ £ ° ú . 0 [a] 1 [b] @2 [f] 3 [c] 4 [d] 5 [e] 6 [g] 7 [h]
6
In-Lab 2 • o Û ¼à Ô? /\ # Q £ " ¤ :&
כ ñ ¹ è $ ÷ © &# Qe H0 Au \ ¦¹ Ô` 1 ¦ כ 9 ¹ 7 x7 á xe á ` ¦Ã ºe . s \ ¦0 Aô Ç 6 §B £ j è × ¼\ ¦½ ¨ ³ & . – boolean find(Object searchElement) b 9 ÐZ : isEmpty()==false Ì • • Ö ³ ÐZ : & Ì " f 0 Au ô Çכ ¹ è Ò' Ò o # Å Ò# Q Ì o^ ü <? /6 xs ° ú rÌ É o^ \ ¦¹ ÔÜ 1 ¼ true\ ¦ì Í ø 8 ¨ ¦ , \ Ü O ¼ false\ ¦ì ͨ ø ô 8 Ç . ¹ Ô 1 ¦ HÌ o^ o Û ¼à Ô? /\ e Ü ¼ & " f HÕ ªכ ¹ è\ ¦ o v ¸2 ¤s 1 xK l 9, \ Ü O ¼ & " f_ 0 Au H t · § ú ô Ç . \ V) o Û ¼à Ô_ I © 6 §õ £ ° ú ¦ . 0 [a] 1 [b] 2 [c] 3 [d] 4 [e] @5 [f] 6 [g] 7 [h] cursor 5\ e ` ¦M : find(new Character(c))\ ¦ o Û ¼à Ô_ I © H 6 §õ £ ° ú . 0 [a] 1 [b] @2 [c] 3 [d] 4 [e] 5 [f] 6 [g] 7 [h]
4
7
Post-Lab • ¶ { ú 9 , ] j\ èכ ¹÷ & H¨
ç î Hq 6 x` ¦> í ß .
5
c °2005, sangjin@kut.ac.kr
Â&#x201E; Ă&#x201E;Â&#x2122; Â&#x2013;Â&#x2030; ÂŹĂ&#x2039; ĂŹĂ? ĂŚÂ&#x203A; P ò Laboratory 5. Stack ADT
1
Â? Ă&#x2014;X Ă&#x2019; Ă&#x201E; ĂŹ â&#x20AC;˘ C \ ` P ÂŚs 6 x  Â&#x152; ## 6 3 xĂ&#x203A;  ŸĂ&#x2014; Â&#x2DC; ADT\ Ăž Œ½ ¨Â&#x2030; ÂłK & Â&#x2018; r : .
2
4 ~ Âż â&#x20AC;˘ Ă&#x203A; ÂźĂ&#x2014; Â&#x2DC;Â&#x2022; Ăž ¸o Ă&#x203A; Ÿà Ă&#x201D;Ăź < Ă° Ă? t ø Â&#x2013; Ă?°  Â&#x201C; Ăş r Ă&#x2030; { _ 9 â&#x20AC;Ť×&#x203A;â&#x20AC;Ź šÂ&#x2122; è[ ts Ăž " fÂ&#x2013; Ă?Â&#x201A; + AÂ&#x203A; Ăž a> ' \ ÂŚ t Â&#x2022; ¸2 ¤Ă&#x201E; Â&#x; Âťt Â? HX <s ' ½ ¨Â&#x203A; ¸s . s & Â&#x201C; h rĂ&#x203A; Ă&#x2030; ÂźĂ&#x2014; Â&#x2DC;\ Ăž  " fâ&#x20AC;Ť×&#x203A;â&#x20AC;Ź šÂ&#x2122; èÂ? HÂ&#x2020; Ă&#x201C; ½ Â&#x153;Ă&#x203A; Š ÂźĂ&#x2014; Â&#x2DC;d Ăž v(top)\  Ă&#x2020; Ă&#x2019; á &9, ] j Â&#x2022; ¸Â&#x2020; Ă&#x201C; ½ Â&#x153;d Š v\  " fs Ă&#x20AC; Ă&#x2019;# QÂ&#x201D; . â&#x20AC;˘ C \ ` P ÂŚs 6 x  Â&#x152; #Ă&#x203A; ÂźĂ&#x2014; Â&#x2DC;` Ăž ά ½Â&#x2030; Âł & l 0 AK Object 9 tA Ăž Ă&#x203A; Âź\ ÂŚ 6 x½  Ă&#x2030;Ă&#x192; + Âşe Â&#x201D; . Ă&#x2022; ÂŞ Q Object 9 tA Ăž Ă&#x203A; Âź\ ÂŚ 6 x  Â&#x20AC; 4 ¤ Â&#x; ~ Ă&#x201C;d ½ (by copy)` Â&#x201D; ÂŚ 6 x½  Ă&#x2030;Ă&#x192; + Âş\ Â&#x201C; O ÂŚ, Â&#x201A; Ă?Â&#x203A; Ă&#x192; ¸~ Ă&#x201C;d ½ (by reference)` Â&#x201D; ÂŚ 6 x½  Ă&#x2030;Ă&#x192; + º¾ Ă&#x161;\ 1  \ O . Â&#x201A; Ă?Â&#x203A; Ă&#x192; ¸~ Ă&#x201C;d ½ ` Â&#x201D; ÂŚ 6 x  Â&#x20AC; 4 ¤ Â&#x; ~ Ă&#x201C;d ½ \ Â&#x201D;  q K Â&#x153;@ Š /& Ă&#x153; h ÂźÂ&#x2013; Ă?½ ¨Â&#x2030; Âłs & ~ Â&#x201C; 1 ÂŚ/ Nç B Â&#x2013; Ă&#x; 6 x8  ¤Â&#x20AC; ÂŁ s $
0 Ă xÂ&#x20AC; p \  " fa ~Ă&#x153; % Âź Ăź @Ă&#x201A; Ă&#x2019;\  " fĂ&#x152; o^ Â? Â&#x2030; _ Â&#x153;I Š \ ÂŚ&
K Ăą Â&#x201D; ~ Ă&#x201C;Z ½ Ăź O @\  Â? r~ Ă&#x2030; Ă&#x201C;Z ½ Ă&#x153; O ÂźÂ&#x2013; Ă?Â&#x203A; ¸ Â&#x2022;½ Â&#x152; Ă&#x2030;Ă&#x192; + Âş e Â&#x201D; . \ V) s Ă&#x201D; Ă&#x161; Qo _ ArrayListÂ? HÂ&#x201A; Ă?Â&#x203A; Ă&#x192; ¸~ Ă&#x201C;d ½ ` Â&#x201D; ÂŚ 6 x  # Â&#x152;½ ¨Â&#x2030; ³á & &# Qe Â&#x201D; . class MyClass{ private int value; public MyClass(int val){ value = val; } public int get(){ return value; } public void set(int val){ value = val; } public String toString() { return ""+value; } } public class FirstSample { public static void main(String[] args){ ArrayList list = new ArrayList(); MyClass c1 = new MyClass(10); MyClass c2 = new MyClass(20); MyClass c3 = new MyClass(30); list.add(c1); list.add(c2); list.add(c3); for(int i=0; i<3; i++){ System.out.println(list.get(i)); } c1.set(15); for(int i=0; i<3; i++){ System.out.println(list.get(i)); } } }
' Ă? P : forĂŤ H_ Ă&#x2DC; Τ 4 Ăľ : 10 20 30 Âż º P : forĂŤ H_ Ă&#x2DC; Τ 4 Ăľ : 15 20 30 â&#x20AC;˘ Â&#x201C; ' ` Â&#x2026;s Ă&#x203A; Âź\ ÂŚs 6 xĂ´  Ă&#x2021;4 ¤ Â&#x; ~ Ă&#x201C;d ½ ` Â&#x201D; ÂŚ 6 x  Â&#x20AC; 0 A\ V\  " f% Â&#x192;! 9 3 tA Ăž Ă&#x203A; Âź\  " f] j/ N B Â? Ht &
Â? Ăą a~ ) Ă&#x201C;Z ½ Ăź O @\  Â? H Â? r Ă&#x2030; Ă&#x201C;Z ½ ~ Ă&#x153; O ÂźÂ&#x2013; Ă?Ă&#x152; o^ Â? Â&#x2030;_ Â&#x153;I Š \ Œ¸ Â&#x203A; Â&#x2022;½ Â&#x152; Ă&#x2030;Ă&#x192; + Âş\ O .
1
â&#x20AC;˘ s z ´_ v\ Ăž  " fÂ? H 6 §þ ÂŁ °  Â&#x201C; Ăş r Listable interface\ Ă&#x2030; ÂŚs 6 x  # Â&#x152;Ă&#x203A; ÂźĂ&#x2014; Â&#x2DC;` Ăž Œ½ ¨Â&#x2030; Âł & # Â&#x152;Â&#x2018; r : . public interface Listable extends Cloneable{ Object clone(); } 6 §Â&#x201C; ÂŁ r Listable interface ½ Ă&#x2030; ¨Â&#x2030; ³ô & Ă&#x2021;9 tA Ăž Ă&#x203A; Âź_ \ VÂ? H 6 §þ ÂŁ °  ú . public class cInteger implements Listable { private int value; public cInteger(){ value = 0; } public cInteger(int val){ value = val; } public int get(){ return value; } public void set(int val){ value = val; } public Object clone(){ try{ return super.clone(); } catch(CloneNotSupportedException e){ return null; } } public String toString(){ return ""+value; } }
3
Stack ADT â&#x20AC;˘ ½ ¨Â&#x203A; ¸: Â&#x201A; + AĂ Ăž H" f\ ÂŚ t 9, y Â&#x2022;â&#x20AC;Ť×&#x203A;â&#x20AC;Ź Â&#x152; šÂ&#x2122; è_ Ă H" fÂ? HÂś Â&#x161;{ Ăş Â? 9 aĂ ) H" f\  _ K &
Â? Ăą a ) . Ă&#x2020; Ă&#x2019; Â? HĂ&#x203A; ÂźĂ&#x2014; Â&#x2DC;d Ăž v\  s Ă&#x20AC; Ă&#x2019;# Qt 9, ] j Â&#x2022; ¸Ă&#x203A; ÂźĂ&#x2014; Â&#x2DC;Â&#x2022; Ăž ¸d v\  " f sĂ&#x20AC; Ă&#x2019;# QÂ&#x201D; . s z ´_ v\ Ăž  " fÂ? HC \ ` P ÂŚs 6 xĂ´  Ă&#x2021;Ă&#x203A; ÂźĂ&#x2014; Â&#x2DC; ADT\ Ăž Œ½ ¨Â&#x2030; ³ô & Ă&#x2021; . â&#x20AC;˘ ½ ¨$
â&#x20AC;Ť×&#x203A;â&#x20AC;Ź à šÂ&#x2122; è: Object { 9 _ â&#x20AC;Ť×&#x203A;â&#x20AC;Ź šÂ&#x2122; è[ t` Ăž ÂŚ$  Â&#x153;½ Š Ă&#x2030;C + \ , Ă&#x203A; P ÂźĂ&#x2014; Â&#x2DC;` Ăž ÂŚ] H X ½ Ă&#x2030;M + :Â&#x20AC; 9 â&#x20AC;Ť×&#x203A;â&#x20AC;Ź šô Ă&#x2021;Ă&#x203A; ÂźĂ&#x2014; Â&#x2DC;d Ăž v&
Â&#x2DC; Ăą Ă? â&#x20AC;˘ Â&#x192; Ă Â&#x2013; Ă&#x; Â&#x2018; rĂ&#x2019; : t$ q
Ă : Stack() â&#x20AC;&#x201C; l â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : 6 Ă&#x152; x|  Ă&#x201C;s ž DEF_STACK_CAPACITYÂ&#x201C; Â&#x2018; Ă&#x203A; ÂźĂ&#x2014; Â&#x2DC;` Ăž ÂŚĂ&#x2019; t$ q
Ă´ Ă Ă&#x2021; . Ă&#x203A; Âź% 7 Â&#x2DC;_ Ă&#x2019; t$ q
Â? Ă H setup() B jÂ&#x2122; è Âź\ Ă&#x2014; ÂŚs 6 xĂ´  Ă&#x2021; . â&#x20AC;&#x201C; Ă&#x2019; t$ q
Ă : Stack(int capacity) â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : capacity>0 Ă&#x152; Ă&#x2013; ÂłÂ&#x201A; Ă?Z : capacity>0s Ă&#x152; Â&#x20AC; 6 x|  Ă&#x201C;s ž capacityÂ&#x201C; Â&#x2018; Ă&#x203A; ÂźĂ&#x2014; Â&#x2DC;` Ăž ÂŚĂ&#x2019; t$ q
Ă Â&#x201C; ÂŚ, Ă&#x2022; ÂŞX t O ¡ §Ă&#x153; Ăş ÂźÂ&#x20AC; 6 x|  Ă&#x201C;s ž â&#x20AC;˘ DEF_STACK_CAPACITYÂ&#x201C; Â&#x2018; Ă&#x203A; ÂźĂ&#x2014; Â&#x2DC;` Ăž ÂŚĂ&#x2019; t$ q
Ă´ Ă Ă&#x2021; . Ă&#x203A; ÂźĂ&#x2014; Â&#x2DC;_ Ăž Ă&#x2019; t$ q
Â? Ă H setup() B jÂ&#x2122; èĂ&#x2014; Âź\ ÂŚs 6 xĂ´  Ă&#x2021; . â&#x20AC;&#x201C; Ă&#x2019; t$ q
Ă Â&#x2022; ¸š §s ÂĄ : void setup(int capacity) sB jÂ&#x2122; èĂ&#x2014; ÂźÂ? HĂ&#x2019; t$ q
Ă ĂŤ Â&#x2013; Ă&#x; 6 x  Ă&#x2122; ÂźÂ&#x2013; Ă? private B jÂ&#x2122; èĂ&#x2014; ÂźÂ&#x2013; Ă?ĂŤ Â&#x2013;Â&#x17D; Ă&#x; H . â&#x20AC;˘ â&#x20AC;˘ 9 bÂ&#x201A; Ă?Z : capacity>0, Ă&#x152; â&#x20AC;˘ Ă&#x2013; ÂłĂ? Â&#x201A;Z :  Ă&#x152; x 6| Ă&#x201C;s ž capacityÂ&#x201C; Â&#x2018; Ă&#x203A; ÂźĂ&#x2014; Â&#x2DC;` Ăž ÂŚĂ&#x2019; t$ q
Ă´ Ă Ă&#x2021; . â&#x20AC;&#x201C; void push(Object newElement) â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : newElement!=null, isFull()==false Ă&#x152; Ă&#x2013; ÂłÂ&#x201A; Ă?Z : h Ă&#x152; Dâ&#x20AC;Ť×&#x203A;â&#x20AC;Ź šÂ&#x2122; è\ ÂŚĂ&#x203A; ÂźĂ&#x2014; Â&#x2DC;d Ăž v\  Ă&#x2020; Ă&#x2019; Ă´ Ă&#x2021; . â&#x20AC;˘ x p Ă´V Ă&#x2021; \Ăź @: StackOverflowException â&#x20AC;˘ 0 â&#x20AC;&#x201C; void pop() b Â&#x201A; 9 Ă?Z : isEmpty()==false Ă&#x152; â&#x20AC;˘ â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Âź Ă&#x152; Ă&#x203A;Ă&#x2014; Â&#x2DC;d Ăž v\  e Â? Â&#x201D; Hâ&#x20AC;Ť×&#x203A;â&#x20AC;Ź šÂ&#x2122; è\ ÂŚ] j Ă´ Ă&#x2021; . x p Ă´V Ă&#x2021; \Ăź @: StackUnderflowException â&#x20AC;˘ 0 â&#x20AC;&#x201C; Object top()
2
â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : isEmpty()==false Ă&#x152; â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Âź Ă&#x152; Ă&#x203A;Ă&#x2014; Â&#x2DC;d Ăž v\  e Â? Â&#x201D; Hâ&#x20AC;Ť×&#x203A;â&#x20AC;Ź šÂ&#x2122; è\ ÂŚĂŹ Ă?¨ ø Â&#x160; 8 # Â&#x152;ĂŻ r . Ă&#x203A; ÂźĂ&#x2014; Â&#x2DC; Ăž ^ Â&#x2030;Â? H t ¡ §Â? Ăş H . â&#x20AC;˘ 0 x p Ă´V Ă&#x2021; \Ăź @: StackUnderflowException â&#x20AC;&#x201C; void clear() â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Âź Ă&#x152; Ă&#x203A;Ă&#x2014; Â&#x2DC;\ Ăž  e Â? Â&#x201D; HÂ&#x2014; ¸Â&#x17D; Hâ&#x20AC;Ť×&#x203A;â&#x20AC;Ź šÂ&#x2122; è\ ÂŚ] j Ă´ Ă&#x2021; . â&#x20AC;&#x201C; boolean isEmpty() â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Âź Ă&#x152; Ă&#x203A;Ă&#x2014; Â&#x2DC;s Ăž q # Qe Ă&#x153; Â&#x201D; ÂźÂ&#x20AC; true\ ÂŚĂŹ Ă?¨ ø Â&#x160; 8 Â&#x201C; ÂŚĂ&#x2022; ÂŞX t O ¡ §Ă&#x153; Ăş ÂźÂ&#x20AC; false\ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . â&#x20AC;&#x201C; boolean isFull() â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Âź Ă&#x152; Ă&#x203A;Ă&#x2014; Â&#x2DC;s Ăž T ` q e Ă&#x153; Â&#x201D; ÂźÂ&#x20AC; true\ ÂŚĂŹ Ă?¨ ø Â&#x160; 8 Â&#x201C; ÂŚĂ&#x2022; ÂŞX t O ¡ §Ă&#x153; Ăş ÂźÂ&#x20AC; false\ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . â&#x20AC;&#x201C; void showStructure() â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : \ Ă&#x152; 6 O § ÂŁ â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ă&#x203A; Ă&#x152; ÂźĂ&#x2014; Â&#x2DC;\ Ăž  e Â? Â&#x201D; HÂ&#x2014; ¸Â&#x17D; Hâ&#x20AC;Ť×&#x203A;â&#x20AC;Ź šÂ&#x2122; è\ ÂŚ topĂ&#x201A; Ă&#x2019;' bottom t Ă&#x2DC; Τ Ă´ 4 Ă&#x2021; . ĂŤ Â&#x2013;Â&#x20AC; Ă&#x; Â&#x2022;Ă&#x203A; Â? ÂźĂ&#x2014; Â&#x2DC;s Ăž q # Qe Ă&#x153; Â&#x201D; ÂźÂ&#x20AC; â&#x20AC;&#x153;Stack is empty.â&#x20AC;?\ ÂŚĂ&#x2DC; Τ Ă´ 4 Ă&#x2021; . s B jÂ&#x2122; èĂ&#x2014; ÂźÂ? Hn ! Q^
` ç ÂŚ3 q& l Ă&#x153; h ÂźÂ&#x2013; Ă?ĂŤ Â&#x2013; Ă&#x; 6 xÂ?  a ) .
4
PreLab â&#x20AC;˘ Pre-lab\  " fÂ? HC \ ` P ÂŚs 6 x  # Â&#x152;Ă&#x203A; ÂźĂ&#x2014; Â&#x2DC;` Ăž Œ½ ¨Â&#x2030; Âł & t ĂŤ Â&#x2013; post-lab\ Ă&#x;  " fÂ? HÂ&#x192; o Ă&#x203A; Ÿà Ă&#x201D;\ ÂŚs 6 x  # Â&#x152;Ă&#x203A; ÂźĂ&#x2014; Â&#x2DC;` Ăž Œ½ ¨Â&#x2030; ³½ & Ă&#x2030; + s â&#x20AC;Ť×&#x203A;â&#x20AC;Ź . " f 6 §þ ÂŁ °  Â&#x201C; Ăş r Stack interface\ Ă&#x2030; ÂŚ&
_ Ăą # Â&#x152; 6 xĂ´  Ă&#x2021; . public interface Stack { boolean isEmpty(); boolean isFull(); void clear(); void push(Object item) throws StackOverflowException; void pop() throws StackUnderflowException; Object top() throws StackUnderflowException; } â&#x20AC;˘ s Â&#x201C; ' ` Â&#x2026;s Ă&#x203A; Âź\ ÂŚ: xK Â&#x; ¡ Â&#x2DC;Ă&#x192; Ăş Âşe 1 Â&#x201D; ws p s z ´_ vĂ&#x201A; Ăž Ă&#x2019;' \ VĂź @% Â&#x192; o\ ÂŚ 6 x  # Â&#x152;Â&#x161; ¸Ă&#x20AC; Ă&#x201C;\ ÂŚ% Â&#x192;o Ă´ Ă&#x2021; . s \ ÂŚ0 AK 6 §þ ÂŁ °  Â&#x201C; Ăş rÂż Ă&#x2030; Âş t \ VĂź @Â&#x192; %o Ăž t 9A Ă&#x203A; Âź\ ÂŚ&
_ Ăą # Â&#x152; 6 xĂ´  Ă&#x2021; . public class StackOverflowException extends RuntimeException { public StackOverflowException(){ super("Push attempted on a full stack."); } public StackOverflowException(String msg){ super(msg); } } public class StackUnderflowException extends RuntimeException{ public StackUnderflowException(){ super("Pop or top attempted on a empty stack."); } public StackUnderflowException(String msg){ super(msg); } } Ă&#x152;` Â&#x2026;s t \  e Â? Â&#x201D; H lab05.zip\ ÂŚ ĂŽ r~ Ă&#x17D; Ă&#x192; Stack interface\ Œ½ ¨Â&#x2030; ³ô & Ă&#x2021; ArrayStack\ ÂŚ 6 xK  Â&#x2018; r : . â&#x20AC;˘ < â&#x20AC;&#x201C; TestStack` ÂŚs 6 xĂ´  Ă&#x2021;Â&#x2026; _Ă&#x203A; Ÿà Ă&#x201D;~ Ă&#x201C;Z ½ O
3
7 xÀ á Ó push pop push push top clear pop
"§
î
î +a +b +c +d -+e +f +g +n t c -
l @ /& ÷ H õ dcba ba gfeba StackOverflowException g Stack is empty StackUnderflowException
q ¦
• ½ ¨ ³ô & ÇÛ ¼× ` þ ¦s 6 x # F c ñ_ Ó 6 ü §s £ ` ¦ r³ É ð ³d & ` ¦ Há Ô ÐÕ ªÏ ` þ ¦ $
í . – F c ñ_ Ó 6 ü §s £ ` ¦ r³ É ð ³d & _ \ V) (xx(xx())x) ()x(x) ()((xxx)x) – F c ñ_ Ó 6 ü §s £ ¸ 3 ú w l a³ ) ð ³d & _ \ V) (xx(xx())x)x) ()(x(x) ()((xxx)x)( ÓZ ½ ~ O rÅ É Ò# Q ³ ð ³d & ` ¦% 6 §Â £ Ò' Y V Ð~ Óë ½ H " f ‘(’ë H \ ¦ë ß Õ ª ` כ ¦Û ¼× \ þ push ¦, ‘)’` ¦ë ß pop` ¦ô Ç . ð ³ ³d & _ ¸ Hë H \ ¦~ Óë ½ Hô ÇÊ ê\ Û ¼× s þ q # Qe t · §Ü ú ¼ ³ ð ³d & s ¸ 3 ú w÷ l &# Qe H ` כ ¦_ p ô Ç . < Ì` s t \e H Balanced.java\ ¦¢ a$
í . • F c ñü @\ × æF c ñ {}, @ /F c ñ [] t 6 x # ë ß H³ ð ³d & s ` ¦ rt É ½ ÉÃ + ºe ¸2 ¤ Balanced.java\ ¦ X S © .
5
InLab • Ä ºo H Ð: x s ³ ðl Z (infix notation)` O ¦s 6 x # í Õ ß td ü ` ¦ $
ô í Ç . s ³ ðl Z s O ê Í ø A í Õ ß td ü % ! 3 s í ß \ ¦¿ ºx í ß _ s \ 0 Au ¸2 ¤ $
í H~ Ód ½ ` ¦´ ô ú Ç . (3 + 4) ∗ (6/2) s ³ ðl Z O É r | Ðs à f ] X Ð ¦> í ½ ß ÉM + :\ Hë H] j \ t O ë ( ß É Ó' d # % o l \ HÄ º í H0 A \ ¦ ¦ 9K HÔ ¦¼ # Ês < e . • Ê êu ³ ðl Z (postfix notation)` O ¦s 6 x # í Õ ß td ü ` ¦ $
í ( É Ó' d # % o l s ³ ðl Z O \ q K ¼ o # . ê Êu ³ ðl Z \ O " f H A í Õ ß td ü % ! s 3 í ß \ ¦¿ ºx í ß 6 §\ £ Ð0 Au ¸ 2 ¤ $
ô í Ç . 34 + 62/∗ = 762/∗ = 73∗ = 21 Ê êu ³ ðl Z \ O f " H í ß ¨
÷ î & Hí H" f Т aA , ¤\ á " f ¸ rA É ¤Ü á ¼ Ð0 Au ô Ç . • Û ¼× ` þ ¦s 6 xô ÇÊ êu ³ ðl Z ¨ O
~ î ÓZ ½ O 6 § £ ¦ `ì Í4 ø ¤ô Ç . – Õ w ü \ ¦ë ß Û ¼× \ þ pushô Ç . Õ w ü \ ¦Û ¼× \ þ push½ ÉM + :\ H cInteger 9 tA þ Û ¼\ ¦s 6 xô Ç . Ê êu ³ ðl _ O Z : £ ¤$
í ô © Ç o à ºÕ w ü ë x ß í ß Ð 6 x½ ɺ + Ãe . – í ß \ ¦ë ß Û ¼× \ þ " f¿ ºx í ß \ ¦ pop # í ß \ ¦& 6 h x ¦Õ ª õ\ ¦ r Û ¼× \ þ pushô Ç . s z ´_ v\ þ " f Hs í ß ë ß ¦ 9ô Ç . • < Ì` s t \ " f Postfix.java\ ¦ î r~ Î Ã Ê êu ³ ðl Z í O Õ ß td ü ` ¦¨
î Há Ô ÐÕ ªÏ ` þ ¦¢ a$
í . – ¢ a$
` í ¦ 6 § £ ¦ `s 6 x # I Û ¼à Ô .
4
Â&#x17D; 7 xĂ&#x20AC; ĂĄ Ă&#x201C; Ă Â&#x192; Â&#x2013; Ă&#x; ĂŤ Â&#x2013;e Ă&#x; Â? Â&#x201D; H
Ă&#x201E; â Âş Ă Â&#x192; Â&#x2013; Ă&#x; Ă&#x2014; ĂŚ^ ?á o &# Qe Â? Â&#x201D; H
Ă&#x201E; â Âş1 Ă Â&#x192; Â&#x2013; Ă&#x; Ă&#x2014; ĂŚ^ ?á o &# Qe Â? Â&#x201D; H
Ă&#x201E; â Âş2 ¸Â&#x17D; Â&#x2014; HÂ&#x192; Ă Â&#x2013; Ă&#x; = Q\ ĂĽ  e Â? Â&#x201D; H
Ă&#x201E; â Âş 0 ž Âşl Â&#x2013;{ Ă&#x; ĂŠ Ă&#x2022; 9 w Ăź ¢ p a$
Ă Ă Â&#x2013;Ă&#x2022; Ă&#x; td Ăź Â&#x201D;
6
ĂĂź Â&#x2013; Ă&#x; t Ă&#x2022;d Â&#x201D; 34+ 34+52/* 93*2+14675-+* 20/ 9 4+
l @ /& á� H þ 7 14 28 32 divide-by-zero error 9 Illformed expression
q Â&#x201C; ÂŚ
PostLab â&#x20AC;˘ Â&#x192; ½ ¨Â&#x203A; ¸\ ÂŚs 6 x  # Â&#x152;Ă&#x203A; ÂźĂ&#x2014; Â&#x2DC;` Ăž Œ½ ¨Â&#x2030; ³½ & Ă&#x2030; +
Ă&#x201E; â Âş\  Â? H 6 §þ ÂŁ °  úÂ&#x201C; r inner 9 Ă&#x2030; tA Ăž Ă&#x203A; Âź\ ÂŚ&
_ Ăą # Â&#x152; 6 xĂ´  Ă&#x2021; . inner 9 tA Ăž Ă&#x203A; Ÿê Ă?9 ø tA Ăž Ă&#x203A; Âź? /Ă&#x201A; Ă&#x2019;\  &
_ Ăą Â? a9 ) tA Ăž Ă&#x203A; Âź\ Ϋ Â&#x2DC;Ă´ Ăş Ă&#x2021; . private class StackNode{ public Object info; public StackNode next; } â&#x20AC;˘ Â&#x192; ½ ¨Â&#x203A; ¸\ ÂŚ s6 x  Â&#x20AC; Ă&#x203A; ÂźĂ&#x2014; Â&#x2DC;s Ăž T ` q Â? H
Ă&#x201E; â ÂşÂ? HÂ&#x201C; ÂŚ 9 t ¡ § Ăş Â&#x2022; ¸Â? a ) . ΢ a$
Ă r Â&#x161; ¸. (Listable Â&#x201C; ' ` Â&#x2026;s Ă&#x203A; Âź\ ÂŚs 6 x  # Â&#x152;4 ¤ Â&#x; ~ Ă&#x201C;d ½ ` Â&#x201D; Œ½ ¨Â&#x2030; ³ô & Ă&#x2021; .) â&#x20AC;˘ LinkedStack.java\ â&#x20AC;˘ ¢ a$
Ă Â&#x20AC; TestStack` ÂŚs 6 x  # Â&#x152; Â&#x17D; K Â&#x2018; r : .
5
c °2005, sangjin@kut.ac.kr
Ä ¬Ë ìÍ æ P ò Laboratory 6. Queue ADT
1
×X Ò Ä ì • C \ ` P ¦s 6 x ## 6 3 xÇ © ADT\ ¦½ ¨ ³K & r : . • ½ ¨ ¸\ ¦ s6 x # # 6 3 xÇ © ADT\ ¦½ ¨ ³K & r : .
2
4 ~ ¿ • Ç © ¸o Û ¼à Ôü < ð Í t ø а ú r É { _ 9 כ ¹ è[ ts þ " f Ð + A þ a> ' \ ¦ t ¸2 ¤Ä »t HX <s ' ½ ¨ ¸s . s & h rÇ É ©\ " fכ ¹ è H Ó ½ © p+ ± '(rear)\ Æ Ò ÷ &9, ] j H Ó ½ © p· ± ¡(front)\ ú " fs À Ò# Q . • s z ´_ v\ þ " f H Object 9 tA þ Û ¼\ ¦s 6 xô Ç Ð Ã ¸~ Ód ½ ` ¦ 6 x # y ADT\ ¦½ ¨ ³ô & Ç . • ½ ¨ ¸\ ¦s 6 x # Ç ©\ ¦½ ¨ ³½ & É +
Ä â º\ H 6 §õ £ ° É ú r inner 9 tA þ Û ¼\ ¦&
_ ñ # 6 xô Ç . inner 9 tA þ Û ¼ Í9 ø ê tA þ Û ¼? /Â Ò\ &
_ ñ aþ ) t 9A Û ¼\ ¦´ ô ú Ç . private class QueueNode{ public Object info; public QueueNode next; } • ½ ¨ ¸\ ¦ s6 x Ç © T ` q H
Ä â º H ¦ 9 t · § ú ¸ a ) . • C \ ` P ¦s 6 xô ÇÇ ©_ ½ ¨ ³õ & ½ ¨ ¸\ ¦s 6 xô ÇÇ ©_ ½ ¨ ³_ & Ó to ü & h ¸_ v þ C \ ` P ¦s 6 xô ÇÇ ©_ ½ ¨ ³ &
½ ¨ ¸\ ¦s 6 xô ÇÇ ©_ ½ ¨ ³ & queue
queue
front
0
rear
1
size
front
rear
2
element
A
3
B
A
B
Queue ADT • ½ ¨$
כ í ¹ è: Object { 9 _ Ì o^ [ t þ • ½ ¨ ¸: + Aí þ H" f\ ¦ t 9, y כ ¹ è_ í H" f H¶ { ú 9 aí ) H" f\ _ K &
ñ a ) . Æ Ò H p+ ± '\ s À Ò# Qt 9, ] j Hp ±· ¡\ ú " fs À Ò# Q . • í ß – l rÒ : t$ q
í : Queue() • Ö ³ ÐZ : 6 Ì x| Ós ¾ DEF_QUEUE_CAPACITY Ç ©\ ¦Ò t$ q
ô í Ç . Ç ©_ Ò t$ q
í H setup() B j è× ¼\ ¦ 6 s xô Ç . – Ò t$ q
í : Queue(int capacity)
1
â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : capacity>0, Ă&#x152; â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : capacity>0s Ă&#x152; Â&#x20AC; 6 x|  Ă&#x201C;s ž capacityÂ&#x201C; Â&#x2018; Ă&#x2021; Š\ ÂŚĂ&#x2019; t$ q
Ă Â&#x201C; ÂŚ, Ă&#x2022; ÂŞX t O ¡ §Ă&#x153; Ăş ÂźÂ&#x20AC; 6 x|  Ă&#x201C;s ž DEF_QUEUE_CAPACITYÂ&#x201C; Â&#x2018; Ă&#x2021; Š\ ÂŚĂ&#x2019; t$ q
Ă´ Ă Ă&#x2021; . Ă&#x2021; Š_ Ă&#x2019; t$ q
Â? Ă H setup() B jÂ&#x2122; èĂ&#x2014; Âź\ ÂŚs 6 xĂ´  Ă&#x2021; . â&#x20AC;&#x201C; Ă&#x2019; t$ q
Ă Â&#x2022; ¸š §s ÂĄ : void setup(int capacity) â&#x20AC;˘ sB jÂ&#x2122; èĂ&#x2014; ÂźÂ? HĂ&#x2019; t$ q
Ă ĂŤ Â&#x2013; Ă&#x; 6 x  Ă&#x2122; ÂźÂ&#x2013; Ă? private B jÂ&#x2122; èĂ&#x2014; ÂźÂ&#x2013; Ă?ĂŤ Â&#x2013;Â&#x17D; Ă&#x; H . â&#x20AC;˘ 9 bÂ&#x201A; Ă?Z : capacity>0 Ă&#x152; â&#x20AC;˘ Ă&#x2013; ÂłĂ? Â&#x201A;Z :  Ă&#x152; x 6| Ă&#x201C;s ž capacityÂ&#x201C; Â&#x2018; Ă&#x2021; Š\ ÂŚĂ&#x2019; t$ q
Ă´ Ă Ă&#x2021; . â&#x20AC;&#x201C; void enq(Object newElement) b Â&#x201A; 9 Ă?Z : newElement!=null, isFull()==false Ă&#x152; â&#x20AC;˘ â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : h Ă&#x152; DĂ&#x152; o^ Â? Â&#x2030;\ ÂŚp Âą+ '\  Ă&#x2020; Ă&#x2019; Ă´ Ă&#x2021; . â&#x20AC;˘ \ VĂź @: QueueOverflowException, o Ă&#x203A; Ÿà Ă&#x201D; T ` q e ` Â&#x201D; ÂŚM :Âľ Ă?Ă&#x2019; 1 t q â&#x20AC;&#x201C; Object deq() â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : isEmpty()==false Ă&#x152; â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Âą Ă&#x152; ¡ p ÂĄ\ Ăş  e Â? Â&#x201D; HĂ&#x152; o^ Â? Â&#x2030;\ ÂŚ] j Â&#x201C; ÂŚ, s Ă&#x152; o^ Â? Â&#x2030;\ ÂŚĂŹ Ă?¨ ø Â&#x160; 8 # Â&#x152;ĂŻ r . â&#x20AC;˘ \ VĂź @: QueueUnderflowException, o Ă&#x203A; Ÿà Ă&#x201D; q # Qe ` Â&#x201D; ÂŚM :Âľ Ă?Ă&#x2019; 1 t q â&#x20AC;&#x201C; void clear() â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Š Ă&#x152; Ă&#x2021;\  e Â? Â&#x201D; HÂ&#x2014; ¸Â&#x17D; HĂ&#x152; o^ Â? Â&#x2030;\ ÂŚ] j Ă´ Ă&#x2021; . â&#x20AC;&#x201C; boolean isEmpty() â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Š Ă&#x152; Ă&#x2021; q# Qe Ă&#x153; Â&#x201D; ÂźÂ&#x20AC; true\ ÂŚĂŹ Ă?¨ ø Â&#x160; 8 Â&#x201C; ÂŚĂ&#x2022; ÂŞX t O ¡ §Ă&#x153; Ăş ÂźÂ&#x20AC; false\ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . â&#x20AC;&#x201C; boolean isFull() Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Š Ă&#x152; Ă&#x2021; T ` q e Ă&#x153; Â&#x201D; ÂźÂ&#x20AC; true\ ÂŚĂŹ Ă?¨ ø Â&#x160; 8 Â&#x201C; ÂŚĂ&#x2022; ÂŞX t O ¡ §Ă&#x153; Ăş ÂźÂ&#x20AC; false\ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . â&#x20AC;˘ â&#x20AC;&#x201C; void showStructure() b Â&#x201A; 9 Ă?Z : \ Ă&#x152; 6 O § ÂŁ â&#x20AC;˘ â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ă&#x2021; Ă&#x152; Š\  e Â? Â&#x201D; HÂ&#x2014; ¸Â&#x17D; HĂ&#x152; o^ Â? Â&#x2030;\ ÂŚĂ&#x2021; Š_ p¡ Âą ÂĄ\ Ăş  e Â? Â&#x201D; Hâ&#x20AC;Ť×&#x203A;â&#x20AC;Ź šÂ&#x2122; èĂ&#x201A; Ă&#x2019;' Y V@ /Â&#x2013; Ă?Ă&#x2DC; Τ Ă´ 4 Ă&#x2021; . ĂŤ Â&#x2013;Â&#x20AC; Ă&#x; Â&#x2022;Ă&#x2021; Â? Š q # Q Ă&#x153; Â&#x201D; e ÂźÂ&#x20AC; â&#x20AC;&#x153;Queue is empty.â&#x20AC;?\ ÂŚĂ&#x2DC; Τ Ă´ 4 Ă&#x2021; . s B jÂ&#x2122; èĂ&#x2014; ÂźÂ? Hn ! Q^ ç
` ÂŚ3 q& l Ă&#x153; h ÂźÂ&#x2013; Ă?ĂŤ Â&#x2013; Ă&#x; 6 xÂ?  a ) .
4
PreLab 1. â&#x20AC;˘ 6 §þ ÂŁ °  Â&#x201C; Ăş r Queue interface\ Ă&#x2030; ÂŚ&
_ Ăą Ă´ Ă&#x2021; 6 §\ ÂŁ  s interface\ Œ½ ¨Â&#x2030; ³ô & Ă&#x2021; ArrayQueueĂź < LinkedQueue\ Œ½ ¨ ³ô & Â&#x2030; Ă&#x2021; . public interface Queue { public boolean isEmpty(); public boolean isFull(); public void clear(); public void enq(Object item); public void deq() throws QueueUnderflowException; } ArrayQueueÂ? HC \ ` P ÂŚs 6 x  # Â&#x152;½ ¨Â&#x2030; ³ô & Ă&#x2021;# 6 3 xĂ&#x2021;  Š ADTs Â&#x201C; ÂŚ, LinkedQueueÂ? HÂ&#x192; ½ ¨Â&#x203A; ¸\ ÂŚs 6 x  # Â&#x152;½ ¨Â&#x2030; Âł & Ă´# Ă&#x2021; 6 3 xĂ&#x2021;  Š ADTs . â&#x20AC;˘ s z ´_ v\ Ăž  " f 6 x  Â? HÂż Âş t \ VĂź @% Â&#x192;o 9 tA Ăž Ă&#x203A; ÂźÂ? H 6 §þ ÂŁ °  ú . public class QueueOverflowException extends RuntimeException { public QueueOverflowException(){ super("Enqueue attempted on a full queue."); } public QueueOverflowException(String msg){ super(msg); } }
2
public class QueueUnderflowException extends RuntimeException { public QueueUnderflowException(String msg){ super("Dequeue attempted on a empty queue"); } public QueueUnderflowException(String msg){ super(msg); } } â&#x20AC;˘ < Ă&#x152;` Â&#x2026;s t \ Â e Â? Â&#x201D; H Lab06.zip
{ ` 9 ÂŚ ĂŽ r~ Ă&#x17D; Ă&#x192; ArrayQueueĂź < LinkedQueue\ ÂŚ 6 xK  Â&#x2018; r : . â&#x20AC;&#x201C; TestQueue.java\ ÂŚs 6 xĂ´  Ă&#x2021;_ Â&#x2026;Ă&#x203A; Ÿà Ă&#x201D;~ Ă&#x201C;Z ½ : main B O jÂ&#x2122; èĂ&#x2014; Âź_ '  Ă? P : Â&#x201C; ¢ ¸Â? HÂż º P : Â&#x201C; ` ÂŚĂ&#x2026; Ă&#x2019;$ % 3 Â&#x192; o # Â&#x152;y Â&#x2022;½ Â&#x152; ¨Â&#x2030; Âł` & ÂŚ_ Â&#x2026;Ă&#x203A; Ÿà Ă&#x201D;K Â&#x2018; r : . Â&#x17D; 7 xĂ&#x20AC; ĂĄ Ă&#x201C; push pop push push clear pop
"§
ĂŽ
ĂŽ +a +b +c +d -+e +f +g +n c -
l @ /& á� H þ (Top) a b c d (Bottom) (Top) c d (Bottom) (Top) e f g c d (Bottom) QueueOverflowException Queue is empty QueueUnderflowException
q Â&#x201C; ÂŚ
â&#x20AC;˘ Palindrome` ÂŚ Â&#x17D; Â? HĂĄ Ă&#x201D;Â&#x2013; Ă?Ă&#x2022; ÂŞĂ? Â&#x203A;` Ăž ÂŚĂ&#x2021; Šß <Ă&#x203A; ÂźĂ&#x2014; Â&#x2DC;` Ăž ÂŚÂ&#x2014; ¸¿ Âş 6 x  # Â&#x152;½ ¨Â&#x2030; ³ô & Ă&#x2021; . Palindromes ĂŞ Ă?¡ ø ÂĄĂ&#x153; Ăş ÂźÂ&#x2013; Ă?{ Ă&#x153; 9 Âź + ' Â&#x2013; Ă?{ 9 Ă&#x153; Âź °  Â&#x201C; Ăş rĂŤ Ă&#x2030; H \ ` P ÂŚĂş Â&#x2DC; ´ô Ă&#x2021; . \ V\ ÂŚ[ t# Ăž Q â&#x20AC;&#x153;madamâ&#x20AC;?Â&#x201C; r palindromes Ă&#x2030; . â&#x20AC;˘ Ă&#x2021; Šß <Ă&#x203A; ÂźĂ&#x2014; Â&#x2DC;` Ăž ÂŚ s6 xĂ´  Ă&#x2021; Palindrome Â&#x17D; ¡ Â&#x2DC;Â&#x201C; Ăş ÂŚo 7 § ÂŁ â&#x20AC;&#x201C; ĂŠ Â&#x2013;> Ă&#x; 1. h DĂ&#x2021; Šß <D hĂ&#x203A; ÂźĂ&#x2014; Â&#x2DC;` Ăž ÂŚĂŤ Â&#x2013;Â&#x17D; Ă&#x; H . Â&#x2013;> Ă&#x; 2. ĂŤ H \ \ P  e Â? Â&#x201D; Hy Â&#x2022;ĂŤ Â&#x152; H \  @ /K 6 §` ÂŁ ÂŚĂ´ Ă&#x2021; . â&#x20AC;&#x201C; ĂŠ â&#x20AC;˘ ĂŤ H %
ĂŤ ò H s Â&#x20AC; Â&#x2122; èÍ H Â&#x2013; Ă?Â
Ă´ â Ă&#x2021; . â&#x20AC;˘ s ĂŤ H \ ÂŚĂ&#x203A; ÂźĂ&#x2014; Â&#x2DC;\ Ăž  pushĂ´ Ă&#x2021; . â&#x20AC;˘ s ĂŤ H \ ÂŚĂ&#x2021; Š\  enqueueĂ´ Ă&#x2021; . â&#x20AC;&#x201C; ĂŠ Â&#x2013;> Ă&#x; 3. stillPalindromes Â? H boolean  Ă&#x192; Âş\ ÂŚ trueÂ&#x2013; Ă?[ & O
Ă´ Ăą Ă&#x2021; . â&#x20AC;&#x201C; ĂŠ Â&#x2013;> Ă&#x; 4. Š Ă&#x2021;\  Í H Â&#x152; Â&#x2122; z e Â&#x201C; Â&#x201D; ÂŚ stillPalindromes Â&#x201A; Ă?s Ă&#x192; Â&#x20AC; 6 §` ÂŁ ÂŚĂŹ Ă?4 ø ¤ô Â&#x; Ă&#x2021; . â&#x20AC;˘ Š Ă&#x2021; \" fĂŤ H \ ÂŚ dequeue # Â&#x152;Ă&#x203A; Âź% Â&#x2DC;\ 7  top\  e Â? Â&#x201D; HĂŤ H Ăź <q Â&#x201C; §ô Ă&#x2021; . â&#x20AC;˘ °  Ÿ Ăş Ă&#x153;Â&#x20AC; Âź Ă&#x203A;Ă&#x2014; Â&#x2DC;\ Ăž  " f pop` ÂŚ Â&#x201C; ÂŚ, Ă&#x2DC; Ă&#x201D;Â&#x20AC; stillPalindrome` ÂŚ falseÂ&#x2013; Ă?[ & O
Ă´ Ăą Ă&#x2021; . < Palindrome.java\ ÂŚ ĂŽ r~ Ă&#x17D; Ă&#x192; ¢ a$
Ă . â&#x20AC;˘ Palindrome.zipĂź
5
InLab 1 â&#x20AC;˘ è H Â&#x160;Ă&#x2021; 8 ŠÂ? H _ Â&#x; ĂÂ&#x201C; ' ĂŤ Â&#x2013;` Ă&#x; ÂŚs 6 x  # Â&#x152;Ă&#x2021; Š\ ÂŚĂ&#x201E; Âťt ½ Ă&#x2030;Ă&#x192; + Âşe Â&#x201D; . s M : frontÂ&#x2DC; Ă? Â? H rear\ ÂŚĂ&#x201E; Âťt K Ă&#x2021; Š_ % Â&#x192;6 §þ ÂŁ = Q` ĂĽ ÂŚ1 xr l \  ] X H l 6 xs  . â&#x20AC;˘ LinkedQueue\ ÂŚ Â&#x153;5 Š q~ Ă&#x2026; Ă&#x17D;Â&#x201C; Ă&#x192; r CircularLinkedQueue\ Ă&#x2030; ΢ a$
Ă . public class CircularLinkedQueue extends LinkedQueue { public CircularLinkedQueue(){ rear = null; } public boolean isEmpty(){ return (rear == null); } public void enq(Object item){ ... } public Object deq() throws QueueUnderflowException{ ... } public void showStructure(){ ... } } jÂ&#x2122; èĂ&#x2014; Âź_ ½ ¨Â&#x2030; ÂłÂ&#x201C; & r Ă&#x2030; 6 §Ă&#x2022; ÂŁ ÂŞa >` Ă&#x2039; ÂŚÂ&#x201A; Ă?Â&#x203A; Ă&#x192; ¸ . â&#x20AC;˘ enq B
3
queue
rear
queue
rear
3
2
A
A
B
1
queue
rear
3
2
A
B
B 1
â&#x20AC;˘ deq B jÂ&#x2122; èĂ&#x2014; Âź_ ½ ¨Â&#x2030; ÂłÂ&#x201C; & r Ă&#x2030; 6 §Ă&#x2022; ÂŁ ÂŞa >` Ă&#x2039; ÂŚÂ&#x201A; Ă?Â&#x203A; Ă&#x192; ¸ .
queue
rear
queue
rear
A
A
B
1 queue
rear
A
B
C
1
6
InLab 2 â&#x20AC;˘ Ă&#x201E; ÂşÂ&#x201A; Ă H0 AĂ&#x2021; Šê Ă?[ ø t# Ăž Q Â? HĂ H" fĂź < Â&#x153;Â&#x203A; Š a\ ' s O Ă&#x201E; ÂşÂ&#x201A; Ă H0 A\  Â&#x161; ¸Â? HĂ H" f &
á Ăą &Â? HĂ&#x2021; Š\ Ϋ Â&#x2DC;Ă´ Ăş Ă&#x2021; . â&#x20AC;˘ Ă&#x201E; ÂşÂ&#x201A; Ă H0 AĂ&#x2021; ŠÂ? H enqueue½ Ă&#x2030;M + :Ă&#x201E; ÂşÂ&#x201A; Ă H0 A\  œ Â&#x161;{ Ăş á 9 &Â? H0 Au &
á Ăą &Â&#x2022; ¸2 ¤½ Â&#x; ¨Â&#x2030; ³½ & Ă&#x2030;Ă&#x192; + Âşe Â&#x201C; Â&#x201D; ÂŚ, Ă?@ ø ĂŹ /Â&#x2013; Ă? dequeue½ Ă&#x2030;M + :Ă&#x2021; Š\  e Â? Â&#x201D; HÂ&#x2014; ¸Â&#x17D; Hâ&#x20AC;Ť×&#x203A;â&#x20AC;Ź šÂ&#x2122; è\ ÂŚ Â&#x17D; # Â&#x152; dequeueá &Â? Hâ&#x20AC;Ť×&#x203A;â&#x20AC;Ź šÂ&#x2122; è\ ÂŚ &
½ Ăą Ă&#x2030;Ă&#x192; + Âşe Â&#x201D; . â&#x20AC;˘ s z ´_ v\ Ăž  " fÂ? HÂ&#x201E; ~ Ă&#x201C;Z ½ ` O Œ½ ¨Â&#x2030; ÂłK & Â&#x2018; r : . 6 §` ÂŁ ΢ a$
Ă . public class PriorityArrayQueue extends ArrayQueue{ public PriorityArrayQueue(){ super(); } public PriorityArrayQueue(int capacity){ super(capacity); } public void enq(Object item) throws QueueOverflowException{ // implement this method } } ¨Â&#x2030; ³½ & Ă&#x2030;M + :Â&#x201C; ÂŚ9 Â&#x2020; Ă&#x201C; ½ â&#x20AC;˘ ½ 4
â&#x20AC;&#x201C; q Â&#x201C; §Â? H compareTo j BÂ&#x2122; èĂ&#x2014; Âź\ ÂŚs 6 xĂ´  Ă&#x2021; . â&#x20AC;&#x201C; C \ Â&#x201C; P rĂ Ă&#x2030; H¨ Â&#x160;C 8 \ s P . â&#x20AC;&#x201C; Ă&#x2021; Š q # Qe Â? Â&#x201D; H
Ă&#x201E; â Âş: front Ă&#x201D; ÂŚÂ , rear 7 x ÂŁ â&#x20AC;&#x201C; p ¹¡ ÂĄ\ Ăş  œ Â&#x161;{ Ăş 9 á &# Q Â? H
Ă&#x201E; â Âş: front y Â&#x2122;Â&#x2122; Â&#x152; è, rear Ă&#x201D; ÂŚÂ â&#x20AC;&#x201C; p Âą+ '\  œ Â&#x161;{ Ăş 9 á &# Q Â? H
Ă&#x201E; â Âş: front Ă&#x201D; ÂŚÂ , rear 7 x ÂŁ â&#x20AC;&#x201C; Ă&#x2014; Ìç Â&#x2013;\ Ă&#x;  œ Â&#x161;{ Ăş 9 á &# Q Â? H
Ă&#x201E; â Âş: Â&#x153;S Š \ !  2 § ÂŁ
7
PostLab â&#x20AC;˘ Ă&#x201E; ÂşÂ&#x201A; Ă H0 AĂ&#x2021; Š\ ÂŚÂ&#x192; ½ ¨Â&#x203A; ¸\ ÂŚs 6 x  # Â&#x152;½ ¨Â&#x2030; ÂłK & Â&#x2018; r : . â&#x20AC;˘ Â&#x192; ½ ¨Â&#x203A; ¸\ ÂŚ s6 xĂ´  Ă&#x2021;ĂŽ rÂ&#x201A; Ă H0 AĂ&#x2021; ŠÂ? H frontĂŤ Â&#x2013;` Ă&#x; ÂŚs 6 x  # Â&#x152;½ ¨Â&#x2030; ³½ & Ă&#x2030;Ă&#x192; + Âşe Â&#x201D; . 6 §` ÂŁ ΢ a$
Ă . public class PriorityLinkedQueue extends LinkedQueue{ public PriorityLinkedQueue(){ super(); } public void enq(Object item){ // implement this method } } â&#x20AC;˘ ½ ¨Â&#x2030; ³½ & Ă&#x2030;M + :Â&#x201C; ÂŚ9 Â&#x2020; Ă&#x201C; ½ Â&#x201C; §Â? H compareTo j BÂ&#x2122; èĂ&#x2014; Âź\ ÂŚs 6 xĂ´  Ă&#x2021; . â&#x20AC;&#x201C; q â&#x20AC;&#x201C; Ă&#x2021; Š q # Qe Â? Â&#x201D; H
Ă&#x201E; â Âş, p¡ Âą ÂĄ\ Ăş  œ Â&#x161;{ Ăş 9 á &# Q Â? H
Ă&#x201E; â Âş, p+ Âą '\  œ Â&#x161;{ Ăş 9 á &# Q Â? H
Ă&#x201E; â Âş, Ă&#x2014; Ìç Â&#x2013;\ Ă&#x;  œ Â&#x161;{ Ăş á 9 &# Q Â? H
Ă&#x201E; â Âş\ ÂŚÂ&#x201C; ÂŚ 9 # Â&#x152;½ ¨Â&#x2030; ³ô & Ă&#x2021; .
5
c °2005, sangjin@kut.ac.kr
Ä ¬Ë ìÍ æ P ò Laboratory 7. ArrayLinkedList ADT
1
×X Ò Ä ì • C \ ` P ¦s 6 x # o Û ¼à Ô ADT\ ¦½ ¨ ³K & r : .
2
4 ~ ¿ • ½ ¨ ¸ HÐ : x1 x& l Ü h ¼ Ð ¸× ¼\ ¦Ò t$ q
í ¦s [ t` þ ¦ # ½ ¨ ³ & t ë C ß \ ` P ¦s 6 x # ½ ¨ ³½ & ÉÃ + º ¸e . • C \ ` P ¦s 6 x # ½ ¨ ³½ & É +
Ä â º\ H6 x| Ós ¾ ] jô Ç÷ &# Qe Ü ¼Ù ¼ Ð1 x& l h ½ ¨ ¸ü <² o ú ¶ { ú ` 9 ¦½ ÉM + :T ` q e Ht # ô Ç . • ¢ ¸ô Ç 6 § £ ¸× ¼\ ¦ o v H í ' H Ð Ã ¸ { s 9 m 6 § £ ¸× ¼ $ ÷ © &# Qe HC \ _ P Ò o ° כs ú . " f 6 §õ £ ° ú r É ¸× ¼\ ¦ 6 xô Ç . protected class ListNode{ public Object info; public int next; } s
Ä â º\ £ § 6 ¸× ¼\ ¦ o v H í ' Ð Ã ¸ { s 9 m Ù ¼ Ð= Q å ¸× ¼\ ¦d Z > l 0 AK null ° `כ ú ¦ 6 x ½Ã É + º\ O . C \ _ P Ò o r6 É §Ã £ º | cà ¨ º\ Ü O ¼Ù ¼ Ð -1` ¦s 6 x # t } ¸× ¼\ ¦d Z ô > Ç . s \ ¦0 AK 6 § £ ° õ ú r É Ã © º\ ¦ 6 xô Ç . public static final int END = -1; • ½ ¨ ¸~ Ód ½ \ " fD h ¸× ¼\ ¦Æ Ò ½ ÉM + :\ H new í ß \ ¦s 6 x # r Û ¼% Ü 7 ¼ РÒ' D h ¸× ¼\ ¦0 Aô Ç/ N B ` ß ç ¦S X Ð # l r > ¸× ¼[ tõ þ ô Ç . t ë C ß \ ` P ¦s 6 x # o Û ¼à Ô\ ¦½ ¨ ³½ & ÉM + :\ Hr Û ¼% Ü 7 ¼ РÒ' D h ¸× ¼\ ¦0 Aô Ç/ Nç B ` ß ¦S X Ð H s כ m C \ _ P Ó× ½ æ\ " f 6 x÷ &t · § ú H Ó` ½ ¦ × þ # 6 x > a ) . s \ ` O ¦~ > 1 l 0 AK C \ ` P ¦Ò t$ q
½ í ÉM + :C \ _ P y Ó` ½ ¦í H & Ü h ¼ Ð # o Û ¼ à Ô\ ¦ë ß H . 7 ¤, ? £ / Ò& Ü h ¼ Ðכ ¹ è[ t` þ ¦ K Z ~ ro É Û ¼Ô àü < Ó[ ½ t` þ ¦ K Z ~ ro É Û ¼à Ô¿ º> h\ ¦Ä »t > a ) . • C \ ` P ¦s 6 xô Ç o Û ¼à Ô_ ½ ¨ ³~ & ÓZ ½ O rs É r : ¸à Ô\ ¦ Ð Ã ¸.
3
ArrayLinkedList ADT • ½ ¨$
כ í ¹ è: ListNode { _ 9 Ì o^ C \ , P Ó[ ½ t` þ ¦ K Z ~ ro É Û ¼à Ô, ¶ { ú 9 aכ ) ¹ è[ t` þ ¦ K Z ~ ro É Û ¼ à Ô • ½ ¨ ¸: q &
§ ñ =o > Û ¼à Ô t &
§ ñ =o > Û ¼à Ô t \ ¶ { ú 0 9 Au Ø Ô . • í ß – l rÒ : t$ q
í : ArrayLinkedList() • Ö ³ ÐZ : 6 Ì x| Ós ¾ DEF_LIST_CAPACITY ListNode[ t` þ ¦$ ½ © ÉC + \ ` P ¦Ò t$ q
í ¦, ¸ H Ó[ ½ t þ ¦ ` H o Û ¼à Ô\ ¦½ ¨» ¤ô ¡ Ç . C \ _ P Ò t$ q
õ í o Û ¼à Ô_ ½ ¨» ¤ ¡ r setup() B É j è× ¼\ ¦s 6 x Ç ô . t$ q
í : ArrayLinkedList(int capacity) – Ò 1
â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : capacity>0 Ă&#x152; â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : capacity>0s Ă&#x152; Â&#x20AC; 6 x|  Ă&#x201C;s ž capacityÂ&#x201C; ListNode[ t` Ăž ÂŚ$  Â&#x153;½ Š Ă&#x2030;C + \ ` P ÂŚĂ&#x2019; t$ q
Ă Â&#x201C; ÂŚ, Ă&#x2022; ÂŞ t O X ¡ §Ă&#x153; Ăş ÂźÂ&#x20AC; 6 x|  Ă&#x201C;s ž DEF_LIST_CAPACITYÂ&#x201C; ListNode[ t` Ăž ÂŚ$  Â&#x153;½ Š Ă&#x2030;C + \ ` P ÂŚĂ&#x2019; t$ q
Ă´ Ă Ă&#x2021; . ¢ ¸ô Ă&#x2021;Â&#x2014; ¸ HÂ&#x2020; Â&#x17D; Ă&#x201C;[ ½ t` Ăž ÂŚÂ&#x192; Â? HÂ&#x2018; o Ă&#x203A; Ÿà Ă&#x201D;\ Œ½ ¨ ¤ô ÂĄ Ă&#x2021; . C \ _ P Ă&#x2019; t$ q
Ăľ Ă Â&#x2018; o Ă&#x203A; Ÿà Ă&#x201D;_ ½ ¨ ¤Â&#x201C; ÂĄ r setup() B Ă&#x2030; jÂ&#x2122; èĂ&#x2014; Âź ÂŚ \ s6 xĂ´  Ă&#x2021; . â&#x20AC;&#x201C; Ă&#x2019; t$ q
Ă Â&#x2022; ¸š §s ÂĄ : void setup(int capacity) â&#x20AC;˘ sB jÂ&#x2122; èĂ&#x2014; ÂźÂ? HĂ&#x2019; t$ q
Ă ĂŤ Â&#x2013; Ă&#x; 6 x  Ă&#x2122; ÂźÂ&#x2013; Ă? private B jÂ&#x2122; èĂ&#x2014; ÂźÂ&#x2013; Ă?ĂŤ Â&#x2013;Â&#x17D; Ă&#x; H . â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : 6 Ă&#x152; x|  Ă&#x201C;s ž capacityÂ&#x201C; ListNode[ t` Ăž ÂŚ$  Â&#x153;½ Š Ă&#x2030;C + \ ` P ÂŚĂ&#x2019; t$ q
Ă Â&#x201C; ÂŚ, Â&#x2014; ¸Â&#x17D; HÂ&#x2020; Ă&#x201C;[ ½ t` Ăž ÂŚÂ&#x192; Â? H Â&#x2018; oĂ&#x203A; Ÿà Ă&#x201D;\ ά ½ ¤ô ÂĄ Ă&#x2021; . â&#x20AC;&#x201C; abstract void insert(Object item) b Â&#x201A; 9 Ă?Z : item!=null, isFull()==false Ă&#x152; â&#x20AC;˘ â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : & Ă&#x152;
§ ù =/q > &
§ Ăą =o > Ă&#x203A; Ÿà Ă&#x201D;\  Ă&#x2DC; Ă&#x201D; . â&#x20AC;˘ \ VĂź @: ListOverflowException, o Ă&#x203A; Ÿà Ă&#x201D; T ` q e ` Â&#x201D; ÂŚM :Âľ Ă?Ă&#x2019; 1 t q â&#x20AC;&#x201C; abstract boolean delete(Object item) â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : item!=null, isEmpty()==false Ă&#x152; â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ă&#x2019; Ă&#x152; Ă&#x2026;# QÂ&#x201D; â&#x20AC;Ť×&#x203A;â&#x20AC;Ź šÂ&#x2122; è o Ă&#x203A; Ÿà Ă&#x201D;\  e Ă&#x153; Â&#x201D; ÂźÂ&#x20AC; Â&#x2022;] Â&#x152; j Â&#x201C; ÂŚ true\ ÂŚĂŹ Ă?¨ ø Â&#x160; 8 Â&#x201C; ÂŚ\ Ă&#x153; O ÂźÂ&#x20AC; false\ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . â&#x20AC;˘ \ VĂź @: ListUnderflowException, o Ă&#x203A; Ÿà Ă&#x201D; q # Qe ` Â&#x201D; ÂŚM :Âľ Ă?Ă&#x2019; 1 t q â&#x20AC;&#x201C; abstract boolean search(Object item) b Â&#x201A; 9 Ă?Z : item!=null, isEmpty()==false Ă&#x152; â&#x20AC;˘ â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ă&#x2019; Ă&#x152; Ă&#x2026;# QÂ&#x201D; â&#x20AC;Ť×&#x203A;â&#x20AC;Ź šÂ&#x2122; è o Ă&#x203A; Ÿà Ă&#x201D;\  e Ă&#x153; Â&#x201D; ÂźÂ&#x20AC; true\ ÂŚĂŹ Ă?¨ ø Â&#x160; 8 Â&#x201C; ÂŚ\ Ă&#x153; O ÂźÂ&#x20AC; false\ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . â&#x20AC;˘ \ VĂź @: ListUnderflowException, o Ă&#x203A; Ÿà Ă&#x201D; q # Qe ` Â&#x201D; ÂŚM :Âľ Ă?Ă&#x2019; 1 t q â&#x20AC;&#x201C; abstract Object retrieve(Object item) â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : item!=null, isEmpty()==false Ă&#x152; â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ă&#x2019; Ă&#x152; Ă&#x2026;# QÂ&#x201D; â&#x20AC;Ť×&#x203A;â&#x20AC;Ź šÂ&#x2122; è o Ă&#x203A; Ÿà Ă&#x201D;\  e Ă&#x153; Â&#x201D; ÂźÂ&#x20AC; Ă&#x2022; ÂŞ _ â&#x20AC;Ť×&#x203A;â&#x20AC;Ź 4 ¤ Â&#x; Â&#x2018; r` : ÂŚĂŹ Ă?¨ ø Â&#x160; 8 Â&#x201C; ÂŚ, \ Ă&#x153; O ÂźÂ&#x20AC; null` ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . â&#x20AC;˘ \ VĂź @: ListUnderflowException, o Ă&#x203A; Ÿà Ă&#x201D; q # Qe ` Â&#x201D; ÂŚM :Âľ Ă?Ă&#x2019; 1 t q â&#x20AC;&#x201C; void clear() Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ă&#x152; oĂ&#x203A; Ÿà Ă&#x201D;\  e Â? Â&#x201D; HÂ&#x2014; ¸Â&#x17D; HĂ&#x152; o^ Â? Â&#x2030;\ ÂŚ] j Ă´ Ă&#x2021; . Â&#x2018; o Ă&#x203A; Ÿà Ă&#x201D;\ ÂŚD h\ v> r ½ ¨ ¤ô ÂĄ Ă&#x2021; . â&#x20AC;˘ â&#x20AC;&#x201C; boolean isEmpty() â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ă&#x152; oĂ&#x203A; Ÿà Ă&#x201D; q # Qe Ă&#x153; Â&#x201D; ÂźÂ&#x20AC; true\ ÂŚĂŹ Ă?¨ ø Â&#x160; 8 Â&#x201C; ÂŚĂ&#x2022; ÂŞX t O ¡ §Ă&#x153; Ăş ÂźÂ&#x20AC; false\ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . â&#x20AC;&#x201C; boolean isFull() â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ă&#x152; oĂ&#x203A; Ÿà Ă&#x201D; T ` q e Ă&#x153; Â&#x201D; ÂźÂ&#x20AC; true\ ÂŚĂŹ Ă?¨ ø Â&#x160; 8 Â&#x201C; ÂŚĂ&#x2022; ÂŞX t O ¡ §Ă&#x153; Ăş ÂźÂ&#x20AC; false\ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . â&#x20AC;&#x201C; void showStructure() â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : \ Ă&#x152; 6 O § ÂŁ â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : o Ă&#x152; Ă&#x203A; Ÿà Ă&#x201D;\  e Â? Â&#x201D; HÂ&#x2014; ¸Â&#x17D; HĂ&#x152; o^ Â? Â&#x2030;\ ÂŚĂ&#x2DC; Τ Ă´ 4 Ă&#x2021; . ĂŤ Â&#x2013;Â&#x20AC; Ă&#x; Â&#x2022;o Â? Ă&#x203A; Ÿà Ă&#x201D; q # Qe Ă&#x153; Â&#x201D; ÂźÂ&#x20AC; â&#x20AC;&#x153;List is empty.â&#x20AC;?\ ÂŚĂ&#x2DC; ÂŚ Ă´ 4 § Ă&#x2021; . sB jÂ&#x2122; èĂ&#x2014; ÂźÂ? Hn ! Q^
` ç ÂŚ3 q& l Ă&#x153; h ÂźÂ&#x2013; Ă?ĂŤ Â&#x2013; Ă&#x; 6 xÂ?  a ) .
4
PreLab â&#x20AC;˘ <` Ă&#x152; Â&#x2026;s t \  e Â? Â&#x201D; H list.zip` ÂŚ ĂŽ r~ Ă&#x17D; Ă&#x192; ArrayLinkedList 9 tA Ăž Ă&#x203A; Âź\ ÂŚ Â&#x153;5 Š q~ Ă&#x2026; Ă&#x17D;Â? Ă&#x192; H UnsortedArrayLinkedList\ ÂŚ a$ ¢
Ă . â&#x20AC;˘ ¢ a$
Ă Â&#x20AC; TestList.java\ ÂŚ s6 x  # Â&#x152;½ ¨Â&#x2030; Âł_ & &
S Ăą Â&#x2030;$ X
` Ă ÂŚS Â&#x2030; X Â&#x201C; .
5
InLab â&#x20AC;˘ ArrayLinkedList Ăž t 9A Ă&#x203A; Âź\ ÂŚ Â&#x153;5 Š q~ Ă&#x2026; Ă&#x17D;Â? Ă&#x192; H SortedArrayLinkedList\ ΢ a$
Ă .
2
6
PostLab • PreLab\ " f½ ¨ ³ô & Ç UnsortedArrayLinkedList\ o Û ¼à Ô\ ¦% í i HÜ ¼ Ð Ë ¨ H 6 §B £ j è× ¼\ ¦Æ Ò # . – void reverse() • b 9 ÐZ : \ Ì 6 O § £ • 9 b ÐZ : Ì oÛ ¼à Ô_ í H" f\ ¦% í i HÜ ¼ Ð õ H . o Û ¼à Ô\ ¦% í i HÜ ¼ Ð Ë ¨ H כ rß É ¼> ¿ º t ~ ÓZ ½ Ü O ¼ н Éà + ºe . H ¸× ¼[ t_ þ ` ¦ Ë ¨# Q% í i HÜ ¼ Ð Ë ¨ H s כ ¦, r É H rÕ É ª@ / ÐÄ »t ¦? /6 x` ¦ Ë ¨ H s כ . s z ´_ v\ þ " f H ` ¦ Ë ¨ # Q% í i HÜ ¼ Ð Ë ¨ Hj B è× ¼\ ¦½ ¨ ³K & r : .
3
c °2005, sangjin@kut.ac.kr
Ä ¬Ë ìÍ æ P ò Laboratory 8. BinarySearchTree ADT
1
×X Ò Ä ì • ½ ¨ ¸\ ¦ s6 xô Çs Ò oà Ôo ADT\ ¦½ ¨ ³K & r : .
2
4 ~ ¿ • s Ò oà Ô o H s Ò ol Z _ O ´ òÖ ¦$
` í ¦Õ ª@ / ÐX <s ' ½ ¨ ¸ Ð p · s כ . • s Ò oà Ôo _ y ¸ × ¼ Hþ j@ /¿ º> h_ d ¸× ¼\ ¦ | 9 à ºe Ü ¼9, y ¸× ¼\ ½ É{ + © a° ) כ ú r É ¢ aA , ¤" á f Ú Ôà Ôo \ e H ¸× ¼[ t_ þ ú כ ° Ð Hß ¼ ¦, ¸ rA É ¤" á fÚ Ôà Ôo \ e H ¸× ¼[ t_ þ ° כ ú Ð H . • \ " f H £ § 6õ ° ú r? É / Ò9 tA þ Û ¼ Ðs Ò oà Ôo _ ¸× ¼\ ¦ è qà ºe . protected class BSTNode{ public Object info; public BSTNode left; public BSTNode right; }
3
BinarySearchTree ADT • ½ ¨$
כ í ¹ è: BSTNode { 9 _ ¸× ¼[ t þ • ½ ¨ ¸: y ¸× ¼[ t þ rs É Ò oà Ôo \ ¦½ ¨$
ô í Ç . y ¸× ¼ Hþ j@ /¿ º> h_ d ¸× ¼\ ¦ | à 9 ºe Ü ¼9, y ¸ × ¼\ ½ É{ + © av ) ú כ ° r É ¢ aA , ¤" á fÚ Ôà Ôo \ e H ¸× ¼[ t þ _v ° כ ú Ð Hß ¼ ¦, ¸ rA É ¤" á fÚ Ôà Ôo \ e H ¸× ¼[ t_ þ v ° כ ú Ð H . • í ß – l rÒ : t$ q
í : BinarySearchTree() • Ö ³ ÐZ : Ì s Ò oà Ôo \ ¦Ò t$ q
ô í Ç . – void insert(Object item) • b 9 ÐZ : item!=null, item instanceof Comparable Ì • Ö ³ ÐZ : Å Ì Ò# Q D hכ ¹ è\ ¦s Ò oà Ôo \ ¶ { ú ô 9 Ç . ë ß ° ú rv É \ ¦ t H ¸× ¼ rF > ª¸ Õ × ¼_ ¹ כ èü <D hכ ¹ è\ ¦ §^ ô Ç . – boolean delete(Object item) b 9 ÐZ : item!=null, isEmpty()!=false, item instanceof Comparable Ì • Ö ³ ÐZ : Å Ì Ò# Q כ ¹ èü <° ú rv É ° `כ ú ¦ t Hכ ¹ è à Ôo \ e Ü ¼ Õ ªכ ¹ è\ ¦ ] j ¦ true\ ¦ • ͨ ø ì ô 8 Ç . ì Í@ ø / ÐÅ Ò# Q כ ¹ è à Ôo \ \ Ü O ¼ false\ ¦ì ͨ ø ô 8 Ç . Vü @ • \ – TreeUnderflowException: à Ôo q # Qe Ü ¼ µ ÏÒ 1 t q – boolean search(Object item) • b 9 ÐZ : item!=null, isEmpty()!=false, item instanceof Comparable Ì Ö ³ ÐZ : Å Ì Ò# Q כ ¹ èü <° ú rv É ° `כ ú ¦ t Hכ ¹ è à Ôo \ e Ü ¼ true\ ¦ì ͨ ø 8 ¦Õ ªX t O · § ú • ¼ Ü false\ ¦ì ͨ ø ô 8 Ç . • \ Vü @ 1
â&#x20AC;&#x201C; TreeUnderflowException: Ă Ă&#x201D;o q # Qe Ă&#x153; Â&#x201D; ÂźÂ&#x20AC; Âľ Ă?Ă&#x2019; 1 t q â&#x20AC;&#x201C; Object retrieve(Object item) â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : item!=null, isEmpty()!=false, item instanceof Comparable Ă&#x152; Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ă&#x2026; Ă&#x152; Ă&#x2019;# Q Â&#x201D; â&#x20AC;Ť×&#x203A;â&#x20AC;Ź šÂ&#x2122; èß <°  Â&#x201C; Ăş rv Ă&#x2030; ° â&#x20AC;Ť`×&#x203A;â&#x20AC;Ź Ăş ÂŚ t Â? Hâ&#x20AC;Ť×&#x203A;â&#x20AC;Ź šÂ&#x2122; è Ă Ă&#x201D;o \  e Ă&#x153; Â&#x201D; ÂźÂ&#x20AC; Ă&#x2022; ÂŞâ&#x20AC;Ť×&#x203A;â&#x20AC;Ź šÂ&#x2122; è\ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . ĂŹ Ă?@ ø /Â&#x2013; Ă? â&#x20AC;˘ Ă&#x153; O \ ÂźÂ&#x20AC; null\ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . â&#x20AC;˘ \ VĂź @ â&#x20AC;&#x201C; TreeUnderflowException: Ă Ă&#x201D;o q # Qe Ă&#x153; Â&#x201D; ÂźÂ&#x20AC; Âľ Ă?Ă&#x2019; 1 t q â&#x20AC;&#x201C; void clear() â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ă&#x201D; Ă&#x152; Ă o \  e Â? Â&#x201D; HÂ&#x2014; ¸Â&#x17D; HÂ&#x201D; ¸Ă&#x2014; Âź\ ÂŚ] j Ă´ Ă&#x2021; . â&#x20AC;&#x201C; boolean isEmpty() Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ă&#x201D; Ă&#x152; Ă o q # Qe Ă&#x153; Â&#x201D; ÂźÂ&#x20AC; true\ ÂŚĂŹ Ă?¨ ø Â&#x160; 8 Â&#x201C; ÂŚĂ&#x2022; ÂŞX t O ¡ §Ă&#x153; Ăş ÂźÂ&#x20AC; false\ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . â&#x20AC;˘ â&#x20AC;&#x201C; boolean isFull() â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Â&#x2020; Ă&#x152; Ă&#x201C; ½ Â&#x153;Ă&#x192; Š Ă? Â&#x201A;. â&#x20AC;&#x201C; void showStructure() â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : \ Ă&#x152; 6 O § ÂŁ â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ă Ă&#x152; Ă&#x201D;o \  e Â? Â&#x201D; HÂ&#x2014; ¸Â&#x17D; HĂ&#x152; o^ Â? Â&#x2030;\ ÂŚĂ&#x2014; ĂŚ0 AĂ H r~ Ă&#x201C;Z ½ Ă&#x153; O ÂźÂ&#x2013; Ă?Ă&#x2DC; Τ Ă´ 4 Ă&#x2021; . ĂŤ Â&#x2013;Â&#x20AC; Ă&#x; Â&#x2022;Ă Â? Ă&#x201D;o q # Qe Ă&#x153; Â&#x201D; ÂźÂ&#x20AC; â&#x20AC;&#x153;Tree is empty.â&#x20AC;?\ ÂŚĂ&#x2DC; Τ Ă´ 4 Ă&#x2021; . s B jÂ&#x2122; èĂ&#x2014; ÂźÂ? Hn ! Q^
` ç ÂŚ3 q& l Ă&#x153; h ÂźÂ&#x2013; Ă?ĂŤ Â&#x2013; Ă&#x; 6 xÂ?  a ) .
4
PreLab â&#x20AC;˘ < Ă&#x152;` Â&#x2026;s t \  e Â? Â&#x201D; H lab08.zip` ÂŚ ĂŽ r~ Ă&#x17D; Ă&#x192; BinarySearchTree.java\ ΢ a$
Ă . jÂ&#x2122; èĂ&#x2014; ÂźĂ&#x2014; ĂŚ\  6 §j ÂŁ BÂ&#x2122; è[ tĂŤ Ăž Â&#x2013; prelabĂ&#x153; Ă&#x; ÂźÂ&#x2013; Ă?¢ a$
Ă . â&#x20AC;˘ B public int iterSize(); public boolean iterSearch(Object item); public boolean delete(Object item); â&#x20AC;˘ iterSizeÂ? HF ) ~ Ă&#x201C;Z ½ ` O ÂŚ 6 x  t ¡ §Â&#x201C; Ăş ÂŚĂ Ă&#x201D;o _ e Â? Â&#x201D; HÂ&#x201D; ¸Ă&#x2014; Âź_ > hĂ&#x192; Âş\ ÂŚ> Ă Â&#x2013; Ă&#x; Â? HB jÂ&#x2122; èĂ&#x2014; Âźs . s B jÂ&#x2122; èĂ&#x2014; ÂźÂ? H Ă&#x203A; ÂźĂ&#x2014; Â&#x2DC;` Ăž ÂŚ 6 x  9, [ jĂ´ Ă&#x2021;/ ?6 xÂ&#x201C;  rs Ă&#x2030; Â? rÂ&#x201D; : ¸à Ă&#x201D;\ ÂŚÂ&#x201A; Ă?Â&#x203A; Ă&#x192; ¸. â&#x20AC;˘ iterSearchÂ? HF ) ~ Ă&#x201C;Z ½ ` O ÂŚ 6 x  t ¡ §Â&#x201C; Ăş ÂŚĂ&#x2026; Ă&#x2019;# Q Â&#x201D; â&#x20AC;Ť×&#x203A;â&#x20AC;Ź šÂ&#x2122; èß <°  Â&#x201C; Ăş rv Ă&#x2030; ° â&#x20AC;Ť`×&#x203A;â&#x20AC;Ź Ăş ÂŚ t Â? Hâ&#x20AC;Ť×&#x203A;â&#x20AC;Ź šÂ&#x2122; è Ă Ă&#x201D;o \  e Â? Â&#x201D; Ht Â&#x17D; # Â&#x152;Ă&#x2026; Ă&#x2019;Â? HB jÂ&#x2122; èĂ&#x2014; Âźs . [ jĂ´ Ă&#x2021;? /6 xÂ&#x201C;  rs Ă&#x2030; Â? rÂ&#x201D; : ¸à Ă&#x201D;\ ÂŚÂ&#x201A; Ă?Â&#x203A; Ă&#x192; ¸. â&#x20AC;˘ deleteÂ? HĂ&#x2026; Ă&#x2019;# QÂ&#x201D; v° â&#x20AC;Ť`×&#x203A;â&#x20AC;Ź Ăş ÂŚ Â&#x201D; â&#x20AC;Ť×&#x203A;â&#x20AC;Ź šÂ&#x2122; è\ Œš Ă&#x201D; 1 Ă&#x2022; ÂŞÂ&#x201D; ¸Ă&#x2014; Âź\ ÂŚ Â&#x2022; Â&#x152;] jK Ă&#x2026; Ă&#x2019;Â? HB jÂ&#x2122; èĂ&#x2014; Âźs . delete B jÂ&#x2122; èĂ&#x2014; ÂźÂ? H¢ a$
á Ă & # Qe t Â&#x201D; ĂŤ Â&#x2013;Ă&#x2022; Ă&#x; ÂŞ? /Ă&#x201A; Ă&#x2019;\  " f  x 6 Â? H deleteNodeĂź < getPredecessorÂ? H½ ¨Â&#x2030; ³á & &# Qe t Â&#x201D; ¡ § Ăş . s Âż Âş? /Ă&#x201A; Ă&#x2019;B j Â&#x2122; èĂ&#x2014; Âź\ ΢ a$
Ă . deleteNodeÂ? H Â&#x2022;] Â&#x152; j½ Ă&#x2030;Â&#x201D; + ¸Ă&#x2014; Âź\ Œš Ă&#x201D;Â&#x201C; 1 r Ă&#x2030; Â&#x153;I Š \  " fĂ&#x2022; ÂŞÂ&#x201D; ¸Ă&#x2014; Âź\ ÂŚ Â&#x2022;] Â&#x152; j Â? HB jÂ&#x2122; èĂ&#x2014; Âźs . ĂŤ Â&#x2013;Â&#x20AC; Ă&#x; Â&#x2022; Â? Â&#x2022; Â&#x152; ] j½ Ă&#x2030;Â&#x201D; + ¸Ă&#x2014; Âź ¢ aA , ¤, Â&#x161; ĂĄ ¸Â? rA Ă&#x2030; ¤ ĂĄ d Â&#x201D; Â&#x201D; ¸Ă&#x2014; Âź\ ÂŚÂ&#x2014; ¸¿ Âş t Â&#x201C; ÂŚe Ă&#x153; Â&#x201D; ÂźÂ&#x20AC; ¢ aA , ¤" ĂĄ fĂ&#x161; Ă&#x201D;Ă Ă&#x201D;o \  " f  Â&#x153;H Š ° â&#x20AC;Ť`×&#x203A;â&#x20AC;Ź Ăş Œš Ă&#x201D; 1 Ă´ Ă&#x2021; . s ` â&#x20AC;Ť×&#x203A;â&#x20AC;Ź Œš Ă&#x201D; 1 Ă&#x2026; Ă&#x2019;Â? HB jÂ&#x2122; èĂ&#x2014; Âź getPredecessors . â&#x20AC;˘ ¢ a$
Ă Â&#x20AC; TestBST.java\ ÂŚs 6 x  # Â&#x152;½ ¨Â&#x2030; Âł_ & &
S Ăą Â&#x2030;$ X
` Ă ÂŚS Â&#x2030;Â&#x201C; X . Â&#x17D; 7 xĂ&#x20AC; ĂĄ Ă&#x201C; insert search delete delete delete
5
"§
ĂŽ
ĂŽ +n +b +c +e +f +q +o +z ?z -n -c -z
l @ /& á� H þ
q Â&#x201C; ÂŚ iterSearch Â&#x17D; d s Â&#x201D; Â&#x2014; ¸¿ Âşe Â? Â&#x201D; HÂ&#x201D; ¸Ă&#x2014; Âź_ Â&#x2022;] Â&#x152; j d s Â&#x201D; ĂŤ Â&#x2013;e Ă&#x; Â? Â&#x201D; HÂ&#x201D; ¸Ă&#x2014; Âź_ Â&#x2022;] Â&#x152; j Â&#x2013;´ Ă&#x; ĂŠ Â&#x2DC;Â&#x201D; Ăş ¸Ă&#x2014; Âź_ Â&#x2022;] Â&#x152; j
InLab 1. Â&#x201D; Ă&#x2019; Â&#x17D; oĂ Â? Ă&#x201D;o _ Â&#x2014; ¸_ vÂ&#x201C; Ăž ry Ă&#x2030; Â&#x2022;â&#x20AC;Ť×&#x203A;â&#x20AC;Ź Â&#x152; šÂ&#x2122; è\ ÂŚÂś Â&#x161;{ Ăş 9 Â? HĂ H" f\  _ K &
Â? Ăą a ) . ĂŤ Â&#x2013;Â&#x20AC; Ă&#x; Â&#x2022;& Â?
§ Ăą =Â? > aĂ ) H" fÂ&#x2013; Ă?Âś Â&#x161;{ Ăş 9 ½ Ă&#x2030; +
Ă&#x201E; â Âş\  Â? H â&#x20AC;˘ s Ă Ă&#x201D;o _ Z }s â&#x20AC;Ť×&#x203A;â&#x20AC;Ź šÂ&#x2122; è_ > hĂ&#x192; ºÍ Â&#x2013; Ă&#x; p uá &Â? HÂź Â&#x2020; # Ă&#x201C;s ž Â&#x201D; Ă Ă&#x201D;o á &# QB Ă&#x201E; Âşq ´ òĂ&#x2013; ÂŚ& s h . Âź Â&#x2020; # Ă&#x201C;s ž Â&#x201D; Ă Ă&#x201D;o Â? HÂ&#x201A; + AÂ&#x192; Ăž ½ ¨Â&#x203A; ¸ß < s \ O . s \ ÂŚ> hÂ&#x201A; l 0 AK Ă Ă&#x201D;o _ ç H+ A` Ăž Ϋ Â?Ă&#x2020; Ăş Ă&#x2019;Â? H~ Ă&#x201C;Z ½ ` O ÂŚĂ&#x2019; ty q Â&#x2022;½ Â&#x152; Ă&#x2030;Ă&#x192; + Âşe Â&#x201D; . s \ ÂŚ0 AĂ´ Ă&#x2021; 6 § ÂŁ B jÂ&#x2122; èĂ&#x2014; Âź\ ΢ a$
Ă r Â&#x161; ¸. [ jĂ´ Ă&#x2021;? /6 xÂ&#x201C;  rs Ă&#x2030; Â? rÂ&#x201D; : ¸à Ă&#x201D;\ ÂŚÂ&#x201A; Ă?Â&#x203A; Ă&#x192; ¸. 2
â&#x20AC;&#x201C; public void BalanceTree() â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ă&#x201D; Ă&#x152; Ă o ¢ aÂ&#x201E; s Â&#x201D; Ă Ă&#x201D;o (complete binary tree) á &Â&#x2022; ¸2 ¤à Â&#x; Ă&#x201D;o \ ÂŚF ½ ¨$
Ă´ Ă Ă&#x2021; . â&#x20AC;˘ ¢ a$
Ă Â&#x20AC; TestBST.java\ ÂŚs 6 x  # Â&#x152;½ ¨Â&#x2030; Âł_ & &
S Ăą Â&#x2030;$ X
` Ă ÂŚS Â&#x2030;Â&#x201C; X . s M : â&#x20AC;&#x2DC;Bâ&#x20AC;&#x2122; "
§ Î
` ĂŽ ÂŚ 6 xĂ´ Â Ă&#x2021; .
6
InLab 2. â&#x20AC;˘ Ă&#x20AC; Ă&#x2019;Ă Ă&#x201D;Â&#x201D; ¸Ă&#x2014; ÂźÂ? HĂ&#x201D; Ă o Y UÂ&#x161; 6 \ 0\  e Â&#x201D; Â&#x201C; ÂŚ 9, Ă&#x20AC; Ă&#x2019;Ă Ă&#x201D;Â&#x201D; ¸Ă&#x2014; Âź_ d Â&#x201C; Â&#x201D; rY Ă&#x2030; UÂ&#x161; 6 \ 1\  e Â&#x201D; Â&#x201C; ÂŚĂ´ Ă&#x2021; . 7 ¤, Â&#x201D; ÂŁ ¸Ă&#x2014; Âź_ Y UÂ&#x161; 6 \Â&#x201C; rĂ&#x20AC; Ă&#x2030; Ă&#x2019;Ă Ă&#x201D; \  " fÂ&#x201D; ¸Ă&#x2014; Âź t _ a AĂ&#x; Âź_ Ă&#x192; Âş\ Ϋ Â&#x2DC;Ă´ Ăş Ă&#x2021; . Ă Ă&#x201D;o _ Z }s Â? HĂŠ Â&#x2013;Ăş Ă&#x; Â&#x2DC; ´Â&#x201D; ¸Ă&#x2014; ÂźĂ&#x2014; ĂŚ\  Y UÂ&#x161; 6 \s  Â&#x153; Š HÂ&#x201D; ¸Ă&#x2014; Âź_ Y UÂ&#x161; 6 \` Ϋ Â&#x2DC;Ă´ Ăş Ă&#x2021; . â&#x20AC;˘ Ă Ă&#x201D;o _ Â&#x2030; ÂłF & Z }s Ă Ă&#x201D;o _ Â&#x2030; ÂłF & Â&#x201D; ¸Ă&#x2014; Âź\ ÂŚs 6 x  # Â&#x152;¢ aÂ&#x201E; s Â&#x201D; Ă Ă&#x201D;o \ ÂŚĂŤ Â&#x2013;[ Ă&#x; t% Ăž ` 3 ÂŚM :_ Z }s Ăź <´ §Â&#x201C; Ăş r Ă&#x2030; s e Â&#x201D; Ă&#x153; ÂźÂ&#x20AC; Ă&#x2019; Â&#x17D; o½ Â? Ă&#x2030;M + :´ òĂ&#x2013; ÂŚs b # Â? QÂ&#x201D; . â&#x20AC;&#x201C; public int height() Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ă&#x201D; Ă&#x152; Ă o _ Z }s \ ÂŚ> Ă Â&#x2013; Ă&#x; # Â&#x152;ĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . â&#x20AC;˘ Ă Ă&#x201D;o _ Z }s Â? HĂ&#x20AC; Ă&#x2019;Ă Ă&#x201D;Â&#x201D; ¸Ă&#x2014; Âź_ ¢ aA , ¤" ĂĄ fĂ&#x161; Ă&#x201D;Ă Ă&#x201D;o _ Z }s Ăź <Â&#x161; ¸Ă&#x2030; r Â?A ¤" ĂĄ fĂ&#x161; Ă&#x201D;Ă Ă&#x201D;o _ Z }s Ă&#x2014; ĂŚ HA ¤_ ĂĄ Z }s +1s Â? a ) . â&#x20AC;˘ ¢ a$
Ă Â&#x20AC; TestBST.java\ ÂŚs 6 x  # Â&#x152;½ ¨Â&#x2030; Âł_ & &
S Ăą Â&#x2030;$ X
` Ă ÂŚS Â&#x2030;Â&#x201C; X . s M : â&#x20AC;&#x2DC;Hâ&#x20AC;&#x2122; "
§ Î
` ĂŽ ÂŚ 6 xĂ´ Â Ă&#x2021; .
7
PostLab a$
Â? Ă a BinarySearchTree.java\ ) ÂŚs 6 x  Â? Hç Â&#x2013;ĂŠ Ă&#x; Â&#x2013;Ă´ Ă&#x; Ă&#x2021;6 x6 ÂŁ x  Œ `½ ¨Â&#x2030; Âł & . â&#x20AC;˘ ¢ â&#x20AC;˘ t F K t Â? HĂŠ Â&#x2013;Ă Ă&#x; H > &
Ă&#x192; Ăą º° â&#x20AC;Ť×&#x203A;â&#x20AC;ŹÂ˘ Ăş ¸Â? HĂŤ H ° â&#x20AC;Ť`×&#x203A;â&#x20AC;Ź Ăş ÂŚÂ&#x201D; ¸Ă&#x2014; Âź_ ° â&#x20AC;Ť×&#x203A;â&#x20AC;ŹĂ&#x153; Ăş ÂźÂ&#x2013; Ă? 6 x  % i . z ´] j6 x6 ÂŁ x\   " fÂ? Hs Â&#x2DC; Ă? Â? H4 ¤¸ Â&#x; Â&#x161; Ăş Ă&#x2021;X Ă´ <s ' \ ÂŚ 6 x  > Â? a ) . r postlab\  " fÂ? H 6 §þ ÂŁ °  Â&#x201C; Ăş rY Ă&#x2030; UÂ? ĂŻĂ&#x2014; Âź\ ÂŚ&
_ Ăą # Â&#x152;s Y UÂ? ĂŻĂ&#x2014; Âź\ ÂŚs Â&#x201D; Ă&#x2019; Â&#x17D; o Â? Ă Ă&#x201D;o \  œ Â&#x161;{ Ăş 9 Â&#x201C; ÂŚ Â&#x2022;] Â&#x152; jK Â&#x2018; r : . s M : A 9 tA Ăž Ă&#x203A; Âź\ ÂŚ 6 x  t ´ Â&#x2DC;Â&#x201C; Ăş ÂŚ, Ă&#x203A; ÂźĂ&#x203A; ÂźÂ&#x2013; Ă?1 qÂ&#x201A; l Ă&#x201C;& ½ h Â&#x201C; 9 tA Ăž Ă&#x203A; Âź\ ÂŚĂŤ Â&#x2013;[ Ă&#x; t# Ăž Q 6 x  K Â&#x2018; r : . public class NBAPlayer implements Comparable{ int backNumber = -1; String name; String team; public NBAPlayer(){} public NBAPlayer(int id, String n, String t){ backNumber = id; name = n; team = t; } public int compareTo(Object target){ NBAPlayer tmp = (NBAPlayer)target; if(this == target) return 0; return (this.name.compareTo(tmp.name)); } public String toString(){ return ("#"+backNumber+"\tName: "+name+"\tTeam: "+team); } } s 9 tA Ăž Ă&#x203A; Âź\ ÂŚÂś Â&#x2DC;( Ăş RÂ&#x2DC; Ă?Â&#x20AC; q Â&#x201C; §½ Ă&#x2030;M + : name\ ÂŚs 6 xĂ´  Ă&#x2021; . " fs
Ă&#x201E; â ÂşY UÂ? ĂŻĂ&#x2014; Âź_ v ° â&#x20AC;Ť×&#x203A;â&#x20AC;Źs Ăş names Â? a ) Â&#x201C; Œ½ Ă&#x2030;Ă&#x192; + Âş e Â&#x201D; . v ° â&#x20AC;Ť×&#x203A;â&#x20AC;Źs Ăş ĂŞ Ă? ø Ă&#x2019; Â&#x17D; o½ Â? Ă&#x2030;M + :l ĂŻ rs á &Â? H° â&#x20AC;Ť`×&#x203A;â&#x20AC;Ź Ăş Ϋ Â&#x2DC; Ăş 9, ĂŤ Â&#x2013;Â? Ă&#x; Â&#x2022; Â&#x20AC;v ° â&#x20AC;Ť`×&#x203A;â&#x20AC;Ź Ăş ÂŚh >" Ă&#x2039;
Ă&#x153; ĂŽ ÂźÂ&#x2013; Ă? Ă&#x2039; ¨Â&#x201C; ÂŚz ¡Ă&#x153; ÂźÂ&#x20AC; compareTo B j Â&#x2122; èĂ&#x2014; Âź\ ÂŚĂ&#x192; Âş&
Ăą # Â&#x152;~ > 1 Ă&#x153; JĂ&#x192; ĂŁ Âşe Â&#x201D; . â&#x20AC;˘ y Â&#x2022; Â&#x152; 1 qÂ&#x201A; l Ă&#x201C;& ½ h Â&#x201C; 9 tA Ăž Ă&#x203A; Âź\ ÂŚĂŤ Â&#x2013;[ Ă&#x; tÂ&#x201C; Ăž ÂŚ NBAPlayerTest.javaĂź <Ă&#x201E; Âť Ă´ Ă&#x2021;9 tA Ăž Ă&#x203A; Âź\ ÂŚĂŤ Â&#x2013;[ Ă&#x; t# Ăž QĂŤ Â&#x2013;Â&#x17D; Ă&#x; H9 tA Ăž Ă&#x203A; Âź_ Â&#x201C; Ă&#x203A; ÂźÂ&#x2021; Ă&#x203A; Âź[ t Ăž ÂŚÂś ` Â&#x161;{ Ăş 9 Â&#x201C; ÂŚ Â&#x2022;] Â&#x152; j Â? H ` â&#x20AC;Ť×&#x203A;â&#x20AC;Ź ÂŚ Â&#x17D; Ă´ Ă&#x2021; .
3
c °2005, sangjin@kut.ac.kr
Ä ¬Ë ìÍ æ P ò Laboratory 9. AVLTree ADT
1
×X Ò Ä ì • AVL à Ôo \ ¦½ ¨ ³K & r : .
2
4 ~ ¿ • s Ò oà Ôo _ ¸_ v þ r É ¸× ¼[ ts þ ¶ { ú 9 aí ) H" f\ _ K &
ñ a ) . " f¶ { ú 9 aí ) H" f\ B Ä º¼ # Ó| ¾ c ¨ à ºe . s ` כ ¦F G4 ¤ l A 0K à Ôo _ ç H+ A` þ ¦´ Ø ú ¦Ã ºe t ë q ß 6 xs B Ä ºq Hë H] j& s h e . • AVL à Ôo H Ó ½ à © Ôo _ Z }s þ j ès Ò oà Ôo _ Z }s ü < H] X ¸2 ¤Ä »t ÷ & Hà Ôo s . AVL à Ôo Hs \ ¦0 AK y ¸× ¼ Õ ª _ כ ¢ aA , ¤" á fÚ Ôà Ôo _ Z }s ü < ¸ rA É ¤" á fÚ Ôà Ôo _ Z }s _ s \ ¦Ä »t ô Ç . s ° `כ ú ¦ç H+ A þ à º(balance factor) ô Ç . " f AVL à Ôo H 6 §õ £ ° ú r? É / Ò9 tA þ Û ¼\ ¦s 6 x # y ¸× ¼ ¦ \ è qà ºe . protected class AVLTreeNode{ public Object info; public AVLTreeNode left; public AVLTreeNode right; public int balanceFactor; } • AVL à Ôo \ " f ¸× ¼\ ¦¶ { ú 9 ¢ ¸ H ] jô ÇÊ ê\ H¶ { ú 9 a¢ ) ¸ H ] j a ) ¸× ¼_ Â Ò ¸ ¸× ¼Â Ò' À Òà Ô ¸× ¼ t _ t þ Q` ¦ " fç H+ A þ à º° `כ ú ¦ ¸&
K ñ ô Ç . " fÂ Ò ¸ ¸× ¼\ @ /ô Ç s 9 כ ¹ . s \ ¦0 AK Â Ò ¸ ¸× ¼\ @ /ô Ç ` ¦ ¸× ¼\ ¦ ? / H&
ñ Ð\ Æ Ò ½ ÉÃ + ºe t ë Ä ß »t K H&
ñ Ð 7 x ÷ £ &Ù ¼ Ðy 7 x á [ ß í ts þ 4 ¤¸ K ú t Hë H] j& s h e . s ` כ ¦F G4 ¤ Hô Ç t ~ ÓZ ½ O r¶ É { ú ¢ 9 ¸ H ] j l 0 AK ¶ { ú 9 0 Au ¢ ¸ H ] j½ É + ¸× ¼\ ¦¹ Ô 1 ° M ú :Û ¼× \ þ ~ Óë ½ Hô Ç ¸× ¼[ t` þ ¦ push H s כ . s X > O Û ¼× _ þ top\ H Ó ½ © ³ & F ¸× ¼_ Â Ò ¸ ¸× ¼ $ ÷ © &# Qe > a ) . s z ´_ v\ þ " f Hs ~ ÓZ ½ ` O ¦ 6 xô Ç . • Ð [ jô Ç? /6 x rs É r : ¸à Ô\ ¦ Ð Ã ¸.
3
AVLTree ADT • AVLTreeNode { _ 9 ¸ × ¼[ t þ • ½ ¨ ¸: s Ò oà Ôo ü <° ú . ë y ß ¸× ¼_ ç H+ A þ à º° כs ú 0, 1, ¢ ¸ H -1 Ð Ó ½ Ä © »t a ) . – l rÒ : t$ q
í : AVLTree() • ³ Ö ÐZ : Ì AVL à Ôo \ ¦Ò t$ q
ô í Ç . – void insert(Object item) • b Ð 9 Z : item!=null, item instanceof Comparable Ì • Ö ³ ÐZ : Å Ì Ò# Q D hכ ¹ è\ ¦ AVL à Ôo \ ¶ { ú ô 9 Ç . • \ Vü @ – UnsupportedOperationException: ° ú rv É \ ¦ t H ¸× ¼ rF > µ ÏÒ 1 t q – boolean delete(Object item) • b Ð 9 Z : item!=null, isEmpty()!=false, item instanceof Comparable Ì • Ö ³ ÐZ : Å Ì Ò# Q כ ¹ èü <° ú rv É ° `כ ú ¦ t H¹ כ è à Ôo \ e Ü ¼ Õ ªכ ¹ è\ ¦ ] j ¦ true\ ¦ ͨ ø ì ô 8 Ç . ì Í@ ø / ÐÅ Ò# Q כ ¹ è à Ôo \ \ Ü O ¼ false\ ¦ì ͨ ø ô 8 Ç . 1
–
–
– – – –
4
• V \ü @ – TreeUnderflowException: à Ôo q # Qe Ü ¼ µ ÏÒ 1 t q boolean search(Object item) • b 9 ÐZ : item!=null, isEmpty()!=false, item instanceof Comparable Ì • Ö ³ ÐZ : Å Ì Ò# Q כ ¹ èü <° ú rv É ° `כ ú ¦ t Hכ ¹ è à Ôo \ e Ü ¼ true\ ¦ì ͨ ø 8 ¦Õ ªX t O · § ú ¼ Ü false\ ¦ì ͨ ø ô 8 Ç . • \ Vü @ – TreeUnderflowException: à Ôo q # Qe Ü ¼ µ ÏÒ 1 t q Object retrieve(Object item) • b 9 ÐZ : item!=null, isEmpty()!=false, item instanceof Comparable Ì • Ö ³ ÐZ : Å Ì Ò# Q כ ¹ èü <° ú rv É ° `כ ú ¦ t Hכ ¹ è à Ôo \ e Ü ¼ Õ ªכ ¹ è\ ¦ì ͨ ø ô 8 Ç . ì Í@ ø / Ð Ü O \ ¼ null\ ¦ì ͨ ø ô 8 Ç . • \ Vü @ – TreeUnderflowException: à Ôo q # Qe Ü ¼ µ ÏÒ 1 t q void clear() • ³ ÖÐ Z : Ô Ì ào \ e H ¸ H ¸× ¼\ ¦] j ô Ç . boolean isEmpty() • ³ Ö ÐZ : à Ì Ôo q # Qe Ü ¼ true\ ¦ì ͨ ø 8 ¦Õ ªX t O · §Ü ú ¼ false\ ¦ì ͨ ø ô 8 Ç . boolean isFull() • ³ ÖÐ Z : Ì Ó ½ à © Ð . void showStructure() • b 9 ÐZ : \ Ì 6 O § £ • ³ Ö ÐZ : à Ì Ôo \ e H ¸ HÌ o^ \ ¦× æ0 Aí H r~ ÓZ ½ Ü O ¼ ÐØ ¦§ ô 4 Ç . ë ß à Ôo q # Qe Ü ¼ “Tree is empty.”\ ¦Ø ¦§ ô 4 Ç . s B j è× ¼ Hn ! Q^
` ç ¦3 q& l Ü h ¼ Ðë ß 6 x a ) .
PreLab • AVLTree.zip` ¦ î r~ Î Ã ¶ { ú 9 í ` ß ¦¢ a$
í . • ¶ { ú 9 í ` ß ¦½ ¨ ³½ & ÉM + :? / Ò& Ü h ¼ ÐÛ ¼× ` þ ¦ 6 xô Ç . – AVL à Ôo \ D hכ ¹ è\ ¦¶ { ú 9 l 0 AK " f H $ ¶ ú 9½ { É + ¸× ¼\ ¦¹ Ô 1 ô Ç . AVL à Ôo \ " fD hכ ¹ è H s Ò oà Ôo ü < ð Í t ø Ð Ó ½ é © ´ ß ú ¸× ¼\ Æ Ò a ) . – ¶ { ú 9 | c é ¨ ´ ß ú ¸× ¼\ ¦ ¹ Ô 1 ° M ú :, À Òà Ô Ò' é ´ ß ú ¸× ¼ t
â Ð \ © e H ¸× ¼[ t þ r É Y V@ / Ð Û ¼× \ þ pushô Ç . s Û ¼× þ rÔ É ào _ Ð r! l Q Ð&
_ ñ ÷ &# Qe . – " f¶ { ú 9 ô ÇÊ ê\ Û ¼× ` þ ¦s 6 x # é ´ ß ú ¸× ¼_ Â Ò ¸ ¸× ¼Â Ò' À Òà Ô ¸× ¼ t _ t þ Q` ¦ " fç H A þ + à º\ ¦Ì t q ô Ç . Ò Å_ ½ É& + h r# É Q " ¸× ¼_ ç H+ A þ à º
÷ â &# Q 0s ÷ & Õ ªs Ê ê_ ¸ © ¸× ¼[ t_ þ H+ ç A þ à º H t · § ú H . – ç H+ A þ à º\ ¦Ì t q Hõ &
\ ñ " f% 6 §Ü £ ¼ Ð AVL à Ôo _ $
| í 9 ` ¦0 AC H ¸× ¼\ ¦ë ß à Ôo _ I © \ 9 כ ¹ô Ç r ` ¦ # à Ôo \ ¦F ¸&
ô ñ Ç . s \ ¦0 AK W 1 t r \ כ 9 ¹ô Ç 6 §B £ j è× ¼[ t` þ ¦¢ a$
í Ç ô . AVLTreeNode AVLTreeNode AVLTreeNode AVLTreeNode
LLRotate(AVLTreeNode RRRotate(AVLTreeNode LRRotate(AVLTreeNode RLRotate(AVLTreeNode
Anode, Anode, Anode, Anode,
AVLTreeNode AVLTreeNode AVLTreeNode AVLTreeNode
Bnode); Bnode); Bnode, AVLTreeNode Cnode); Bnode, AVLTreeNode Cnode);
• ¢$ a
í TestAVLTree.java\ ¦s 6 x # ½ ¨ ³_ & &
S ñ $ X
` í ¦S X . s M :y r _ &
S ñ ô X Çt S X l 0 A K 6 §í £ H" f Ð ¸× ¼\ ¦¶ { ú ô 9 Ç . – – – –
LL r : 40 20 10 RR r : 10 20 40 LL r : 40 10 20 LL r : 10 40 20
0 AW 1 t
Ä â º&
S ñ X > ¶ { ú s 9 s À Ò# Qt s r : ¸à Ô\ e H\ V] j\ ¦r + >ô « Ç . 2
5
InLab • ] j í ` ß ¦¢ a$
í . • ] j í ß r¶ É { ú 9 í õ ß ð Í t ø Ð? / Ò& Ü h ¼ ÐÛ ¼× ` þ ¦s 6 xô Ç . s & h rô É Ç r ` ¦ H Ü כ ¼ Ð ] j ¢ a« Ñ÷ &t · § ú ¦> 5 qÒ Å Àà Ô t _ t þ Q` ¦ " f כ 9 ¹ # Q r ` ¦K ô Ç . – ¶ { ú 9 _
Ä â º\ Hç H+ A þ à º° כs ú 1¢ ¸ H −1\ " f 0Ü ¼ Ð 7 Õ ªs Ê ê ¸ © ¸× ¼[ t_ þ ç H+ A þ à º H t · §t ú ë ì ß Í@ ø / Ð ] j\ " f H 0\ " f1¢ ¸ H −1 Ð Õ ªs Ê ê ¸ © ¸× ¼[ t_ þ ç H+ A þ à º H t · § ú H . – ] j H¶ { ú 9 \ " f ¦ 9÷ &% ~ 3 W 1 t r ü @\ : ¤ £ sô Ç
Ä â º e . s  Òì r\ @ /K " f Hs r : ¸× ¼\ ¦ Ð Ã ¸ô Ç . s ` כ ¦ ¦ 9 l 0 AK LLRotateü < RRRotate B j è× ¼\ ¦ 9 כ ¹ à º&
K ñ ô Ç . • ] j a ) ¸× ¼_ Â Ò ¸ ¸× ¼Â Ò' À Òà Ô t _ t þ Q` ¦ ç H+ A þ à º\ ¦ ÐK ô Ç . s M : ] j a ) ¸× ¼ d s Ñ t ü × æç ß ¸× ¼
Ä â º\ Hs ¸× ¼_ Â Ò ¸ ¸× ¼Â Ò' H s כ m ¦, s ¸× ¼\ @ /^ a ) ¸× ¼ _ Â Ò ¸ ¸× ¼Â Ò' K ô Ç . • ] j a ) ¸× ¼_ Â Ò ¸ ¸× ¼_ ç H+ A þ à º\ ¦
â l 0 AK " f H ] j a ) ¸× ¼_ &
ñ Ð 9 כ ¹ . s &
ñ Ð H deletedItems HÐ r! l Q Ã º\ Ä »t a ) . • ¢ a$
í TestAVLTree.java\ ¦s 6 x # ½ ¨ ³_ & &
S ñ $ X
` í ¦S X .
6
PostLab • \ 6 O §. £
3
c °2005, sangjin@kut.ac.kr
Â&#x201E; Ă&#x201E;Â&#x2122; Â&#x2013;Â&#x2030; ÂŹĂ&#x2039; ĂŹĂ? ĂŚÂ&#x203A; P ò Laboratory 10. Graph ADT
1
Â? Ă&#x2014;X Ă&#x2019; Ă&#x201E; ĂŹ â&#x20AC;˘ Â&#x201C; ] o X Ă&#x203A; Ÿà Ă&#x201D;~ Ă&#x201C;Z ½ ` O ÂŚs 6 xĂ´  Ă&#x2021;Ă Âş~ Ă&#x201C;Â&#x2020; ½ Ă&#x201C;q ž Ă&#x2014; ĂŚu Ă&#x2022; ÂŞA ĂĄ Ă&#x201D; ADT\ Œ½ ¨Â&#x2030; ÂłK & Â&#x2018; r : . â&#x20AC;˘ Â&#x201C; ] Â? X ' Â&#x;§ =~ > Ă&#x201C;Z ½ ` O ÂŚ s6 xĂ´  Ă&#x2021;Ă&#x201E; Âť~ Ă&#x201C;Â&#x2020; ½ Ă&#x201C; Ă&#x2014; ž ĂŚu Ă&#x2022; ÂŞA ĂĄ Ă&#x201D; ADT\ ά ½Â&#x2030; ÂłK & Â&#x2018; r : .
2
4 ~ Âż â&#x20AC;˘ Ă&#x2022; ÂŞA ĂĄ Ă&#x201D;Â? H/ N| B ½ 9 Ă&#x2039;s + Â? &
& Ăą (vertex)[ h t_ Ăž Ă&#x201E; ô Ă&#x2021;| 9 ½ Ă&#x2039;Ăľ + s &
& Ăą [ h t` Ăž ÂŚÂ&#x192; Â? Hç Â&#x2013;Â&#x201A; Ă&#x; (edge)Ă&#x153; ÂźÂ&#x2013; Ă?½ ¨$
á Ă &Â? H ÂŤ Ă&#x2018;½ ¨Â&#x203A; ¸s . â&#x20AC;˘ Ă Âş~ Ă&#x201C;Â&#x2020; ½ Ă&#x201C;Ă&#x2022; ž ÂŞA ĂĄ Ă&#x201D;(undirected graph)Â&#x201C; rç Ă&#x2030; Â&#x2013;Â&#x201A; Ă&#x; _ ~ Ă&#x201C;Â&#x2020; ½ Ă&#x201C;$ ž
s Ă \ Â? O HĂ&#x2022; ÂŞA ĂĄ Ă&#x201D;\ Ϋ Â&#x2DC;Ă´ Ăş Ă&#x2021; . â&#x20AC;˘ Â&#x201C; ] & X
& Ăą (adjacent vertex)s h ĂŞ Ă?ç ø Â&#x2013;Â&#x201A; Ă&#x; \  _ K Â&#x192; á &# Qe Â? Â&#x201D; H&
& Ăą ` h Ϋ Â&#x2DC;Ă´ Ăş Ă&#x2021; . â&#x20AC;˘ Ă&#x2022; ÂŞA ĂĄ Ă&#x201D;Â? HÂ&#x2DC; Ă?: x Â&#x; Â&#x201C;] Â&#x; X '§ Â? =¸ > ¢Â? HÂ&#x201C; ] o X Ă&#x203A; Ÿà Ă&#x201D;Â&#x2013; Ă?Âł Ă°Â&#x2030; ³ô & Ă&#x2021; . â&#x20AC;˘ Â&#x201C; ] Â? X ' Â&#x;§ =Â&#x201C; > r' Ă&#x2030; Â?§ Â&#x; =` > ÂŚs 6 x  # Â&#x152;&
& Ăą [ h tç Ăž Â&#x2013;_ Ă&#x; ç Â&#x2013;Â&#x201A; Ă&#x; ` ÂŚÂł Ă°Â&#x2030; Âł & Â? H~ Ă&#x201C;Z ½ Ă&#x153; O ÂźÂ&#x2013; Ă?Ă Âş~ Ă&#x201C;Â&#x2020; ½ Ă&#x201C;Ă&#x2022; ž ÂŞA ĂĄ Ă&#x201D;_
Ă&#x201E; â Âş\  Â? H ns &
& Ăą h [ t_ Ăž Ă&#x192; Âş{ 9 M : n2 /2 Ă&#x; Âźl _ ' Â?§ Â&#x; =s > Â&#x20AC; â&#x20AC;Ť×&#x203A;â&#x20AC;Ź 9 š . â&#x20AC;˘ Â&#x201C; ] o X Ă&#x203A; Ÿà Ă&#x201D;Â? Hy Â&#x2022;& Â&#x152;
& Ăą [ h t Ăž Ă&#x2022; ÂŞ _ â&#x20AC;Ť×&#x203A;â&#x20AC;Ź Â&#x201C; ] & X
& Ăą [ h t` Ăž ÂŚo Ă&#x203A; Ÿà Ă&#x201D;Â&#x2013; Ă?Ă&#x201E; Âťt Â? H~ Ă&#x201C;Z ½ ` O Ϋ Â&#x2DC;Ă´ Ăş Ă&#x2021; . â&#x20AC;˘ Â&#x2DC; Ă? [ jĂ´ Ă&#x2021;? /6 xÂ&#x201C;  rs Ă&#x2030; Â? rÂ&#x201D; : ¸à Ă&#x201D;\ ÂŚÂ&#x201A; Ă?Â&#x203A; Ă&#x192; ¸.
3
UndirectedUnweightedListGraph ADT â&#x20AC;˘ ½ ¨$
â&#x20AC;Ť×&#x203A;â&#x20AC;Ź à šÂ&#x2122; è: &
& Ăą Ăž h t [Ăľ s[ tç Ăž Â&#x2013;\ Ă&#x;  ç Â&#x2013;Â&#x201A; Ă&#x; Ă&#x153; ÂźÂ&#x2013; Ă?½ ¨$
Â? Ă a ) . y Â&#x2022;& Â&#x152;
h Ăą &Â&#x201C; rĂ&#x2022; Ă&#x2030; ÂŞ _ â&#x20AC;Ť×&#x203A;â&#x20AC;Ź Y Us ^ ÂŚs e Â&#x201D; . â&#x20AC;˘ ½ ¨Â&#x203A; ¸: y Â&#x2022;& Â&#x152;
& Ăą [ h t Ăž Â&#x201C; ] & X
& Ăą [ h t` Ăž ÂŚÂ&#x192; ½ ¨Â&#x203A; ¸&
§ Ăą =o > Ă&#x203A; Ÿà Ă&#x201D;Â&#x2013; Ă?Ă&#x201E; Âťt 9, y Â&#x2022;& Â&#x152;
& Ăą [ h tÂ&#x201C; Ăž rC Ă&#x2030; \ Â&#x2013; P Ă?Ă&#x201E; Âťt Ă´ Ă&#x2021; . protected class Vertex{ public String label; public SortedLinkedList edges; } protected Vertex[] graph; â&#x20AC;˘ Â&#x192; Ă Â&#x2013; Ă&#x; â&#x20AC;&#x201C; l Â&#x2018; rĂ&#x2019; : t$ q
Ă : public UndirectedUnweightedListGraph() â&#x20AC;˘ Âł Ă&#x2013;Â&#x201A; Ă?Z : Ăž Ă&#x152; j@ / DEF_CAPACITYĂŤ Â&#x2013; Ă&#x; u& p
& Ăą [ h t` Ăž ÂŚ è qĂ&#x192;  ºe Â? Â&#x201D; H Â&#x2018; Ă Âş~ Ă&#x201C;Â&#x2020; ½ Ă&#x201C;Ă&#x2022; ž ÂŞA ĂĄ Ă&#x201D;\ ÂŚĂ&#x2019; t$ q
Ă´ Ă Ă&#x2021; . Â&#x2018; ÂŞA Ă&#x2022; ĂĄ Ă&#x201D;_ ¨ ½ ¤Â&#x201C; ÂĄ r setup() B Ă&#x2030; jÂ&#x2122; èĂ&#x2014; Âź\ ÂŚs 6 xĂ´  Ă&#x2021; . â&#x20AC;&#x201C; public UndirectedUnweightedListGraph(int capacity) â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : Ă&#x152; capacity> 0, ĂŤ Â&#x2013;Â&#x20AC; Ă&#x; Â&#x2022; capacity 0 ¢ Â? ¸Â? H6 §Ă&#x192; ÂŁ Âşs Â&#x20AC; Ă&#x160; ĂŞÂ&#x203A; ¸| Â&#x201C; rl Ă&#x2030; Â&#x2018; rĂ&#x2019; : t$ q
Ă Ăź <°  ú . â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : capacity>0s Ă&#x152; Â&#x20AC; Ăž j@ / capacityĂŤ Â&#x2013; Ă&#x; u_ p &
& Ăą [ h t` Ăž ÂŚ è qĂ&#x192;  ºe Â? Â&#x201D; H Â&#x2018; Ă Âş~ Ă&#x201C;Â&#x2020; ½ Ă&#x201C;Ă&#x2022; ž ÂŞA ĂĄ Ă&#x201D; ÂŚĂ&#x2019; \ t$ q
Ă Â&#x201C; ÂŚ, ÂŞ Ă&#x2022;X t O ¡ §Ă&#x153; Ăş ÂźÂ&#x20AC; Ăž j@ / DEF_CAPACITYĂŤ Â&#x2013; Ă&#x; u& p
& Ăą [ h t` Ăž ÂŚ è qĂ&#x192;  ºe Â? Â&#x201D; HÂ&#x2018; Ă Âş~ Ă&#x201C;Â&#x2020; ½ Ă&#x201C;Ă&#x2022; ž ÂŞA Ă&#x201D;\ ĂĄ ÂŚĂ&#x2019; t$ q
Ă´ Ă Ă&#x2021; . Â&#x2018; Ă&#x2022; ÂŞA ĂĄ Ă&#x201D;_ ½ ¨ ¤Â&#x201C; ÂĄ r setup() j Ă&#x2030; BÂ&#x2122; èĂ&#x2014; Âź\ ÂŚs 6 xĂ´  Ă&#x2021; . â&#x20AC;&#x201C; Ă&#x2019; t$ q
Ă Â&#x2022; ¸š §s ÂĄ : void setup(int capacity) â&#x20AC;&#x201C; private void insertVertex(String label) 1
â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : label!=null, isFull()==false Ă&#x152; â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ă&#x2022; Ă&#x152; ÂŞA ĂĄ Ă&#x201D;\  Ă&#x2026; Ă&#x2019;# Q Â&#x201D; s 2 §_ ÂŁ &
& Ăą ` h ÂŚĂ&#x2020; Ă&#x2019; Ă´ Ă&#x2021; . â&#x20AC;˘ \ VĂź @: NullPointerException, GraphOverflowException â&#x20AC;&#x201C; public void insertEdge(String from, String to) â&#x20AC;˘ b Ă? 9 Â&#x201A;Z : 1) from!=null, 2) to!=null, 3) isEmpty()==false, 4) s Ă&#x152; 2 §s ÂŁ fromÂ&#x201C; &
& Ăą Ăľ h s 2 §s ÂŁ toÂ&#x201C; &
& Ăą s h e # Â&#x201D; Q Â&#x2020; Ă&#x160; < â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ă&#x2022; Ă&#x152; ÂŞA ĂĄ Ă&#x201D;\  " fs 2 §s ÂŁ fromÂ&#x201C; Ăą
&& Ăľ h s 2 §s ÂŁ toÂ&#x201C; Ăą
&& ` h ÂŚe Âą Â? Hç Â&#x2013;Â&#x201A; Ă&#x; ` ÂŚĂ&#x2020; Ă&#x2019; Ă´ Ă&#x2021; . Ă Âş~ Ă&#x201C;Â&#x2020; ½ Ă&#x201C; ž ÂŞA Ă&#x2022; ĂĄ Ă&#x201D;s Ă&#x2122; ÂźÂ&#x2013; Ă? s2 §s ÂŁ toÂ&#x201C; &
& Ăą Ăľ h s 2 §s ÂŁ fromÂ&#x201C; &
& Ăą ` h ÂŚe Âą Â? Hç Â&#x2013;Â&#x201A; Ă&#x; Â&#x2022; ¸Â&#x2020; Ă&#x160;a < Â?Ă&#x2020; Ă&#x2019; K Ă´ Ă&#x2021; . â&#x20AC;˘ \ VĂź @: NullPointerException, GraphUnderflowException â&#x20AC;&#x201C; public void removeVertex(String label) â&#x20AC;˘ b Ă? 9 Â&#x201A;Z : 1) label!=null, 2) isEmpty()==false, 3) Ă&#x2026; Ă&#x152; Ă&#x2019;# QÂ&#x201D; s 2 §_ ÂŁ &
& Ăą s h Â&#x201D; rF > K Â&#x2020; Ă&#x160; < â&#x20AC;˘ Ă&#x2013; ÂłĂ? Â&#x201A;Z : ÂŞ Ă&#x152; Ă&#x2022;A ĂĄ Ă&#x201D;\  " fĂ&#x2026; Ă&#x2019;# QÂ&#x201D; s 2 §_ ÂŁ &
& Ăą ` h ÂŚ] j Ă´ Ă&#x2021; . ] j á &Â? H&
& Ăą Ăľ h Â&#x201C; ] Ă´ X Ă&#x2021;&
& Ăą ` h ÂŚe Â? Âą HÂ&#x2014; ¸ Hç Â&#x17D; Â&#x2013;Â&#x201A; Ă&#x; ` ÂŚj ] K Ă´ Ă&#x2021; . â&#x20AC;˘ \ VĂź @: NullPointerException, GraphUnderflowException â&#x20AC;&#x201C; public void removeEdge(String from, String to) â&#x20AC;˘ b Ă? 9 Â&#x201A;Z : 1) from!=null, 2) to!=null, 3) isEmpty()==false, 4) s Ă&#x152; 2 §s ÂŁ fromÂ&#x201C; &
& Ăą Ăľ h s 2 §s ÂŁ toÂ&#x201C; &
& Ăą s h e # Â&#x201D; Q Â&#x2020; Ă&#x160;, 5) s < 2 §s ÂŁ fromÂ&#x201C; &
& Ăą Ăľ h s 2 §s ÂŁ toÂ&#x201C; &
& Ăą ` h ÂŚe Â? Âą Hç Â&#x2013;Â&#x201A; Ă&#x; s Â&#x201D; rF > K Â&#x2020; Ă&#x160; < â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : Ă&#x2022; Ă&#x152; ÂŞA ĂĄ Ă&#x201D;\  " fs 2 §s ÂŁ fromÂ&#x201C; Ăą
&& Ăľ h s 2 §s ÂŁ toÂ&#x201C; Ăą
&& ` h ÂŚe Âą Â? Hç Â&#x2013;Â&#x201A; Ă&#x; ` ÂŚ] j Ă´ Ă&#x2021; . Ă Âş~ Ă&#x201C;Â&#x2020; ½ Ă&#x201C; ž ÂŞA Ă&#x2022; ĂĄ Ă&#x201D;s Ă&#x2122; ÂźÂ&#x2013; Ă? s2 §s ÂŁ toÂ&#x201C; &
& Ăą Ăľ h s 2 §s ÂŁ fromÂ&#x201C; &
& Ăą ` h ÂŚe Âą Â? Hç Â&#x2013;Â&#x201A; Ă&#x; Â&#x2022; ¸] j K Ă´ Ă&#x2021; â&#x20AC;˘ \ VĂź @: NullPointerException, GraphUnderflowException â&#x20AC;&#x201C; public void clear() â&#x20AC;˘ Âł Ă&#x2013;Ă? Â&#x201A;Z : ÂŞ Ă&#x152; Ă&#x2022;A ĂĄ Ă&#x201D;\  e Â? Â&#x201D; HÂ&#x2014; ¸Â&#x17D; HÂ&#x201D; ¸Ă&#x2014; Âź\ ÂŚ] j Ă´ Ă&#x2021; . â&#x20AC;&#x201C; public boolean isEmpty() â&#x20AC;˘ Âł Ă&#x2013;Ă? Â&#x201A;Z : ÂŞ Ă&#x152; Ă&#x2022;A ĂĄ Ă&#x201D; q # Qe Ă&#x153; Â&#x201D; ÂźÂ&#x20AC; true\ ÂŚĂŹ Ă?¨ ø Â&#x160; 8 Â&#x201C; ÂŚĂ&#x2022; ÂŞX t O ¡ §Ă&#x153; Ăş ÂźÂ&#x20AC; false\ ÂŚĂŹ Ă?¨ ø Â&#x160;Ă´ 8 Ă&#x2021; . â&#x20AC;&#x201C; public boolean isFull() â&#x20AC;˘ Âł Ă&#x2013;Ă? Â&#x201A;Z : Ă&#x2022; Ă&#x152; ÂŞA ĂĄ Ă&#x201D;\  8s Â&#x153;& Š
& Ăą ` h ÂŚĂ&#x2020; Ă&#x2019; ½ Ă&#x2030;Ă&#x192; + Âş\ Ă&#x153; O ÂźÂ&#x20AC; true\ ÂŚĂŹ Ă?¨ ø Â&#x160; 8 Â&#x201C; ÂŚĂ&#x2022; ÂŞX t O ¡ §Ă&#x153; Ăş ÂźÂ&#x20AC; false\ ÂŚĂŹ Ă? ø Â&#x160;Ă´ 8 ¨ Ă&#x2021; . â&#x20AC;&#x201C; public void showStructure() â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : \ Ă&#x152; 6 O § ÂŁ â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : ĂŤ Ă&#x152; Â&#x2013;Â&#x20AC; Ă&#x; Â&#x2022;Ă&#x2022; Â? ÂŞA ĂĄ Ă&#x201D; q # Qe Ă&#x153; Â&#x201D; ÂźÂ&#x20AC; â&#x20AC;&#x153;Graph is empty.â&#x20AC;?\ ÂŚĂ&#x2DC; Τ 4 Â&#x201C; ÂŚ, Ă&#x2022; ÂŞX t O ¡ §Ă&#x153; Ăş ÂźÂ&#x20AC; y Â&#x2022;& Â&#x152;
& Ăą [ h t Ăž ÂŞ Ă&#x2022; _ â&#x20AC;Ť×&#x203A;â&#x20AC;Ź Â&#x201C;] & X
& Ăą ` h ÂŚĂ&#x2DC; Τ Ă´ 4 Ă&#x2021; . s B jÂ&#x2122; èĂ&#x2014; ÂźÂ? Hn ! Q^ ç
` ÂŚ3 q& l Ă&#x153; h ÂźÂ&#x2013; Ă?ĂŤ Â&#x2013; Ă&#x; 6 xÂ?  a ) .
4
PreLab â&#x20AC;˘ UndirectedUnweightedListGraphÂ? H UnweightedListGraph` ÂŚ Â&#x153;5 Š q~ Ă&#x2026; Ă&#x17D; Ă&#x192; ½ ¨Â&#x2030; ³á & &9, UnweightedListGraphÂ&#x201C; r ListGraph Ă&#x2030; Â&#x153;5 Š q~ Ă&#x2026; Ă&#x17D; Ă&#x192; ½ ¨Â&#x2030; ÂłÂ? & a ) .s Â? rÂ&#x201D; : ¸à Ă&#x201D;Â&#x201A; Ă?Â&#x203A; Ă&#x192; ¸. â&#x20AC;˘ y Â&#x153;_ Š < Ă&#x152;` Â&#x2026;s t \  e Â? Â&#x201D; H Graph.zip` ÂŚ ĂŽ r~ Ă&#x17D; Ă&#x192; UndirectedUnweightedListGraph.java\ ΢ a$
Ă . â&#x20AC;˘ B jÂ&#x2122; èĂ&#x2014; ÂźĂ&#x2014; ĂŚ\  removeVertex\ ΢ a$
Ă . s M :s Â? rÂ&#x201D; : ¸à Ă&#x201D;\  e Â? Â&#x201D; H % â&#x20AC;Ť×&#x203A;â&#x20AC;Ź Â&#x192;! Â&#x2014; 3 ¸Â&#x17D; H&
& Ăą [ h t_ Ăž Â&#x201C; ] o X Ă&#x203A; Ÿà Ă&#x201D;\ ÂŚ Ă&#x2019; Â&#x17D; o Â? t ´ Â&#x2DC;Â&#x201C; Ăş ÂŚ, ] j ½ Ă&#x2030;& +
& Ăą _ h Â&#x201C;] o X Ă&#x203A; Ÿà Ă&#x201D;\ ÂŚs 6 x  # Â&#x152;ç Â&#x2013;Â&#x201A; Ă&#x; [ t` Ăž ÂŚ] j . â&#x20AC;˘ Â&#x192; Ă&#x2022; ÂŞA ĂĄ Ă&#x201D;(connected graph)ĂŞ Ă?à ø Âş~ Ă&#x201C;Â&#x2020; ½ Ă&#x201C;Ă&#x2022; ž ÂŞA ĂĄ Ă&#x201D;\  " f" fÂ&#x2013; Ă? Â? rÂ&#x2014; Ă&#x2030; ¸Â&#x17D; HÂ&#x160; Â&#x153;_ Š &
& Ăą [ h t Ăž s \ Â
Â&#x2013; â Ă? Â&#x201D; rF > Â? HĂ&#x2022; ÂŞ A ĂĄ Ă&#x201D;s . â&#x20AC;˘ # QÂ&#x2039; Â&#x192; " Ă&#x2022; ÂŞA ĂĄ Ă&#x201D;\  " fQ #Â&#x2039; ç " Â&#x2013;Â&#x201A; Ă&#x; ` ÂŚ] j % ` i ÂŚM :# Â&#x152;Â&#x201E; y Â&#x192; Ă&#x2022; ÂŞA ĂĄ Ă&#x201D;Â&#x201C; t ¡ Â&#x2DC;Â&#x201C; Ăş ÂŚz ¡` ÂŚĂ&#x192; Âşe Â&#x201D; . # QÂ&#x2039; Ă " Âş~ Ă&#x201C;Â&#x2020; ½ Ă&#x201C; ž Ă&#x2022; ÂŞA ĂĄ Ă&#x201D;_ Â&#x2014; ¸Â&#x17D; H&
& Ăą _ h Ă&#x192; Âş Â&#x2039; Â&#x2022;Ă&#x192; Â&#x152; Âşs Â&#x20AC; # Â&#x152;l " f _ ç Â&#x2013;Â&#x201A; Ă&#x; ` ÂŚ] j # Â&#x152;Â&#x2022; ¸# Â&#x152;Â&#x201E; y Â&#x192; Ă&#x2022; ÂŞA ĂĄ Ă&#x201D; Â? a ) . ĂŹ Ă? ø @ /Â&#x2013; Ă? s Â&#x153;_ Š &
& Ăą _ h Ă&#x192; Âş f Ă&#x2039;Ă&#x192; . Âş Â&#x201C; Ă Âş~ Ă&#x201C;Â&#x2020; ½ Ă&#x201C;Ă&#x2022; ž ÂŞA ĂĄ Ă&#x201D;\  " fç Â&#x2013;Â&#x201A; Ă&#x; ` ÂŚ ] j Â&#x20AC; Ăľ Ă&#x2022; ÂŞA ĂĄ Ă&#x201D; Â&#x192; Ă&#x2022; ÂŞ A ĂĄ Ă&#x201D; Â&#x201C; t Â? H¡ Â&#x2DC;Ă&#x192; Ăş Âş\ O . â&#x20AC;˘ Ă&#x2022; ÂŞA ĂĄ Ă&#x201D;_ Â&#x2014; ¸Â&#x17D; H&
& Ăą _ h Ă&#x192; Âş Â&#x2039; Â&#x2022;Ă&#x192; Â&#x152; ÂşÂ&#x201C; t Â&#x17D; Â? H 6 §B ÂŁ jÂ&#x2122; èĂ&#x2014; Âź\ ΢ a$
Ă . â&#x20AC;˘ public boolean allEven()
2
â&#x20AC;&#x201C; b Â&#x201A; 9 Ă?Z Ă&#x152;: Ă&#x2022; ÂŞA ĂĄ Ă&#x201D; Â&#x192; Ă&#x2022; ÂŞA ĂĄ Ă&#x201D;s . â&#x20AC;&#x201C; Âł Ă&#x2013;Â&#x201A; Ă?Z Ă&#x152; : Ă&#x2022; ÂŞA ĂĄ Ă&#x201D;_ Â&#x2014; ¸Â&#x17D; H&
& Ăą [ h t_ Ăž Ă&#x192; Âş Â&#x2039; Â&#x2022;Ă&#x192; Â&#x152; Âşs Â&#x20AC; true\ ÂŚĂŹ Ă?¨ ø Â&#x160; 8 Â&#x201C; ÂŚ, Ă&#x2022; ÂŞX t O ¡ §Ă&#x153; Ăş ÂźÂ&#x20AC; false\ ÂŚĂŹ Ă?¨ ø Â&#x160; 8 Ă&#x2021; Ă´ . â&#x20AC;˘ ¢ a$
Ă Â&#x20AC; TestGraph.java\ ÂŚs 6 x  # Â&#x152;½ ¨Â&#x2030; Âł_ & &
S Ăą Â&#x2030;$ X
` Ă ÂŚS Â&#x2030; X Â&#x201C; .
5
InLab â&#x20AC;˘ Â&#x192; Ă&#x2022; ÂŞA ĂĄ Ă&#x201D;\  " fÂ&#x2014; ¸Â&#x17D; H&
& Ăą ` h ÂŚĂ´ Ă&#x2021; m Ă Â&#x201D; H r Â? H~ Ă&#x201C;Z ½ Â&#x201C; O rĂ&#x; Ă&#x2030; Âź> U ¡s Ă&#x201E; ÂşÂ&#x201A; ~ Ă&#x201C;Z ½ Ăľ O -q Ă&#x201E; ÂşÂ&#x201A; ~ Ă&#x201C;Z ½ s O e Â&#x201D; . U ¡s Ă&#x201E; Âş ~ Â&#x201A; Ă&#x201C;Z ½ Â&#x201C; O rĂ´ Ă&#x2030; Ă&#x2021;A ¤ ĂĄ
Â&#x2013; â Ă?\ ÂŚ 8s Â&#x153;° Š Â&#x2DC;Ă&#x192; Ăş Âş\ ` O ÂŚM : t Â&#x20AC; $ Â&#x201E; Ă?Ă&#x2019; Ă&#x192; o Â? Â? H~ Ă&#x201C;Z ½ s O Â&#x201C; ÂŚ, -q Ă&#x201E; ÂşÂ&#x201A; ~ Ă&#x201C;Z ½ Â&#x201C; O rr Ă&#x2030;  Â&#x2022;& Â&#x152;
& Ăą h \ Â " f
Â&#x2013; â Ă?_ U ´s \ ÂŚ lĂŻ rĂ&#x153; ÂźÂ&#x2013; Ă?Â&#x201E; Ă?Ă&#x2019; Ă&#x192; o Â? Â? H~ Ă&#x201C;Z ½ s O . â&#x20AC;˘ Âż Âş t ~ Ă&#x201C;Z ½ Ă&#x153; O ÂźÂ&#x2013; Ă?Ă H r½ Ă&#x2030;Ă&#x192; + Âşe Â? Â&#x201D; H? /Ă&#x201A; Ă&#x2019;ĂŹ Ă?4 ø ¤ Â&#x; 9 tA Ăž Ă&#x203A; Âź\ ΢ a$
Ă . protected class GraphIterator implements Iterator{ LinkedQueue traverseQueue; public GraphIterator(int type, String start){ Ăľ } public boolean hasNext() { Ăľ } public Object next() { Ăľ } public void remove() { throw new UnsupportedOperationException; } private void BreadthFirstSearch(int start); private void DepthFirstSearch(int start); } â&#x20AC;&#x201C; public GraphIterator(int type, String start) â&#x20AC;˘ b Â&#x201A; 9 Ă?Z : typeÂ&#x201C; Ă&#x152; r Graph.DFS ¢ Ă&#x2030; ¸Â? H Graph.BFSs # Q 9, start!=nulls # Q Ă´ Ă&#x2021; . ¢ ¸ô Ă&#x2021;s 2 § ÂŁ startÂ&#x201C; s &
& Ăą h se # Â&#x201D; Q Ă´ Ă&#x2021; . â&#x20AC;˘ Ă&#x2013; ÂłÂ&#x201A; Ă?Z : ~ Ă&#x152; Ă&#x201C;ĂŤ ½ HĂ´ Ă&#x2021;Ă H" fÂ&#x2013; Ă?&
& Ăą _ h labels enqueue Â? aĂ&#x2021; ) Š\ ÂŚĂŤ Â&#x2013;Â&#x17D; Ă&#x; H . â&#x20AC;&#x201C; private void BreadthFirstSearch(int start) â&#x20AC;&#x201C; private void DepthFirstSearch(int start) s Ă&#x2014; ĂŚĂ&#x2019; t$ q
Ă , BreadthFirstSearch, DepthFirstSearch\ Œ½ ¨Â&#x2030; ÂłK & Ă´ Ă&#x2021; . ¡ Â&#x2DC;Â&#x201C; Ăş ÂŚo 7 §Â&#x201C; ÂŁ rs Ă&#x2030; Â? rÂ&#x201D; : ¸à Ă&#x201D;\  [" O
á ĂŽ &# Qe Â&#x201D; . â&#x20AC;˘ ¢$ a
Ă Â&#x20AC; TestGraph.java\ ÂŚs 6 x  # Â&#x152;½ ¨Â&#x2030; Âł_ & &
S Ăą Â&#x2030;$ X
` Ă ÂŚS Â&#x2030; X Â&#x201C; . s M : â&#x20AC;&#x2DC;Bâ&#x20AC;&#x2122; "
§ Î
# ĂŽ Q< Ăź â&#x20AC;&#x2DC;Dâ&#x20AC;&#x2122; "
§ Î
# ĂŽ Q\ ÂŚ 6 xĂ´ Â Ă&#x2021; .
6
PostLab â&#x20AC;˘ Â&#x201C; ] Â? X ' Â&#x;§ =` > ÂŚs 6 x  # Â&#x152;Ă&#x201E; Âť~ Ă&#x201C;Â&#x2020; ½ Ă&#x201C; Ă&#x2014; ž ĂŚu Ă&#x2022; ÂŞA ĂĄ Ă&#x201D; ADTÂ&#x201C; MatrixGraph` ΢ a$
Ă . â&#x20AC;&#x201C; Â&#x201C; ] Â? X ' Â&#x;§ =` > ÂŚs 6 xĂ´  Ă&#x2021;Ă Âş~ Ă&#x201C;Â&#x2020; ½ Ă&#x201C;Ă&#x2022; ž ÂŞA ĂĄ Ă&#x201D;Â? H 6 §þ ÂŁ °  Â&#x201C; Ăş rl Ă&#x2030; r Ă?! Q Ă&#x192; Âş\ ÂŚs 6 xĂ´  Ă&#x2021; . protected String[] graph; protected int[][] adjMatrix; graphÂ? H&
& Ăą Ăž h t [_ label` ÂŚĂ&#x201E; Âťt Â? Ho Ă&#x203A; Ÿà Ă&#x201D;s Â&#x201C; ÂŚ, adjMatrixÂ? Hç Â&#x2013;Â&#x201A; Ă&#x; [ t` Ăž ÂŚĂ&#x201E; Âťt Â? H Â&#x201C; ] ' X Â?§ Â&#x; =Â&#x2013; > Ă?" f, adjMatrix[i][j] ° â&#x20AC;Ť×&#x203A;â&#x20AC;Źs Ăş -1s Â&#x20AC; s 2 §s ÂŁ vertexList[i]Â&#x201C; &
& Ăą Ăľ h s 2 §s ÂŁ vertexList[j]Â&#x201C; &
Ăą & ` h ÂŚe Âą Â? Hç Â&#x2013;Â&#x201A; Ă&#x; s \ O Â? H ` â&#x20AC;Ť×&#x203A;â&#x20AC;Ź ÂŚ p ¡ . â&#x20AC;˘ DirectedWeightedMatrixGraphÂ&#x201C; r WeightedMatrixGraph` Ă&#x2030; ÂŚ Â&#x153;5 Š q~ Ă&#x2026; Ă&#x17D; Ă&#x192; ½ ¨Â&#x2030; ³á & &9, WeightedMatrixGraphÂ&#x201C; r MatrixGraph Ă&#x2030; Â&#x153;5 Š q~ Ă&#x2026; Ă&#x17D; Ă&#x192; ½ ¨Â&#x2030; ÂłÂ? & a ) . â&#x20AC;˘ InLabĂľ Ă° Ă? t ø Â&#x2013; Ă?Ă H r\ Œ½ Ă&#x2030;M + : 6 x  Â? H? /Ă&#x201A; Ă&#x2019;ĂŹ Ă?4 ø ¤ Â&#x; 9 t ĂžA Ă&#x203A; Âź\ ΢ a$
Ă .
3