44
Design Patterns for Data Structures Mutable Lists Chapter 6

Mutable Lists - Pepperdine University · Design Patterns for Data Structures Figure 6.1 &KDSWHU 0XWDEOH /LVWV 4 (a) A linked list. 9 2 7 4 (c) A circular linked list. 9 2 7 (d) A

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Mutable Lists - Pepperdine University · Design Patterns for Data Structures Figure 6.1 &KDSWHU 0XWDEOH /LVWV 4 (a) A linked list. 9 2 7 4 (c) A circular linked list. 9 2 7 (d) A

Design Patterns for Data Structures

Mutable Lists

Chapter 6

Page 2: Mutable Lists - Pepperdine University · Design Patterns for Data Structures Figure 6.1 &KDSWHU 0XWDEOH /LVWV 4 (a) A linked list. 9 2 7 4 (c) A circular linked list. 9 2 7 (d) A

Design Patterns for Data Structures

The Classic Linked Implementation

Chapter 6

Page 3: Mutable Lists - Pepperdine University · Design Patterns for Data Structures Figure 6.1 &KDSWHU 0XWDEOH /LVWV 4 (a) A linked list. 9 2 7 4 (c) A circular linked list. 9 2 7 (d) A

Design Patterns for Data Structures Figure 6.1

��� &KDSWHU�� 0XWDEOH�/LVWV

4

(a) A linked list.

79 2

4

(c) A circular linked list.

79 2

(d) A doubly linked list.

9 2 74

(e) A doubly linked circular list.

9 2 74

(f) A doubly linked circular list with a head node.

9 2 74

4

(b) A linked list with a second pointer to the last node.

79 2

)LJXUH ��� &ODVVLF�OLQNHG�OLVWV� 7KH�OLVWV�LQ�SDUWV��E��DQG��F��KDYH�DFFHVV�WR�WKH�ODVWQRGH�LQ�WLPHΘ(1)� 7KH�GRXEO\�OLQNHG�OLVWV�DOORZ�WUDYHUVDO�LQ�ERWK�GLUHFWLRQV�

7KH�DGYDQWDJH�RI�VWRULQJ�GDWD�LQ�D�OLQNHG�OLVW�DV�RSSRVHG�WR�DQ�DUUD\�LV�WKDW�\RX�GR�QRWQHHG�WR�VSHFLI\�WKH�PD[LPXP�QXPEHU�RI�GDWD�HOHPHQWV�ZKHQ�\RX�GHFODUH�WKH�OLVW� <RXFDQ�HIÀFLHQWO\�DOORFDWH�D�QRGH�IURP�WKH�KHDS�ZKHQ�\RX�DGG�DQ�HOHPHQW�DQG�GHDOORFDWHIURP�WKH�KHDS�ZKHQ�\RX�UHPRYH�DQ�HOHPHQW�

2QH�GLVDGYDQWDJH�RI�WKH�OLVW�LQ�)LJXUH�����D��LV�WKH�LQHIÀFLHQF\�LQ�DFFHVVLQJ�LWV�ODVWHOHPHQW� VD\� LI�\RX�ZDQW� WR�DSSHQG�D�YDOXH�DW� WKH�HQG�RI� WKH� OLVW� 7R�DFFHVV� WKH� ODVWHOHPHQW� \RX�PXVW�WUDYHUVH�WKH�OLVW�IURP�EHJLQQLQJ�HQG�IROORZLQJ�WKH�OLQNV�IURP�QRGH�WRQRGH� 7KH�WLPH�WR�DFFHVV�WKH�ODVW�HOHPHQW�LVΘ(n) ZKHUH n LV�WKH�QXPEHU�RI�HOHPHQWV�LQWKH�OLVW�

&RS\ULJKW��� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG 5HYLVHG� $XJXVW��� ����

&KDSWHU��

0XWDEOH�/LVWV

&KDSWHU���GHVFULEHV�LPPXWDEOH�OLVWV� WKDW�LV� OLVWV�WKDW�FDQQRW�FKDQJH� ,I�\RX�ZDQW�D�QHZOLVW�WKDW�LV�VRPH�DOWHUDWLRQ�RI�D�JLYHQ�OLVW�\RX�PXVW�PDNH�D�QHZ�OLVW�IURP�WKH�ROG�OLVW�ZLWKWKH�DOWHUDWLRQ�LQFRUSRUDWHG�LQ�WKH�FRQVWUXFWLRQ�SURFHVV�RI�WKH�QHZ�OLVW� 2QFH�WKDW�QHZ�OLVWLV�FRQVWUXFWHG� LW�FDQ�DOVR�QHYHU�FKDQJH�

,PPXWDEOH�OLVWV�KDYH�PDQ\�WKHRUHWLFDO�DQG�SUDFWLFDO�DGYDQWDJHV� 2QH�GLVDGYDQWDJH�KRZHYHU� LV�ORZ�HIÀFLHQF\� ,Q�WKH�DERYH�VFHQDULR� LI�\RX�QR�ORQJHU�FDUH�IRU�WKH�RULJLQDOOLVW�LW�PXVW�EH�JDUEDJH�FROOHFWHG� $ PRUH�HIÀFLHQW�SURFHVV�LV�WR�DOORZ�WKH�RULJLQDO�OLVW�WREH�PRGLÀHG�GLUHFWO\� ZKLFK�QR�ORQJHU�UHTXLUHV�FRS\LQJ�RU�JDUEDJH�FROOHFWLQJ�

7KLV�FKDSWHU�SUHVHQWV�WKUHH�PXWDEOH�OLVW�LPSOHPHQWDWLRQV�³�WKH�FODVVLF�OLQNHG�OLVW�WKH�&RPSRVLWH�6WDWH�OLVW� DQG�WKH�&RPSRVLWH�6WDWH�9LVLWRU�OLVW� 7KH�ÀUVW�GDWD�VWUXFWXUH�LVWKH�RQH�XVHG�LQ�SUDFWLFH� 7KH�VHFRQG�DQG�WKLUG�LPSOHPHQWDWLRQV�DUH�SUHVHQWHG�WR�WHDFKWZR�LPSRUWDQW�22 GHVLJQ�SDWWHUQV�³�WKH�&RPSRVLWH�6WDWH�SDWWHUQ�DQG�WKH�&RPSRVLWH6WDWH�9LVLWRU�SDWWHUQ�

��� 7KH�&ODVVLF�/LQNHG�,PSOHPHQWDWLRQ)LJXUH���� VKRZV�VRPH�FRPPRQ�LPSOHPHQWDWLRQV�RI�WKH�FODVVLF�OLQNHG�OLVW� 3DUW��D��LVWKH�VLPSOHVW� $ QRGH�KDV�WZR�DWWULEXWHV� BGDWD DQG BQH[W�

WHPSODWH�FODVV 7! FODVV /1RGH ^SULYDWH�

7 BGDWD�/1RGH BQH[W�

$WWULEXWH BGDWD KDV�W\SH 7��$WWULEXWH BQH[W LV�D�SRLQWHU�WR�D /1RGH DQG�SRLQWV�WR�WKHQH[W�QRGH�LQ�WKH�OLQNHG�OLVW� 7KH�OLVW�LWVHOI�FRQVLVWV�RI�D�VLQJOH�SRLQWHU�WR�WKH�ÀUVW�QRGH�DWWKH�KHDG�RI�WKH�OLVW�

WHPSODWH�FODVV 7! FODVV /LVW/ ^SULYDWH�

/1RGH�7! BKHDG�

7KH�ODVW�QRGH�LQ�WKH�OLVW�KDV�D�YDOXH�RI QXOOSWU IRU BQH[W� ZKLFK�LV�XVHG�WR�GHWHFW�WKHHQG�RI�WKH�OLVW�

���

&KDSWHU��

0XWDEOH�/LVWV

&KDSWHU���GHVFULEHV�LPPXWDEOH�OLVWV� WKDW�LV� OLVWV�WKDW�FDQQRW�FKDQJH� ,I�\RX�ZDQW�D�QHZOLVW�WKDW�LV�VRPH�DOWHUDWLRQ�RI�D�JLYHQ�OLVW�\RX�PXVW�PDNH�D�QHZ�OLVW�IURP�WKH�ROG�OLVW�ZLWKWKH�DOWHUDWLRQ�LQFRUSRUDWHG�LQ�WKH�FRQVWUXFWLRQ�SURFHVV�RI�WKH�QHZ�OLVW� 2QFH�WKDW�QHZ�OLVWLV�FRQVWUXFWHG� LW�FDQ�DOVR�QHYHU�FKDQJH�

,PPXWDEOH�OLVWV�KDYH�PDQ\�WKHRUHWLFDO�DQG�SUDFWLFDO�DGYDQWDJHV� 2QH�GLVDGYDQWDJH�KRZHYHU� LV�ORZ�HIÀFLHQF\� ,Q�WKH�DERYH�VFHQDULR� LI�\RX�QR�ORQJHU�FDUH�IRU�WKH�RULJLQDOOLVW�LW�PXVW�EH�JDUEDJH�FROOHFWHG� $ PRUH�HIÀFLHQW�SURFHVV�LV�WR�DOORZ�WKH�RULJLQDO�OLVW�WREH�PRGLÀHG�GLUHFWO\� ZKLFK�QR�ORQJHU�UHTXLUHV�FRS\LQJ�RU�JDUEDJH�FROOHFWLQJ�

7KLV�FKDSWHU�SUHVHQWV�WKUHH�PXWDEOH�OLVW�LPSOHPHQWDWLRQV�³�WKH�FODVVLF�OLQNHG�OLVW�WKH�&RPSRVLWH�6WDWH�OLVW� DQG�WKH�&RPSRVLWH�6WDWH�9LVLWRU�OLVW� 7KH�ÀUVW�GDWD�VWUXFWXUH�LVWKH�RQH�XVHG�LQ�SUDFWLFH� 7KH�VHFRQG�DQG�WKLUG�LPSOHPHQWDWLRQV�DUH�SUHVHQWHG�WR�WHDFKWZR�LPSRUWDQW�22 GHVLJQ�SDWWHUQV�³�WKH�&RPSRVLWH�6WDWH�SDWWHUQ�DQG�WKH�&RPSRVLWH6WDWH�9LVLWRU�SDWWHUQ�

��� 7KH�&ODVVLF�/LQNHG�,PSOHPHQWDWLRQ)LJXUH���� VKRZV�VRPH�FRPPRQ�LPSOHPHQWDWLRQV�RI�WKH�FODVVLF�OLQNHG�OLVW� 3DUW��D��LVWKH�VLPSOHVW� $ QRGH�KDV�WZR�DWWULEXWHV� BGDWD DQG BQH[W�

WHPSODWH�FODVV 7! FODVV /1RGH ^SULYDWH�

7 BGDWD�/1RGH BQH[W�

$WWULEXWH BGDWD KDV�W\SH 7��$WWULEXWH BQH[W LV�D�SRLQWHU�WR�D /1RGH DQG�SRLQWV�WR�WKHQH[W�QRGH�LQ�WKH�OLQNHG�OLVW� 7KH�OLVW�LWVHOI�FRQVLVWV�RI�D�VLQJOH�SRLQWHU�WR�WKH�ÀUVW�QRGH�DWWKH�KHDG�RI�WKH�OLVW�

WHPSODWH�FODVV 7! FODVV /LVW/ ^SULYDWH�

/1RGH�7! BKHDG�

7KH�ODVW�QRGH�LQ�WKH�OLVW�KDV�D�YDOXH�RI QXOOSWU IRU BQH[W� ZKLFK�LV�XVHG�WR�GHWHFW�WKHHQG�RI�WKH�OLVW�

���

Page 4: Mutable Lists - Pepperdine University · Design Patterns for Data Structures Figure 6.1 &KDSWHU 0XWDEOH /LVWV 4 (a) A linked list. 9 2 7 4 (c) A circular linked list. 9 2 7 (d) A

Design Patterns for Data Structures Figure 6.1��� &KDSWHU�� 0XWDEOH�/LVWV

4

(a) A linked list.

79 2

4

(c) A circular linked list.

79 2

(d) A doubly linked list.

9 2 74

(e) A doubly linked circular list.

9 2 74

(f) A doubly linked circular list with a head node.

9 2 74

4

(b) A linked list with a second pointer to the last node.

79 2

)LJXUH ��� &ODVVLF�OLQNHG�OLVWV� 7KH�OLVWV�LQ�SDUWV��E��DQG��F��KDYH�DFFHVV�WR�WKH�ODVWQRGH�LQ�WLPHΘ(1)� 7KH�GRXEO\�OLQNHG�OLVWV�DOORZ�WUDYHUVDO�LQ�ERWK�GLUHFWLRQV�

7KH�DGYDQWDJH�RI�VWRULQJ�GDWD�LQ�D�OLQNHG�OLVW�DV�RSSRVHG�WR�DQ�DUUD\�LV�WKDW�\RX�GR�QRWQHHG�WR�VSHFLI\�WKH�PD[LPXP�QXPEHU�RI�GDWD�HOHPHQWV�ZKHQ�\RX�GHFODUH�WKH�OLVW� <RXFDQ�HIÀFLHQWO\�DOORFDWH�D�QRGH�IURP�WKH�KHDS�ZKHQ�\RX�DGG�DQ�HOHPHQW�DQG�GHDOORFDWHIURP�WKH�KHDS�ZKHQ�\RX�UHPRYH�DQ�HOHPHQW�

2QH�GLVDGYDQWDJH�RI�WKH�OLVW�LQ�)LJXUH�����D��LV�WKH�LQHIÀFLHQF\�LQ�DFFHVVLQJ�LWV�ODVWHOHPHQW� VD\� LI�\RX�ZDQW� WR�DSSHQG�D�YDOXH�DW� WKH�HQG�RI� WKH� OLVW� 7R�DFFHVV� WKH� ODVWHOHPHQW� \RX�PXVW�WUDYHUVH�WKH�OLVW�IURP�EHJLQQLQJ�HQG�IROORZLQJ�WKH�OLQNV�IURP�QRGH�WRQRGH� 7KH�WLPH�WR�DFFHVV�WKH�ODVW�HOHPHQW�LVΘ(n) ZKHUH n LV�WKH�QXPEHU�RI�HOHPHQWV�LQWKH�OLVW�

&RS\ULJKW��� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG 5HYLVHG� $XJXVW��� ����

��� 7KH�&ODVVLF�/LQNHG�,PSOHPHQWDWLRQ ���

(a) The empty list for a list without a head node.

(b) The empty list for a doubly linked circular list with a head node.

)LJXUH ��� (PSW\�OLQNHG�OLVWV�

3DUW��E��VKRZV�DQ�LPSOHPHQWDWLRQ�WKDW�RYHUFRPHV�WKH�LQHIÀFLHQF\�E\�SURYLGLQJ�DVHFRQG�SRLQWHU�WR�WKH�ODVW�QRGH� 7KH�QRGH�LV�GHÀQHG�DV�EHIRUH� EXW�WKH�OLVW�ZRXOG�QRZ�EHGHÀQHG�DV

WHPSODWH�FODVV 7! FODVV /LVW/ ^SULYDWH�

/1RGH�7! BKHDG�/1RGH�7! BWDLO�

%HFDXVH�QR�ORRS�LV�UHTXLUHG�WR�DFFHVV�WKH�ODVW�HOHPHQW�WKH�WLPH�WR�GR�VR�LV�UHGXFHG�IURPΘ(n) WRΘ(1)�

7KH�OLVW�LQ�SDUW��E��LV�QRW�DQ�HOHJDQW�VROXWLRQ�WR�WKH�SUREOHP�RI�HIÀFLHQWO\�DFFHVVLQJWKH�ODVW�QRGH�DV�LW�DGGV�FRPSOH[LW\�WR�WKH�GHÀQLWLRQ�RI�WKH�OLVW� $ EHWWHU�VROXWLRQ�LV�WRPDNH�WKH�OLVW�FLUFXODU�DV�LQ�SDUW��F�� ,QVWHDG�RI�PDLQWDLQLQJ�WKH BQH[W ÀHOG�RI�WKH�ODVWQRGH�WR�EH QXOOSWU� PDLQWDLQ�LW�WR�SRLQW�WR�WKH�ÀUVW�QRGH� ,QVWHDG�RI�KDYLQJ�WZR�SRLQWHUVLQ�WKH�GHÀQLWLRQ�RI�D�OLVW� KDYH�RQH�SRLQWHU�WKDW�SRLQWV�WR�WKH�ODVW�QRGH� 1R�PDWWHU�KRZPDQ\�HOHPHQWV�DUH�LQ�WKH�OLVW� WKH�WLPH�WR�DFFHVV�WKH�ÀUVW�QRGH�DQG�WKH�ODVW�QRGH�LVΘ(1)�,W�GRHV�QRW�UHTXLUH�D�ORRS�WR�JHW�IURP�WKH�ODVW�QRGH�WR�WKH�ÀUVW�QRGH�

)LJXUH�����G�� LV�DQRWKHU�FRPPRQ� LPSOHPHQWDWLRQ�RI�D� OLQNHG� OLVW�FDOOHG�D�GRXEO\OLQNHG�OLVW� ,Q�VXFK�D�OLVW� HDFK�QRGH�KDV�D�SRLQWHU�WR�WKH�SUHYLRXV�QRGH�DV�ZHOO�DV�WKH�QH[WQRGH�

WHPSODWH�FODVV 7! FODVV /1RGH ^SULYDWH�

/1RGH BSUHY�7 BGDWD�/1RGH BQH[W�

7KHUH�DUH�WZR�DGYDQWDJHV�RI�WKLV�LPSOHPHQWDWLRQ� <RX�FDQ�WUDYHUVH�WKH�OLVW�LQ�HLWKHU�GL�UHFWLRQ� ZKHUHDV�ZLWK�D�VLQJO\�OLQNHG�OLVW�\RX�FDQ�RQO\�WUDYHUVH�IURP�EHJLQQLQJ�WR�HQG�$OVR� ZKHQ�\RX�VHDUFK�D�OLVW�E\�UXQQLQJ�D�SRLQWHU�GRZQ�WKH�QRGHV� VRPH�DOJRULWKPV�UH�TXLUH�DFFHVV�WR�WKH�QRGH�MXVW�EHIRUH�WKH�QRGH�WR�ZKLFK�WKH�UXQQLQJ�SRLQWHU�SRLQWV� +DYLQJD�SRLQWHU�WKDW�SRLQWV�WR�WKH�SUHYLRXV�QRGH�FDQ�VLPSOLI\�WKH�FRGH�LQ�VXFK�DOJRULWKPV�

7KH�GRXEO\� OLQNHG� OLVW� LQ�SDUW� �G��KDV� WKH�GLVDGYDQWDJH�RI�UHTXLULQJ� WLPH Θ(n) WRDFFHVV�WKH�ODVW�QRGH� 7KDW�GHÀFLHQF\�LV�FRUUHFWHG�E\�WKH�GRXEO\�OLQNHG�FLUFXODU�OLVW�LQSDUW��H�� 7KH�OLVW�SRLQWHU�QHHG�QRW�SRLQW�WR�WKH�ODVW�QRGH� EHFDXVH�LW�FDQ�XVH�WKH BSUHYSRLQWHU�RI�WKH�ÀUVW�QRGH�WR�DFFHVV�WKH�ODVW�QRGH�LQ�WLPHΘ(1)�

)LJXUH�����I��VKRZV�D�FRPPRQ�LPSOHPHQWDWLRQ�RI�WKH�FODVVLF�OLQNHG�OLVW� &RPSDUHGWR�WKH�GRXEO\�OLQNHG�FLUFXODU�OLVW�RI�SDUW��H�� LW�KDV�DQ�DGGLWLRQDO�KHDG�QRGH�ZLWK�QR�GDWD�

5HYLVHG� $XJXVW��� ���� &RS\ULJKW��� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG

Page 5: Mutable Lists - Pepperdine University · Design Patterns for Data Structures Figure 6.1 &KDSWHU 0XWDEOH /LVWV 4 (a) A linked list. 9 2 7 4 (c) A circular linked list. 9 2 7 (d) A

Design Patterns for Data Structures��� &KDSWHU�� 0XWDEOH�/LVWV

4

(a) A linked list.

79 2

4

(c) A circular linked list.

79 2

(d) A doubly linked list.

9 2 74

(e) A doubly linked circular list.

9 2 74

(f) A doubly linked circular list with a head node.

9 2 74

4

(b) A linked list with a second pointer to the last node.

79 2

)LJXUH ��� &ODVVLF�OLQNHG�OLVWV� 7KH�OLVWV�LQ�SDUWV��E��DQG��F��KDYH�DFFHVV�WR�WKH�ODVWQRGH�LQ�WLPHΘ(1)� 7KH�GRXEO\�OLQNHG�OLVWV�DOORZ�WUDYHUVDO�LQ�ERWK�GLUHFWLRQV�

7KH�DGYDQWDJH�RI�VWRULQJ�GDWD�LQ�D�OLQNHG�OLVW�DV�RSSRVHG�WR�DQ�DUUD\�LV�WKDW�\RX�GR�QRWQHHG�WR�VSHFLI\�WKH�PD[LPXP�QXPEHU�RI�GDWD�HOHPHQWV�ZKHQ�\RX�GHFODUH�WKH�OLVW� <RXFDQ�HIÀFLHQWO\�DOORFDWH�D�QRGH�IURP�WKH�KHDS�ZKHQ�\RX�DGG�DQ�HOHPHQW�DQG�GHDOORFDWHIURP�WKH�KHDS�ZKHQ�\RX�UHPRYH�DQ�HOHPHQW�

2QH�GLVDGYDQWDJH�RI�WKH�OLVW�LQ�)LJXUH�����D��LV�WKH�LQHIÀFLHQF\�LQ�DFFHVVLQJ�LWV�ODVWHOHPHQW� VD\� LI�\RX�ZDQW� WR�DSSHQG�D�YDOXH�DW� WKH�HQG�RI� WKH� OLVW� 7R�DFFHVV� WKH� ODVWHOHPHQW� \RX�PXVW�WUDYHUVH�WKH�OLVW�IURP�EHJLQQLQJ�HQG�IROORZLQJ�WKH�OLQNV�IURP�QRGH�WRQRGH� 7KH�WLPH�WR�DFFHVV�WKH�ODVW�HOHPHQW�LVΘ(n) ZKHUH n LV�WKH�QXPEHU�RI�HOHPHQWV�LQWKH�OLVW�

&RS\ULJKW��� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG 5HYLVHG� $XJXVW��� ����

Figure 6.1

Page 6: Mutable Lists - Pepperdine University · Design Patterns for Data Structures Figure 6.1 &KDSWHU 0XWDEOH /LVWV 4 (a) A linked list. 9 2 7 4 (c) A circular linked list. 9 2 7 (d) A

Design Patterns for Data Structures

��� &KDSWHU�� 0XWDEOH�/LVWV

4

(a) A linked list.

79 2

4

(c) A circular linked list.

79 2

(d) A doubly linked list.

9 2 74

(e) A doubly linked circular list.

9 2 74

(f) A doubly linked circular list with a head node.

9 2 74

4

(b) A linked list with a second pointer to the last node.

79 2

)LJXUH ��� &ODVVLF�OLQNHG�OLVWV� 7KH�OLVWV�LQ�SDUWV��E��DQG��F��KDYH�DFFHVV�WR�WKH�ODVWQRGH�LQ�WLPHΘ(1)� 7KH�GRXEO\�OLQNHG�OLVWV�DOORZ�WUDYHUVDO�LQ�ERWK�GLUHFWLRQV�

7KH�DGYDQWDJH�RI�VWRULQJ�GDWD�LQ�D�OLQNHG�OLVW�DV�RSSRVHG�WR�DQ�DUUD\�LV�WKDW�\RX�GR�QRWQHHG�WR�VSHFLI\�WKH�PD[LPXP�QXPEHU�RI�GDWD�HOHPHQWV�ZKHQ�\RX�GHFODUH�WKH�OLVW� <RXFDQ�HIÀFLHQWO\�DOORFDWH�D�QRGH�IURP�WKH�KHDS�ZKHQ�\RX�DGG�DQ�HOHPHQW�DQG�GHDOORFDWHIURP�WKH�KHDS�ZKHQ�\RX�UHPRYH�DQ�HOHPHQW�

2QH�GLVDGYDQWDJH�RI�WKH�OLVW�LQ�)LJXUH�����D��LV�WKH�LQHIÀFLHQF\�LQ�DFFHVVLQJ�LWV�ODVWHOHPHQW� VD\� LI�\RX�ZDQW� WR�DSSHQG�D�YDOXH�DW� WKH�HQG�RI� WKH� OLVW� 7R�DFFHVV� WKH� ODVWHOHPHQW� \RX�PXVW�WUDYHUVH�WKH�OLVW�IURP�EHJLQQLQJ�HQG�IROORZLQJ�WKH�OLQNV�IURP�QRGH�WRQRGH� 7KH�WLPH�WR�DFFHVV�WKH�ODVW�HOHPHQW�LVΘ(n) ZKHUH n LV�WKH�QXPEHU�RI�HOHPHQWV�LQWKH�OLVW�

&RS\ULJKW��� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG 5HYLVHG� $XJXVW��� ����

��� 7KH�&ODVVLF�/LQNHG�,PSOHPHQWDWLRQ ���

(a) The empty list for a list without a head node.

(b) The empty list for a doubly linked circular list with a head node.

)LJXUH ��� (PSW\�OLQNHG�OLVWV�

3DUW��E��VKRZV�DQ�LPSOHPHQWDWLRQ�WKDW�RYHUFRPHV�WKH�LQHIÀFLHQF\�E\�SURYLGLQJ�DVHFRQG�SRLQWHU�WR�WKH�ODVW�QRGH� 7KH�QRGH�LV�GHÀQHG�DV�EHIRUH� EXW�WKH�OLVW�ZRXOG�QRZ�EHGHÀQHG�DV

WHPSODWH�FODVV 7! FODVV /LVW/ ^SULYDWH�

/1RGH�7! BKHDG�/1RGH�7! BWDLO�

%HFDXVH�QR�ORRS�LV�UHTXLUHG�WR�DFFHVV�WKH�ODVW�HOHPHQW�WKH�WLPH�WR�GR�VR�LV�UHGXFHG�IURPΘ(n) WRΘ(1)�

7KH�OLVW�LQ�SDUW��E��LV�QRW�DQ�HOHJDQW�VROXWLRQ�WR�WKH�SUREOHP�RI�HIÀFLHQWO\�DFFHVVLQJWKH�ODVW�QRGH�DV�LW�DGGV�FRPSOH[LW\�WR�WKH�GHÀQLWLRQ�RI�WKH�OLVW� $ EHWWHU�VROXWLRQ�LV�WRPDNH�WKH�OLVW�FLUFXODU�DV�LQ�SDUW��F�� ,QVWHDG�RI�PDLQWDLQLQJ�WKH BQH[W ÀHOG�RI�WKH�ODVWQRGH�WR�EH QXOOSWU� PDLQWDLQ�LW�WR�SRLQW�WR�WKH�ÀUVW�QRGH� ,QVWHDG�RI�KDYLQJ�WZR�SRLQWHUVLQ�WKH�GHÀQLWLRQ�RI�D�OLVW� KDYH�RQH�SRLQWHU�WKDW�SRLQWV�WR�WKH�ODVW�QRGH� 1R�PDWWHU�KRZPDQ\�HOHPHQWV�DUH�LQ�WKH�OLVW� WKH�WLPH�WR�DFFHVV�WKH�ÀUVW�QRGH�DQG�WKH�ODVW�QRGH�LVΘ(1)�,W�GRHV�QRW�UHTXLUH�D�ORRS�WR�JHW�IURP�WKH�ODVW�QRGH�WR�WKH�ÀUVW�QRGH�

)LJXUH�����G�� LV�DQRWKHU�FRPPRQ� LPSOHPHQWDWLRQ�RI�D� OLQNHG� OLVW�FDOOHG�D�GRXEO\OLQNHG�OLVW� ,Q�VXFK�D�OLVW� HDFK�QRGH�KDV�D�SRLQWHU�WR�WKH�SUHYLRXV�QRGH�DV�ZHOO�DV�WKH�QH[WQRGH�

WHPSODWH�FODVV 7! FODVV /1RGH ^SULYDWH�

/1RGH BSUHY�7 BGDWD�/1RGH BQH[W�

7KHUH�DUH�WZR�DGYDQWDJHV�RI�WKLV�LPSOHPHQWDWLRQ� <RX�FDQ�WUDYHUVH�WKH�OLVW�LQ�HLWKHU�GL�UHFWLRQ� ZKHUHDV�ZLWK�D�VLQJO\�OLQNHG�OLVW�\RX�FDQ�RQO\�WUDYHUVH�IURP�EHJLQQLQJ�WR�HQG�$OVR� ZKHQ�\RX�VHDUFK�D�OLVW�E\�UXQQLQJ�D�SRLQWHU�GRZQ�WKH�QRGHV� VRPH�DOJRULWKPV�UH�TXLUH�DFFHVV�WR�WKH�QRGH�MXVW�EHIRUH�WKH�QRGH�WR�ZKLFK�WKH�UXQQLQJ�SRLQWHU�SRLQWV� +DYLQJD�SRLQWHU�WKDW�SRLQWV�WR�WKH�SUHYLRXV�QRGH�FDQ�VLPSOLI\�WKH�FRGH�LQ�VXFK�DOJRULWKPV�

7KH�GRXEO\� OLQNHG� OLVW� LQ�SDUW� �G��KDV� WKH�GLVDGYDQWDJH�RI�UHTXLULQJ� WLPH Θ(n) WRDFFHVV�WKH�ODVW�QRGH� 7KDW�GHÀFLHQF\�LV�FRUUHFWHG�E\�WKH�GRXEO\�OLQNHG�FLUFXODU�OLVW�LQSDUW��H�� 7KH�OLVW�SRLQWHU�QHHG�QRW�SRLQW�WR�WKH�ODVW�QRGH� EHFDXVH�LW�FDQ�XVH�WKH BSUHYSRLQWHU�RI�WKH�ÀUVW�QRGH�WR�DFFHVV�WKH�ODVW�QRGH�LQ�WLPHΘ(1)�

)LJXUH�����I��VKRZV�D�FRPPRQ�LPSOHPHQWDWLRQ�RI�WKH�FODVVLF�OLQNHG�OLVW� &RPSDUHGWR�WKH�GRXEO\�OLQNHG�FLUFXODU�OLVW�RI�SDUW��H�� LW�KDV�DQ�DGGLWLRQDO�KHDG�QRGH�ZLWK�QR�GDWD�

5HYLVHG� $XJXVW��� ���� &RS\ULJKW��� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG

Figure 6.1

Page 7: Mutable Lists - Pepperdine University · Design Patterns for Data Structures Figure 6.1 &KDSWHU 0XWDEOH /LVWV 4 (a) A linked list. 9 2 7 4 (c) A circular linked list. 9 2 7 (d) A

Design Patterns for Data Structures

��� &KDSWHU�� 0XWDEOH�/LVWV

4

(a) A linked list.

79 2

4

(c) A circular linked list.

79 2

(d) A doubly linked list.

9 2 74

(e) A doubly linked circular list.

9 2 74

(f) A doubly linked circular list with a head node.

9 2 74

4

(b) A linked list with a second pointer to the last node.

79 2

)LJXUH ��� &ODVVLF�OLQNHG�OLVWV� 7KH�OLVWV�LQ�SDUWV��E��DQG��F��KDYH�DFFHVV�WR�WKH�ODVWQRGH�LQ�WLPHΘ(1)� 7KH�GRXEO\�OLQNHG�OLVWV�DOORZ�WUDYHUVDO�LQ�ERWK�GLUHFWLRQV�

7KH�DGYDQWDJH�RI�VWRULQJ�GDWD�LQ�D�OLQNHG�OLVW�DV�RSSRVHG�WR�DQ�DUUD\�LV�WKDW�\RX�GR�QRWQHHG�WR�VSHFLI\�WKH�PD[LPXP�QXPEHU�RI�GDWD�HOHPHQWV�ZKHQ�\RX�GHFODUH�WKH�OLVW� <RXFDQ�HIÀFLHQWO\�DOORFDWH�D�QRGH�IURP�WKH�KHDS�ZKHQ�\RX�DGG�DQ�HOHPHQW�DQG�GHDOORFDWHIURP�WKH�KHDS�ZKHQ�\RX�UHPRYH�DQ�HOHPHQW�

2QH�GLVDGYDQWDJH�RI�WKH�OLVW�LQ�)LJXUH�����D��LV�WKH�LQHIÀFLHQF\�LQ�DFFHVVLQJ�LWV�ODVWHOHPHQW� VD\� LI�\RX�ZDQW� WR�DSSHQG�D�YDOXH�DW� WKH�HQG�RI� WKH� OLVW� 7R�DFFHVV� WKH� ODVWHOHPHQW� \RX�PXVW�WUDYHUVH�WKH�OLVW�IURP�EHJLQQLQJ�HQG�IROORZLQJ�WKH�OLQNV�IURP�QRGH�WRQRGH� 7KH�WLPH�WR�DFFHVV�WKH�ODVW�HOHPHQW�LVΘ(n) ZKHUH n LV�WKH�QXPEHU�RI�HOHPHQWV�LQWKH�OLVW�

&RS\ULJKW��� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG 5HYLVHG� $XJXVW��� ����

Figure 6.1

Page 8: Mutable Lists - Pepperdine University · Design Patterns for Data Structures Figure 6.1 &KDSWHU 0XWDEOH /LVWV 4 (a) A linked list. 9 2 7 4 (c) A circular linked list. 9 2 7 (d) A

Design Patterns for Data Structures

��� 7KH�&ODVVLF�/LQNHG�,PSOHPHQWDWLRQ ���

(a) The empty list for a list without a head node.

(b) The empty list for a doubly linked circular list with a head node.

)LJXUH ��� (PSW\�OLQNHG�OLVWV�

3DUW��E��VKRZV�DQ�LPSOHPHQWDWLRQ�WKDW�RYHUFRPHV�WKH�LQHIÀFLHQF\�E\�SURYLGLQJ�DVHFRQG�SRLQWHU�WR�WKH�ODVW�QRGH� 7KH�QRGH�LV�GHÀQHG�DV�EHIRUH� EXW�WKH�OLVW�ZRXOG�QRZ�EHGHÀQHG�DV

WHPSODWH�FODVV 7! FODVV /LVW/ ^SULYDWH�

/1RGH�7! BKHDG�/1RGH�7! BWDLO�

%HFDXVH�QR�ORRS�LV�UHTXLUHG�WR�DFFHVV�WKH�ODVW�HOHPHQW�WKH�WLPH�WR�GR�VR�LV�UHGXFHG�IURPΘ(n) WRΘ(1)�

7KH�OLVW�LQ�SDUW��E��LV�QRW�DQ�HOHJDQW�VROXWLRQ�WR�WKH�SUREOHP�RI�HIÀFLHQWO\�DFFHVVLQJWKH�ODVW�QRGH�DV�LW�DGGV�FRPSOH[LW\�WR�WKH�GHÀQLWLRQ�RI�WKH�OLVW� $ EHWWHU�VROXWLRQ�LV�WRPDNH�WKH�OLVW�FLUFXODU�DV�LQ�SDUW��F�� ,QVWHDG�RI�PDLQWDLQLQJ�WKH BQH[W ÀHOG�RI�WKH�ODVWQRGH�WR�EH QXOOSWU� PDLQWDLQ�LW�WR�SRLQW�WR�WKH�ÀUVW�QRGH� ,QVWHDG�RI�KDYLQJ�WZR�SRLQWHUVLQ�WKH�GHÀQLWLRQ�RI�D�OLVW� KDYH�RQH�SRLQWHU�WKDW�SRLQWV�WR�WKH�ODVW�QRGH� 1R�PDWWHU�KRZPDQ\�HOHPHQWV�DUH�LQ�WKH�OLVW� WKH�WLPH�WR�DFFHVV�WKH�ÀUVW�QRGH�DQG�WKH�ODVW�QRGH�LVΘ(1)�,W�GRHV�QRW�UHTXLUH�D�ORRS�WR�JHW�IURP�WKH�ODVW�QRGH�WR�WKH�ÀUVW�QRGH�

)LJXUH�����G�� LV�DQRWKHU�FRPPRQ� LPSOHPHQWDWLRQ�RI�D� OLQNHG� OLVW�FDOOHG�D�GRXEO\OLQNHG�OLVW� ,Q�VXFK�D�OLVW� HDFK�QRGH�KDV�D�SRLQWHU�WR�WKH�SUHYLRXV�QRGH�DV�ZHOO�DV�WKH�QH[WQRGH�

WHPSODWH�FODVV 7! FODVV /1RGH ^SULYDWH�

/1RGH BSUHY�7 BGDWD�/1RGH BQH[W�

7KHUH�DUH�WZR�DGYDQWDJHV�RI�WKLV�LPSOHPHQWDWLRQ� <RX�FDQ�WUDYHUVH�WKH�OLVW�LQ�HLWKHU�GL�UHFWLRQ� ZKHUHDV�ZLWK�D�VLQJO\�OLQNHG�OLVW�\RX�FDQ�RQO\�WUDYHUVH�IURP�EHJLQQLQJ�WR�HQG�$OVR� ZKHQ�\RX�VHDUFK�D�OLVW�E\�UXQQLQJ�D�SRLQWHU�GRZQ�WKH�QRGHV� VRPH�DOJRULWKPV�UH�TXLUH�DFFHVV�WR�WKH�QRGH�MXVW�EHIRUH�WKH�QRGH�WR�ZKLFK�WKH�UXQQLQJ�SRLQWHU�SRLQWV� +DYLQJD�SRLQWHU�WKDW�SRLQWV�WR�WKH�SUHYLRXV�QRGH�FDQ�VLPSOLI\�WKH�FRGH�LQ�VXFK�DOJRULWKPV�

7KH�GRXEO\� OLQNHG� OLVW� LQ�SDUW� �G��KDV� WKH�GLVDGYDQWDJH�RI�UHTXLULQJ� WLPH Θ(n) WRDFFHVV�WKH�ODVW�QRGH� 7KDW�GHÀFLHQF\�LV�FRUUHFWHG�E\�WKH�GRXEO\�OLQNHG�FLUFXODU�OLVW�LQSDUW��H�� 7KH�OLVW�SRLQWHU�QHHG�QRW�SRLQW�WR�WKH�ODVW�QRGH� EHFDXVH�LW�FDQ�XVH�WKH BSUHYSRLQWHU�RI�WKH�ÀUVW�QRGH�WR�DFFHVV�WKH�ODVW�QRGH�LQ�WLPHΘ(1)�

)LJXUH�����I��VKRZV�D�FRPPRQ�LPSOHPHQWDWLRQ�RI�WKH�FODVVLF�OLQNHG�OLVW� &RPSDUHGWR�WKH�GRXEO\�OLQNHG�FLUFXODU�OLVW�RI�SDUW��H�� LW�KDV�DQ�DGGLWLRQDO�KHDG�QRGH�ZLWK�QR�GDWD�

5HYLVHG� $XJXVW��� ���� &RS\ULJKW��� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG

Figure 6.2

Page 9: Mutable Lists - Pepperdine University · Design Patterns for Data Structures Figure 6.1 &KDSWHU 0XWDEOH /LVWV 4 (a) A linked list. 9 2 7 4 (c) A circular linked list. 9 2 7 (d) A

Design Patterns for Data Structures Figure 6.3��� &KDSWHU�� Mutable Lists

ListL

– ListL(rhs: ListL<T> const &)+ ListL( )+ ~ListL( )+ append(data: T const &)+ clear( )+ concat(suffix: ListL<T> &)+ contains(data: T const &) const: bool– copyHead(rhs: ListL<T> const &): LNode<T> *+ equals(rhs: ListL<T> const &) const: bool+ first( ) const: T const &+ isEmpty( ) const: bool + length( ) const: int+ max( ) const: T const &+ operator=(rhs: ListL<T> const &): ListL<T> &+ prepend(data: T const &)+ remFirst( ): T+ remLast( ): T+ remove(data: T const &)+ reverse( )+ setFirst(data: T const &)+ toStream(os: ostream &) const+ unZip( ): ListL<T> *+ zip(other: ListL<T> &)

T

– _head: LNode<T> * LNode– _data: T– _next: LNode *– LNode(data: T)

T

)LJXUH ��� The UML class diagram for the linked list in the dp4ds distribution.

Figure 7.2(b) shows that even the empty list has a head node. Part (a) shows the emptylist for an implementation without head nodes. The algorithms for lists without headnodes must frequently check if the list is empty and perform one kind of processing ifit is empty and another kind of processing if it is not. Maintaining a head node evenfor empty lists simplifies the code because often no special cases are required for emptylists.

7KH�GS�GV�OLQNHG�OLVWThe dp4ds distribution software implements the classic linked list of Figure 7.1(a). Asyou work through the algorithms, you should keep in mind how they would be modifiedif the implementations were for one of the other variations in the figure.

Figure 7.3 shows the UML class diagram for the data structure. There are twoclasses, ListL for the list itself and LNode for the node. The symbol is the UMLnotation for class composition. In the code,

template<class T> class ListL {private:

LNode<T> *_head;

an object of class ListL has an attribute that is a pointer to another object of classLNode. In other words, ListL is composed of _head. Corresponding to this com-

Copyright ©: 1998, Dung X. Nguyen and J. Stanley Warford Revised: June 14, 2016

Page 10: Mutable Lists - Pepperdine University · Design Patterns for Data Structures Figure 6.1 &KDSWHU 0XWDEOH /LVWV 4 (a) A linked list. 9 2 7 4 (c) A circular linked list. 9 2 7 (d) A

Design Patterns for Data Structures��� &KDSWHU�� Mutable Lists

ListL

– ListL(rhs: ListL<T> const &)+ ListL( )+ ~ListL( )+ append(data: T const &)+ clear( )+ concat(suffix: ListL<T> &)+ contains(data: T const &) const: bool– copyHead(rhs: ListL<T> const &): LNode<T> *+ equals(rhs: ListL<T> const &) const: bool+ first( ) const: T const &+ isEmpty( ) const: bool + length( ) const: int+ max( ) const: T const &+ operator=(rhs: ListL<T> const &): ListL<T> &+ prepend(data: T const &)+ remFirst( ): T+ remLast( ): T+ remove(data: T const &)+ reverse( )+ setFirst(data: T const &)+ toStream(os: ostream &) const+ unZip( ): ListL<T> *+ zip(other: ListL<T> &)

T

– _head: LNode<T> * LNode– _data: T– _next: LNode *– LNode(data: T)

T

)LJXUH ��� The UML class diagram for the linked list in the dp4ds distribution.

Figure 7.2(b) shows that even the empty list has a head node. Part (a) shows the emptylist for an implementation without head nodes. The algorithms for lists without headnodes must frequently check if the list is empty and perform one kind of processing ifit is empty and another kind of processing if it is not. Maintaining a head node evenfor empty lists simplifies the code because often no special cases are required for emptylists.

7KH�GS�GV�OLQNHG�OLVWThe dp4ds distribution software implements the classic linked list of Figure 7.1(a). Asyou work through the algorithms, you should keep in mind how they would be modifiedif the implementations were for one of the other variations in the figure.

Figure 7.3 shows the UML class diagram for the data structure. There are twoclasses, ListL for the list itself and LNode for the node. The symbol is the UMLnotation for class composition. In the code,

template<class T> class ListL {private:

LNode<T> *_head;

an object of class ListL has an attribute that is a pointer to another object of classLNode. In other words, ListL is composed of _head. Corresponding to this com-

Copyright ©: 1998, Dung X. Nguyen and J. Stanley Warford Revised: June 14, 2016

Figure 6.3

Page 11: Mutable Lists - Pepperdine University · Design Patterns for Data Structures Figure 6.1 &KDSWHU 0XWDEOH /LVWV 4 (a) A linked list. 9 2 7 4 (c) A circular linked list. 9 2 7 (d) A

Design Patterns for Data Structures ListL

��� 7KH�&ODVVLF�/LQNHG�,PSOHPHQWDWLRQ ���

(b) An abbreviated rendering.(a) A detailed rendering of a list and a node.

myList._head

*myList._head

myList._head->_nextmyList._head->_data

myList

)LJXUH ��� 5HQGHULQJ�RI�WKH /LVW/ OLVW�DQG�WKH 1RGH/ QRGH�

/1RGH� ,Q�RWKHU�ZRUGV� /LVW/ LV�FRPSRVHG�RI BKHDG� &RUUHVSRQGLQJ�WR�WKLV�FRP�SRVLWLRQ� WKH�DUURZ�LQ�WKH�80/ GLDJUDP�SRLQWV�IURP�WKH�DWWULEXWH BKHDG LQ�WKH /LVW/FODVV�WR�WKH�FODVV�RI BKHDG� ZKLFK�LV /1RGH� &ODVV�FRPSRVLWLRQ�LV�NQRZQ�DV�D KDV�DUHODWLRQVKLS�EHFDXVH� LQ�WKLV�H[DPSOH� /LVW/ KDV�D SRLQWHU�WR�DQ /1RGH�

6LPLODUO\� WKH�FRGH�IRU�DQ /1RGH

WHPSODWH�FODVV 7! FODVV /1RGH ^SULYDWH�

7 BGDWD�/1RGH BQH[W�

VKRZV�WKDW�LW�LV�FRPSRVHG�RI�WKH�DWWULEXWH BQH[W� ZKLFK�LV�D�SRLQWHU�WR�DQ�REMHFW�RI�WKHVDPH�FODVV� +HQFH� WKH�FRPSRVLWLRQ�DUURZ�RQ�WKH�ULJKW�LQ�)LJXUH���� SRLQWV�IURP�WKH/1RGH FODVV�WR�LWVHOI�

7KH�WZR�PRVW�LPSRUWDQW�UHODWLRQVKLSV�LQ�22 GHVLJQ�DUH�LQKHULWDQFH�DQG�FODVV�FRP�SRVLWLRQ� +HUH�LV�D�FRPSDULVRQ�! ,QKHULWDQFH

6\PERO�5HODWLRQVKLS� LV�D([DPSOH� ,Q�)LJXUH������ D 5HFWDQJOH LV�D $6KDSH�

! &ODVV�FRPSRVLWLRQ6\PERO�5HODWLRQVKLS� KDV�D([DPSOH� ,Q�)LJXUH����� D /LVW/ KDV�D /1RGH�)LJXUH���� VKRZV�D�UHQGHULQJ�RI�D�OLVW�DQG�D�QRGH� 7KH�ÀJXUH�DVVXPHV P\/LVW KDV

EHHQ�GHFODUHG�D /LVW/ DV

/LVW/ P\/LVW�

<RX�DFFHVV�HDFK�HOHPHQW�LQ�WKH�ÀJXUH�DV�IROORZV�! P\/LVW LV�WKH�OLVW�! P\/LVW�BKHDG LV�WKH�DWWULEXWH�RI�WKH�OLVW� ZKLFK�LV�D�SRLQWHU�WR�D�QRGH�

5HYLVHG� $XJXVW��� ���� &RS\ULJKW F⃝� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG

Page 12: Mutable Lists - Pepperdine University · Design Patterns for Data Structures Figure 6.1 &KDSWHU 0XWDEOH /LVWV 4 (a) A linked list. 9 2 7 4 (c) A circular linked list. 9 2 7 (d) A

Design Patterns for Data Structures

Demo ListL

ListL

Page 13: Mutable Lists - Pepperdine University · Design Patterns for Data Structures Figure 6.1 &KDSWHU 0XWDEOH /LVWV 4 (a) A linked list. 9 2 7 4 (c) A circular linked list. 9 2 7 (d) A

Design Patterns for Data Structures Figure 6.4

��� 7KH�&ODVVLF�/LQNHG�,PSOHPHQWDWLRQ ���

(b) An abbreviated rendering.(a) A detailed rendering of a list and a node.

myList._head

*myList._head

myList._head->_nextmyList._head->_data

myList

)LJXUH ��� 5HQGHULQJ�RI�WKH /LVW/ OLVW�DQG�WKH 1RGH/ QRGH�

/1RGH� ,Q�RWKHU�ZRUGV� /LVW/ LV�FRPSRVHG�RI BKHDG� &RUUHVSRQGLQJ�WR�WKLV�FRP�SRVLWLRQ� WKH�DUURZ�LQ�WKH�80/ GLDJUDP�SRLQWV�IURP�WKH�DWWULEXWH BKHDG LQ�WKH /LVW/FODVV�WR�WKH�FODVV�RI BKHDG� ZKLFK�LV /1RGH� &ODVV�FRPSRVLWLRQ�LV�NQRZQ�DV�D KDV�DUHODWLRQVKLS�EHFDXVH� LQ�WKLV�H[DPSOH� /LVW/ KDV�D SRLQWHU�WR�DQ /1RGH�

6LPLODUO\� WKH�FRGH�IRU�DQ /1RGH

WHPSODWH�FODVV 7! FODVV /1RGH ^SULYDWH�

7 BGDWD�/1RGH BQH[W�

VKRZV�WKDW�LW�LV�FRPSRVHG�RI�WKH�DWWULEXWH BQH[W� ZKLFK�LV�D�SRLQWHU�WR�DQ�REMHFW�RI�WKHVDPH�FODVV� +HQFH� WKH�FRPSRVLWLRQ�DUURZ�RQ�WKH�ULJKW�LQ�)LJXUH���� SRLQWV�IURP�WKH/1RGH FODVV�WR�LWVHOI�

7KH�WZR�PRVW�LPSRUWDQW�UHODWLRQVKLSV�LQ�22 GHVLJQ�DUH�LQKHULWDQFH�DQG�FODVV�FRP�SRVLWLRQ� +HUH�LV�D�FRPSDULVRQ�! ,QKHULWDQFH

6\PERO�5HODWLRQVKLS� LV�D([DPSOH� ,Q�)LJXUH������ D 5HFWDQJOH LV�D $6KDSH�

! &ODVV�FRPSRVLWLRQ6\PERO�5HODWLRQVKLS� KDV�D([DPSOH� ,Q�)LJXUH����� D /LVW/ KDV�D /1RGH�)LJXUH���� VKRZV�D�UHQGHULQJ�RI�D�OLVW�DQG�D�QRGH� 7KH�ÀJXUH�DVVXPHV P\/LVW KDV

EHHQ�GHFODUHG�D /LVW/ DV

/LVW/ P\/LVW�

<RX�DFFHVV�HDFK�HOHPHQW�LQ�WKH�ÀJXUH�DV�IROORZV�! P\/LVW LV�WKH�OLVW�! P\/LVW�BKHDG LV�WKH�DWWULEXWH�RI�WKH�OLVW� ZKLFK�LV�D�SRLQWHU�WR�D�QRGH�

5HYLVHG� $XJXVW��� ���� &RS\ULJKW F⃝� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG

Page 14: Mutable Lists - Pepperdine University · Design Patterns for Data Structures Figure 6.1 &KDSWHU 0XWDEOH /LVWV 4 (a) A linked list. 9 2 7 4 (c) A circular linked list. 9 2 7 (d) A

Design Patterns for Data Structures

Methods for output and characterization

ListL

Page 15: Mutable Lists - Pepperdine University · Design Patterns for Data Structures Figure 6.1 &KDSWHU 0XWDEOH /LVWV 4 (a) A linked list. 9 2 7 4 (c) A circular linked list. 9 2 7 (d) A

Design Patterns for Data Structures Figure 6.5

6.1 The Classic Linked Implementation 177

void toStream(ostream &os) const;// Post: A string representation of this list is returned.

bool isEmpty() const;// Post: true is returned if this list is empty;// Otherwise, false is returned.

T const &first() const;// Pre: This list is not empty.// Post: The first element of this list is returned.

int length() const;// Post: The length of this list is returned.

T const &max() const;// Pre: This list is not empty.// Post: The maximum element of this list is returned.

bool contains(T const &data) const;// Post: true is returned if data is contained in this list;// Otherwise, false is returned.

bool equals(ListL<T> const &rhs) const;// Post: true is returned if this list equals list rhs;// Otherwise, false is returned.// Two lists are equal if they contain the same number// of equal elements in the same order.

Figure 6.5 Specifications for the output and characterization methods of the ListLdata structure.

Usually a for statement has an integer as the control variable. This method showsthat a for statement can have a pointer p as the control variable. While an integervariable is usually incremented with the ++ operator each time through the loop, thecontrol variable p is advanced to the next node of the list with

p = p->_next

each time through the loop.Notice in the above output that each integer is followed by a comma except for the

last integer 7. The statement

if (p->_next != nullptr)

detects whether the current node is the last node, in which case the comma is not printed.Figure 6.6 also shows the implementation of the characterization methodisEmpty().

It is a single test for whether _head is nullptr as shown in Figure 6.2(a). Implemen-

Revised: October 2, 2016 Copyright ©: 1998, Dung X. Nguyen and J. Stanley Warford

Page 16: Mutable Lists - Pepperdine University · Design Patterns for Data Structures Figure 6.1 &KDSWHU 0XWDEOH /LVWV 4 (a) A linked list. 9 2 7 4 (c) A circular linked list. 9 2 7 (d) A

Design Patterns for Data Structures Figure 6.5

6.1 The Classic Linked Implementation 177

void toStream(ostream &os) const;// Post: A string representation of this list is returned.

bool isEmpty() const;// Post: true is returned if this list is empty;// Otherwise, false is returned.

T const &first() const;// Pre: This list is not empty.// Post: The first element of this list is returned.

int length() const;// Post: The length of this list is returned.

T const &max() const;// Pre: This list is not empty.// Post: The maximum element of this list is returned.

bool contains(T const &data) const;// Post: true is returned if data is contained in this list;// Otherwise, false is returned.

bool equals(ListL<T> const &rhs) const;// Post: true is returned if this list equals list rhs;// Otherwise, false is returned.// Two lists are equal if they contain the same number// of equal elements in the same order.

Figure 6.5 Specifications for the output and characterization methods of the ListLdata structure.

Usually a for statement has an integer as the control variable. This method showsthat a for statement can have a pointer p as the control variable. While an integervariable is usually incremented with the ++ operator each time through the loop, thecontrol variable p is advanced to the next node of the list with

p = p->_next

each time through the loop.Notice in the above output that each integer is followed by a comma except for the

last integer 7. The statement

if (p->_next != nullptr)

detects whether the current node is the last node, in which case the comma is not printed.Figure 6.6 also shows the implementation of the characterization methodisEmpty().

It is a single test for whether _head is nullptr as shown in Figure 6.2(a). Implemen-

Revised: October 2, 2016 Copyright ©: 1998, Dung X. Nguyen and J. Stanley Warford

Page 17: Mutable Lists - Pepperdine University · Design Patterns for Data Structures Figure 6.1 &KDSWHU 0XWDEOH /LVWV 4 (a) A linked list. 9 2 7 4 (c) A circular linked list. 9 2 7 (d) A

Design Patterns for Data Structures Figure 6.6��� &KDSWHU�� 0XWDEOH�/LVWV

�� RSHUDWRU�� WHPSODWH�FODVV 7!RVWUHDP RSHUDWRU���RVWUHDP RV� /LVW/�7! FRQVW UKV� ^

UKV�WR6WUHDP�RV��UHWXUQ RV�

`

�� WR6WUHDP WHPSODWH�FODVV 7!YRLG /LVW/�7!��WR6WUHDP�RVWUHDP RV� FRQVW ^

RV �� ¯�¯�IRU �/1RGH�7! S BKHDG� S� QXOOSWU� S S�!BQH[W� ^

LI �S�!BQH[W � QXOOSWU� ^RV �� S�!BGDWD �� ¯� ¯�

`HOVH ^

RV �� S�!BGDWD�`

`RV �� ¯�¯�

`

�� LV(PSW\ WHPSODWH�FODVV 7!ERRO /LVW/�7!��LV(PSW\�� FRQVW ^

UHWXUQ BKHDG QXOOSWU�`

)LJXUH ��� 7KH�RXWSXW�PHWKRGV�DQG�HPSW\�WHVW�IRU�WKH /LVW/ GDWD�VWUXFWXUH�

WDWLRQ�RI ILUVW��� OHQJWK��� PD[��� FRQWDLQV��� DQG HTXDOV DUH�H[HUFLVHV�DWWKH�HQG�RI�WKH�FKDSWHU�

7KH HTXDOV�� PHWKRG�LV�FRPSOLFDWHG�E\�WKH�IDFW�WKDW�HLWKHU�RU�ERWK�OLVWV�FDQ�EHHPSW\�DQG�PD\�RU�PD\�QRW�EH�WKH�VDPH�OHQJWK� :LWK�DOO�WKH�SRVVLELOLWLHV� LW�LV�HDV\�WRZULWH�DOJRULWKPV�WKDW�FUDVK�ZLWK QXOOSWU UHIHUHQFHV� ,W�LV�SRVVLEOH�WR�ZULWH�D�FRUUHFWDOJRULWKP�ZLWK�RQO\�RQH ZKLOH ORRS�KDYLQJ�D�FRQMXQFWLRQ�RI�WKUHH�VKRUW�FLUFXLW�WHVWVIRU�ORRS�WHUPLQDWLRQ�³�WKDW�WKH�FRPSXWDWLRQ�LV�QRW�DW�WKH�HQG�RI�WKH�ÀUVW�OLVW� WKDW�WKHFRPSXWDWLRQ�LV�QRW�DW�WKH�HQG�RI�WKH�VHFRQG�OLVW� DQG�WKDW�WKH�UHVSHFWLYH BGDWD YDOXHVDUH�QRW�HTXDO� $IWHU�ORRS�WHUPLQDWLRQ� \RX�NQRZ�WKH�OLVWV�DUH�HTXDO�LI�\RX�UHDFKHG�WKHHQG�RI�ERWK�OLVWV�WRJHWKHU�

&RQVWUXFWLRQ�DQG�LQVHUWLRQ7KHVH�PHWKRGV�PRGLI\�WKH�OLVW�GDWD�VWUXFWXUH�E\�FRQVWUXFWLQJ�QHZ�OLVWV�IURP�H[LVWLQJOLVWV�RU�E\�DGGLQJ�DQ�HOHPHQW�WR�DQ�H[LVWLQJ�OLVW�DQG�WKHUHE\�LQFUHDVLQJ�LWV�OHQJWK�E\RQH� +RZ�\RX�ZULWH�&���FRGH�IRU�WKH�FRQVWUXFWLRQ�SURFHVV�GHSHQGV�FUXFLDOO\�RQ�WKH

&RS\ULJKW F⃝� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG 5HYLVHG� $XJXVW��� ����

Page 18: Mutable Lists - Pepperdine University · Design Patterns for Data Structures Figure 6.1 &KDSWHU 0XWDEOH /LVWV 4 (a) A linked list. 9 2 7 4 (c) A circular linked list. 9 2 7 (d) A

Design Patterns for Data Structures Figure 6.6

��� &KDSWHU�� 0XWDEOH�/LVWV

�� RSHUDWRU�� WHPSODWH�FODVV 7!RVWUHDP RSHUDWRU���RVWUHDP RV� /LVW/�7! FRQVW UKV� ^

UKV�WR6WUHDP�RV��UHWXUQ RV�

`

�� WR6WUHDP WHPSODWH�FODVV 7!YRLG /LVW/�7!��WR6WUHDP�RVWUHDP RV� FRQVW ^

RV �� ¯�¯�IRU �/1RGH�7! S BKHDG� S� QXOOSWU� S S�!BQH[W� ^

LI �S�!BQH[W � QXOOSWU� ^RV �� S�!BGDWD �� ¯� ¯�

`HOVH ^

RV �� S�!BGDWD�`

`RV �� ¯�¯�

`

�� LV(PSW\ WHPSODWH�FODVV 7!ERRO /LVW/�7!��LV(PSW\�� FRQVW ^

UHWXUQ BKHDG QXOOSWU�`

)LJXUH ��� 7KH�RXWSXW�PHWKRGV�DQG�HPSW\�WHVW�IRU�WKH /LVW/ GDWD�VWUXFWXUH�

WDWLRQ�RI ILUVW��� OHQJWK��� PD[��� FRQWDLQV��� DQG HTXDOV DUH�H[HUFLVHV�DWWKH�HQG�RI�WKH�FKDSWHU�

7KH HTXDOV�� PHWKRG�LV�FRPSOLFDWHG�E\�WKH�IDFW�WKDW�HLWKHU�RU�ERWK�OLVWV�FDQ�EHHPSW\�DQG�PD\�RU�PD\�QRW�EH�WKH�VDPH�OHQJWK� :LWK�DOO�WKH�SRVVLELOLWLHV� LW�LV�HDV\�WRZULWH�DOJRULWKPV�WKDW�FUDVK�ZLWK QXOOSWU UHIHUHQFHV� ,W�LV�SRVVLEOH�WR�ZULWH�D�FRUUHFWDOJRULWKP�ZLWK�RQO\�RQH ZKLOH ORRS�KDYLQJ�D�FRQMXQFWLRQ�RI�WKUHH�VKRUW�FLUFXLW�WHVWVIRU�ORRS�WHUPLQDWLRQ�³�WKDW�WKH�FRPSXWDWLRQ�LV�QRW�DW�WKH�HQG�RI�WKH�ÀUVW�OLVW� WKDW�WKHFRPSXWDWLRQ�LV�QRW�DW�WKH�HQG�RI�WKH�VHFRQG�OLVW� DQG�WKDW�WKH�UHVSHFWLYH BGDWD YDOXHVDUH�QRW�HTXDO� $IWHU�ORRS�WHUPLQDWLRQ� \RX�NQRZ�WKH�OLVWV�DUH�HTXDO�LI�\RX�UHDFKHG�WKHHQG�RI�ERWK�OLVWV�WRJHWKHU�

&RQVWUXFWLRQ�DQG�LQVHUWLRQ7KHVH�PHWKRGV�PRGLI\�WKH�OLVW�GDWD�VWUXFWXUH�E\�FRQVWUXFWLQJ�QHZ�OLVWV�IURP�H[LVWLQJOLVWV�RU�E\�DGGLQJ�DQ�HOHPHQW�WR�DQ�H[LVWLQJ�OLVW�DQG�WKHUHE\�LQFUHDVLQJ�LWV�OHQJWK�E\RQH� +RZ�\RX�ZULWH�&���FRGH�IRU�WKH�FRQVWUXFWLRQ�SURFHVV�GHSHQGV�FUXFLDOO\�RQ�WKH

&RS\ULJKW F⃝� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG 5HYLVHG� $XJXVW��� ����

Page 19: Mutable Lists - Pepperdine University · Design Patterns for Data Structures Figure 6.1 &KDSWHU 0XWDEOH /LVWV 4 (a) A linked list. 9 2 7 4 (c) A circular linked list. 9 2 7 (d) A

Design Patterns for Data Structures

Methods for construction and

insertion

ListL

Page 20: Mutable Lists - Pepperdine University · Design Patterns for Data Structures Figure 6.1 &KDSWHU 0XWDEOH /LVWV 4 (a) A linked list. 9 2 7 4 (c) A circular linked list. 9 2 7 (d) A

Design Patterns for Data Structures Figure 6.7

��� 7KH�&ODVVLF�/LQNHG�,PSOHPHQWDWLRQ ���

(a) Original lists.

yourList

4 79 2

myList

(b) A shallow copy of myList = yourList.

yourList

4 79 2

myList

(c) A deep copy of myList = yourList.

yourList

4 79 2

myList 4 79 2

)LJXUH ��� 7KH�GLIIHUHQFH�EHWZHHQ�D�VKDOORZ�FRS\�DQG�D�GHHS�FRS\�

GLIIHUHQFH�EHWZHHQ�D�VKDOORZ�FRS\�DQG�D�GHHS�FRS\� )LJXUH���� VKRZV�WKH�GLIIHUHQFHEHWZHHQ�WKHVH�WZR�FRS\�SURFHVVHV� 3DUW��D��RI�WKH�ÀJXUH�VKRZV�WKH�LQLWLDO�YDOXHV�RI�WZROLVWV� \RXU/LVW LQLWLDOO\�FRQWDLQV�IRXU�HOHPHQWV� DQG�DQG P\/LVW LV�LQLWLDOO\�HPSW\�

6XSSRVH�\RX�H[HFXWH�WKH�DVVLJQPHQW�VWDWHPHQW

P\/LVW \RXU/LVW

ZLWK�WKH�LQLWLDO�LQVWDQWLDWLRQV�LQ�SDUW��D�� 7KH�DVVLJQPHQW�VWDWHPHQW�JLYHV�D�FRS\�RI\RXU/LVW WR P\/LVW� 7KH�SUHIHUUHG�YHUEDOL]DWLRQ�RI�WKH�DVVLJQPHQW�VWDWHPHQW�LV�´P\/LVW JHWV \RXU/LVW�µ +RZHYHU� WKH�UHVXOW�RI�WKH�DVVLJQPHQW�GHSHQGV�RQ�ZKHWKHUWKH�FRS\�LV�D�VKDOORZ�FRS\�RI \RXU/LVW RU�D�GHHS�FRS\�RI \RXU/LVW�

)LJXUH�����E��VKRZV�WKH�ÀQDO�VWDWH�LI�WKH�FRS\�LV�VKDOORZ� %HFDXVH�D /LVW/ KDVD�VLQJOH�DWWULEXWH� ZKLFK�LV�D�SRLQWHU�WR�DQ /1RGH� WKH�VKDOORZ�FRS\�PDNHV�D�FRS\�RIWKH�SRLQWHU�LQ \RXU/LVW DQG�JLYHV�WKH�SRLQWHU�WR P\/LVW� $IWHU�WKH�DVVLJQPHQW� WKHSRLQWHU�LQ P\/LVW SRLQWV�WR�WKH�VDPH�QRGH�WR�ZKLFK�WKH�SRLQWHU�LQ \RXU/LVW SRLQWV�%RWK�OLVWV�DUH�VKDULQJ�WKH�VDPH�OLQNHG�OLVW�RI�QRGHV�

)LJXUH�����F��VKRZV�WKH�ÀQDO�VWDWH�LI�WKH�FRS\�LV�GHHS� ,QVWHDG�RI�VLPSO\�SDVVLQJ�DFRS\�RI�WKH�SRLQWHU�IURP \RXU/LVW� WKH�DVVLJQPHQW�VWDWHPHQW�GXSOLFDWHV�HYHU\�QRGH�LQ\RXU/LVW� OLQNV�WKHP�XS�LQ�WKH�VDPH�RUGHU�ZLWK QXOOSWU LQ�WKH BQH[W ÀHOG�RI�WKHODVW�QRGH� DQG�JLYHV�D�SRLQWHU�WR�WKH�ÀUVW�QRGH�RI�WKH�GXSOLFDWHG�OLVW�WR P\/LVW� ,Q�ERWKFDVHV� P\/LVW�BKHDG JHWV�D�SRLQWHU� :LWK�D�VKDOORZ�FRS\� P\/LVW�BKHDG SRLQWV�WRWKH�ÀUVW�QRGH�RI \RXU/LVW� :LWK�D�GHHS�FRS\� P\/LVW�BKHDG SRLQWV�WR�WKH�ÀUVW�QRGHRI�D�FRS\�RI�DOO�WKH�QRGHV�RI \RXU/LVW�

2QH�TXHVWLRQ�DW�WKLV�SRLQW�LV� :KDW�DUH�WKH�DGYDQWDJHV�RI�HDFK�FRS\�SURFHVV" 7KHDGYDQWDJH�RI�D�VKDOORZ�FRS\�LV�LWV�HIÀFLHQF\� DV�WKH�DVVLJQPHQW�VWDWHPHQW�H[HFXWHV�LQWLPH Θ(1)� $ GHHS�FRS\�UHTXLUHV�D�ORRS�WR�DGYDQFH�WKURXJK�WKH�QRGHV�RI \RXU/LVWRQH�QRGH�DW�D�WLPH�WR�FRQVWUXFW�WKH�GXSOLFDWHG�QRGHV� :LWK�D�GHHS�FRS\� WKH�DVVLJQPHQWVWDWHPHQW�H[HFXWHV�LQ�WLPHΘ(n) ZKHUH n LV�WKH�QXPEHU�RI�HOHPHQWV�LQ \RXU/LVW�

7KH�DGYDQWDJH�RI�D�GHHS�FRS\�LV�WKH�VDIHW\�WKDW�FRPHV�ZLWK�QRW�VKDULQJ�OLVWV� :RUN�LQJ�LQ�D�V\VWHP�ZLWK�VKDUHG�OLVWV�LV�QRWRULRXVO\�GLIÀFXOW�DQG�HUURU�SURQH� $IWHU�WKH�DV�VLJQPHQW� VXSSRVH�\RX�DSSHQG�D�QHZ�QRGH�DW�WKH�HQG�RI \RXU/LVW� ,Q�HIIHFW� \RX�DUH

5HYLVHG� $XJXVW��� ���� &RS\ULJKW F⃝� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG

Page 21: Mutable Lists - Pepperdine University · Design Patterns for Data Structures Figure 6.1 &KDSWHU 0XWDEOH /LVWV 4 (a) A linked list. 9 2 7 4 (c) A circular linked list. 9 2 7 (d) A

Design Patterns for Data Structures Figure 6.8��� &KDSWHU�� 0XWDEOH�/LVWV

/LVW/�/LVW/�7! FRQVW UKV���� &RS\ FRQVWUXFWRU GLVDEOHG�

/LVW/����� 3RVW� 7KLV OLVW LV LQLWLDOL]HG WR EH HPSW\�

YRLG SUHSHQG�7 FRQVW GDWD���� 3RVW� GDWD LV SUHSHQGHG WR WKLV OLVW�

YRLG DSSHQG�7 FRQVW GDWD���� 3RVW� GDWD LV DSSHQGHG WR WKLV OLVW�

/LVW/�7! RSHUDWRU �/LVW/�7! FRQVW UKV���� 3RVW� 7KLV OLVW LV D GHHS FRS\ RI UKV�

/1RGH�7! FRS\+HDG�/LVW/�7! FRQVW UKV���� 3RVW� $ GHHS FRS\ RI WKH KHDG RI UKV LV UHWXUQHG�

)LJXUH ��� 6SHFLÀFDWLRQV�IRU�WKH�FRQVWUXFWLRQ�DQG�LQVHUWLRQ�PHWKRGV�RI�WKH /LVW/GDWD�VWUXFWXUH�

DSSHQGLQJ�LW�WR P\/LVW DV�ZHOO�EHFDXVH BKHDG RI�ERWK�OLVWV�SRLQW�WR�WKH�VDPH�ÀUVW�QRGH�+RZHYHU� VXSSRVH�\RX�SUHSHQG�D�QHZ�QRGH�DW�WKH�EHJLQQLQJ�RI \RXU/LVW� 7R�GR�VR\RX�PXVW�DOORFDWH�WKH�QHZ�QRGH�IURP�WKH�KHDS�DQG�PDNH \RXU/LVW�BKHDG SRLQW�WR�LW�%XW�WKHQ� P\/LVW�BKHDG ZRXOG�QR�ORQJHU�SRLQW�WR�WKH�ÀUVW�QRGH�RI�WKH�VKDUHG�OLVW�

7KLV�LVVXH�LV�DW�WKH�KHDUW�RI�WKH�GLIIHUHQFH�EHWZHHQ�LPPXWDEOH�OLVWV�DQG�PXWDEOH�OLVWV�5HFDOO�WKDW�RQFH�\RX�LQVWDQWLDWH�DQ�LPPXWDEOH�OLVW�\RX�FDQQRW�FKDQJH�LW� 7KHUHIRUH� WKHVKDUHG�OLVW�VFHQDULR�GHVFULEHG�DERYH�ZLWK�DOO�LWV�FRPSOLFDWLRQV�FDQQRW�KDSSHQ� 7KH�VDIHW\WKDW�FRPHV�ZLWK�DOZD\V�XVLQJ�GHHS�FRSLHV�LV�JXDUDQWHHG�ZLWK�LPPXWDEOH�OLVWV�

$QRWKHU�TXHVWLRQ�LV� :KDW�DFWXDOO\�KDSSHQV�ZLWK�PXWDEOH�OLVWV�ZKHQ�\RX�GR�DQ�DV�VLJQPHQW� D�VKDOORZ�FRS\�RU�D�GHHS�FRS\" 7KH�DQVZHU�LV� ,W�GHSHQGV� 7KH�DERYH�GLV�FXVVLRQ�LV�DERXW�WKH�FODVV /LVW/��ZKLFK�LV�SURYLGHG�LQ�WKH�GS�GV�GLVWULEXWLRQ� 7KHGLVWULEXWLRQ�LV�D�OLEUDU\�RI�FODVVHV�WKDW�ZRUN�WRJHWKHU�WR�WHDFK�GDWD�VWUXFWXUHV�DQG�22GHVLJQ�SDWWHUQV� ,Q�WKLV�OLEUDU\� WKH�DVVLJQPHQW�VWDWHPHQW�LV�VSHFLÀHG�WR�EH�D�GHHS�FRS\�

$OO�22 GHYHORSPHQW�HQYLURQPHQWV�SURYLGH�D�OLEUDU\�RI�GDWD�VWUXFWXUHV�DQG�WKRVHZLWK�JRRG�GRFXPHQWDWLRQ�GHVFULEH�LQ�GHWDLO�ZKHWKHU�VKDOORZ�RU�GHHS�FRS\�LV�XVHG�LQ�WKHVFHQDULRV�WKDW�GHYHORSHUV�HQFRXQWHU�GXULQJ�WKH�GHYHORSPHQW�SURFHVV� 6RPHWLPHV�\RXFDQ�FKRRVH�RQH�GDWD�VWUXFWXUH�RYHU�DQRWKHU�EDVHG�RQ�WKLV�GLIIHUHQFH� <RX�VKRXOG�EH�DZDUHRI�WKHVH�LVVXHV�DQG�SODQ�DFFRUGLQJO\�ZKHQ�\RX�XVH�DQ\�22 GHYHORSPHQW�HQYLURQPHQW�

)LJXUH���� VKRZV�WKH�VSHFLÀFDWLRQ�IRU�WKH�FRQVWUXFWLRQ�DQG�LQVHUWLRQ�PHWKRGV�RI�WKH/LVW/ GDWD�VWUXFWXUH� 7KH�ÀUVW�FRQVWUXFWRU�KDV�VLJQDWXUH

/LVW/�FRQVW /LVW/�7! UKV�

DQG�LV�NQRZQ�DV�D�FRS\�FRQVWUXFWRU� ,Q�&��� D�FRS\�FRQVWUXFWRU�KDV�WKH�VDPH�QDPH�DV�DFODVV�DQG�KDV�D�VLQJOH�IRUPDO�SDUDPHWHU�ZLWK�WKH�VDPH�FODVV�DQG�WKH GHVLJQDWLRQ� 7KHSXUSRVH�RI�D�FRS\�FRQVWUXFWRU�LV�WR�PDNH�D�FRS\�RI�WKH�REMHFW�LQ�WKH�DFWXDO�SDUDPHWHU�OLVW�

&RS\ULJKW F⃝� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG 5HYLVHG� $XJXVW��� ����

Page 22: Mutable Lists - Pepperdine University · Design Patterns for Data Structures Figure 6.1 &KDSWHU 0XWDEOH /LVWV 4 (a) A linked list. 9 2 7 4 (c) A circular linked list. 9 2 7 (d) A

Design Patterns for Data Structures Figure 6.9

��� 7KH�&ODVVLF�/LQNHG�,PSOHPHQWDWLRQ ���

�� &RQVWUXFWRUV WHPSODWH�FODVV 7!/LVW/�7!��/LVW/���

BKHDG�QXOOSWU� ^`

WHPSODWH�FODVV 7!/1RGH�7!��/1RGH�7 GDWD��

BGDWD�GDWD��BQH[W�QXOOSWU� ^

`

p

(a) Initial pointer.

p

(b) Allocate storage from the heap.

9p

(c) Execute the constructor.

9p

(d) Return the pointer and assign to p.

)LJXUH ��� 7KH�FRQVWUXFWRUV�IRU�WKH /LVW/ GDWD�VWUXFWXUH�DQG�WKH /1RGH FODVV� 7KHVQDSVKRWV�VKRZ�WKH�H[HFXWLRQ�RI S� �QHZ�/1RGH�7!����

7KLV�IXQFWLRQDOLW\�LV�VR�FRPPRQ�WKDW�&���SURYLGHV�D�FRS\�FRQVWUXFWRU�DXWRPDWLFDOO\HYHQ�LI�QRW�GHFODUHG�E\�WKH�SURJUDPPHU� 7KH�LPSOLFLW�DXWRPDWLFDOO\�VXSSOLHG�FRQVWUXF�WRU�GRHV�D�VKDOORZ�FRS\� %HFDXVH�WKH�GS�GV�GLVWULEXWLRQ�VSHFLÀHV�D�GHHS�FRS\� LW�GHFODUHVWKLV�SULYDWH /LVW/ FRS\�FRQVWUXFWRU�EXW�GRHV�QRW�LPSOHPHQW�LW� 7KDW�SUHYHQWV�WKH�FRP�SLOHU�IURP�VXSSO\LQJ�WKH�GHIDXOW�FRQVWUXFWRU�DXWRPDWLFDOO\�RU�WKH�XVHU�RI�WKH�OLEUDU\�IURPZULWLQJ�DQ�XQVDIH�FRS\�FRQVWUXFWRU�IRU�WKH /LVW/ GDWD�VWUXFWXUH�

)LJXUH���� VKRZV�WKH�FRQVWUXFWRUV�IRU�WKH /LVW/ GDWD�VWUXFWXUH�DQG�WKH /1RGH FODVV�7KHUH�LV�D�FRQVWUXFWRU�IRU�WKH�OLVW�DQG�D�FRQVWUXFWRU�IRU�WKH�QRGH��QRW�VKRZQ�LQ�)LJXUH������7KH�FRQVWUXFWRUV�XVH�D�&���WHFKQLTXH�IRU�LQLWLDOL]LQJ�DWWULEXWHV�FDOOHG�DQ LQLWLDO]HU�OLVW�7KH�LQLWLDO]HU�OLVW�EHJLQV�ZLWK�D�FRORQ � DIWHU�WKH�IRUPDO�SDUDPHWHU�DQG�EHIRUH�WKH�RSHQLQJEUDFH ^ IRU�WKH�FRQVWUXFWRU� ,WHPV�LQ�WKH�LQLWLDO]HU�OLVW�DUH�VHSDUDWHG�ZLWK�D�FRPPD �DQG�FRQVLVW�RI�WKH�DWWULEXWH�WR�EH�LQLWLDOL]HG�DQG�WKH�YDOXH�WR�ZKLFK�LW�LV�LQLWLDOL]HG�LQSDUHQWKHVHV � �� 7KH�WKH�QRGH�FRQVWUXFWRUWHPSODWH�FODVV�7!�/1RGH�7!��/1RGH�7�GDWD��

BGDWD�GDWD��BQH[W�QXOOSWU��^

`

FRXOG�DOWHUQDWLYHO\�EH�ZULWWHQ�ZLWKRXW�WKH�LQLWLDO]HU�OLVW�DV

5HYLVHG� $XJXVW��� ���� &RS\ULJKW F⃝� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG

Page 23: Mutable Lists - Pepperdine University · Design Patterns for Data Structures Figure 6.1 &KDSWHU 0XWDEOH /LVWV 4 (a) A linked list. 9 2 7 4 (c) A circular linked list. 9 2 7 (d) A

Design Patterns for Data Structures

��� 7KH�&ODVVLF�/LQNHG�,PSOHPHQWDWLRQ ���

�� &RQVWUXFWRUV WHPSODWH�FODVV 7!/LVW/�7!��/LVW/���

BKHDG�QXOOSWU� ^`

WHPSODWH�FODVV 7!/1RGH�7!��/1RGH�7 GDWD��

BGDWD�GDWD��BQH[W�QXOOSWU� ^

`

p

(a) Initial pointer.

p

(b) Allocate storage from the heap.

9p

(c) Execute the constructor.

9p

(d) Return the pointer and assign to p.

)LJXUH ��� 7KH�FRQVWUXFWRUV�IRU�WKH /LVW/ GDWD�VWUXFWXUH�DQG�WKH /1RGH FODVV� 7KHVQDSVKRWV�VKRZ�WKH�H[HFXWLRQ�RI S� �QHZ�/1RGH�7!����

7KLV�IXQFWLRQDOLW\�LV�VR�FRPPRQ�WKDW�&���SURYLGHV�D�FRS\�FRQVWUXFWRU�DXWRPDWLFDOO\HYHQ�LI�QRW�GHFODUHG�E\�WKH�SURJUDPPHU� 7KH�LPSOLFLW�DXWRPDWLFDOO\�VXSSOLHG�FRQVWUXF�WRU�GRHV�D�VKDOORZ�FRS\� %HFDXVH�WKH�GS�GV�GLVWULEXWLRQ�VSHFLÀHV�D�GHHS�FRS\� LW�GHFODUHVWKLV�SULYDWH /LVW/ FRS\�FRQVWUXFWRU�EXW�GRHV�QRW�LPSOHPHQW�LW� 7KDW�SUHYHQWV�WKH�FRP�SLOHU�IURP�VXSSO\LQJ�WKH�GHIDXOW�FRQVWUXFWRU�DXWRPDWLFDOO\�RU�WKH�XVHU�RI�WKH�OLEUDU\�IURPZULWLQJ�DQ�XQVDIH�FRS\�FRQVWUXFWRU�IRU�WKH /LVW/ GDWD�VWUXFWXUH�

)LJXUH���� VKRZV�WKH�FRQVWUXFWRUV�IRU�WKH /LVW/ GDWD�VWUXFWXUH�DQG�WKH /1RGH FODVV�7KHUH�LV�D�FRQVWUXFWRU�IRU�WKH�OLVW�DQG�D�FRQVWUXFWRU�IRU�WKH�QRGH��QRW�VKRZQ�LQ�)LJXUH������7KH�FRQVWUXFWRUV�XVH�D�&���WHFKQLTXH�IRU�LQLWLDOL]LQJ�DWWULEXWHV�FDOOHG�DQ LQLWLDO]HU�OLVW�7KH�LQLWLDO]HU�OLVW�EHJLQV�ZLWK�D�FRORQ � DIWHU�WKH�IRUPDO�SDUDPHWHU�DQG�EHIRUH�WKH�RSHQLQJEUDFH ^ IRU�WKH�FRQVWUXFWRU� ,WHPV�LQ�WKH�LQLWLDO]HU�OLVW�DUH�VHSDUDWHG�ZLWK�D�FRPPD �DQG�FRQVLVW�RI�WKH�DWWULEXWH�WR�EH�LQLWLDOL]HG�DQG�WKH�YDOXH�WR�ZKLFK�LW�LV�LQLWLDOL]HG�LQSDUHQWKHVHV � �� 7KH�WKH�QRGH�FRQVWUXFWRUWHPSODWH�FODVV�7!�/1RGH�7!��/1RGH�7�GDWD��

BGDWD�GDWD��BQH[W�QXOOSWU��^

`

FRXOG�DOWHUQDWLYHO\�EH�ZULWWHQ�ZLWKRXW�WKH�LQLWLDO]HU�OLVW�DV

5HYLVHG� $XJXVW��� ���� &RS\ULJKW F⃝� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG

Initializer lists

��� &KDSWHU�� 0XWDEOH�/LVWV

�� SUHSHQG WHPSODWH�FODVV 7!YRLG /LVW/�7!��SUHSHQG�7 FRQVW GDWD� ^

/1RGH�7! WHPS BKHDG�BKHDG QHZ /1RGH�7!�GDWD��BKHDG�!BQH[W WHPS�

`

(d) _head->_next = temp

2 4_head

temp

9

(c) _head = new LNode<T>(data)

2 4_head

temp

9

(b) LNode<T> *temp = _head

2 4_head

temp

(a) Original list.

2 4_head

)LJXUH ���� $Q�LQVHUWLRQ�PHWKRG�IRU�WKH /LVW/ GDWD�VWUXFWXUH� 7KH�VQDSVKRWV�VKRZWKH�H[HFXWLRQ�RI P\/LVW�SUHSHQG����

WHPSODWH�FODVV 7! /1RGH�7!��/1RGH�7 GDWD� ^BGDWD GDWD�BQH[W QXOOSWU�

`

ZKHUH�WKH�LQLWLDOL]DWLRQ�LV�H[SOLFLW�ZLWK�WKH�DVVLJQPHQW�RSHUDWRU �$OWKRXJK�WKH�XVH�RI�WKH�LQLWLDO]HU�OLVW�LV�RSWLRQDO�LQ�WKLV�H[DPSOH� VRPH�VFHQDULRV

ZLWK�LQKHULWDQFH�DQG�FODVV�FRPSRVLWLRQ�UHTXLUH�DQ�LQLWLDO]HU�OLVW� ,W�LV�HDVLHU�WR�DOZD\VXVH�LQLWLDO]HU�OLVWV�LQVWHDG�RI�WU\LQJ�WR�UHPHPEHU�ZKHQ�WKH\�PXVW�EH�XVHG�

7KH�VQDSVKRWV�RQ�WKH�ULJKW�VKRZ�WKH�DFWLRQ�RI�WKH�FRQVWUXFWRU�ZKHQ�WKH�VWDWHPHQW

S QHZ /1RGH�7!���

H[HFXWHV� :KHQ�WKH QHZ RSHUDWRU�H[HFXWHV�ZLWK�D�FODVV�KDYLQJ�D�FRQVWUXFWRU�LW�GRHV�WKUHHWKLQJV� ,W! DOORFDWHV�VWRUDJH�IURP�WKH�KHDS�IRU�WKH�DWWULEXWHV�RI�WKH�REMHFW�! FDOOV�WKH�FRQVWUXFWRU�EDVHG�RQ�WKH�QXPEHU�DQG�W\SHV�RI�SDUDPHWHUV�LQ�WKH�SDUDPHWHU

OLVW� DQG

&RS\ULJKW F⃝� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG 5HYLVHG� $XJXVW��� ����

Figure 6.9

Page 24: Mutable Lists - Pepperdine University · Design Patterns for Data Structures Figure 6.1 &KDSWHU 0XWDEOH /LVWV 4 (a) A linked list. 9 2 7 4 (c) A circular linked list. 9 2 7 (d) A

Design Patterns for Data Structures

��� 7KH�&ODVVLF�/LQNHG�,PSOHPHQWDWLRQ ���

�� &RQVWUXFWRUV WHPSODWH�FODVV 7!/LVW/�7!��/LVW/���

BKHDG�QXOOSWU� ^`

WHPSODWH�FODVV 7!/1RGH�7!��/1RGH�7 GDWD��

BGDWD�GDWD��BQH[W�QXOOSWU� ^

`

p

(a) Initial pointer.

p

(b) Allocate storage from the heap.

9p

(c) Execute the constructor.

9p

(d) Return the pointer and assign to p.

)LJXUH ��� 7KH�FRQVWUXFWRUV�IRU�WKH /LVW/ GDWD�VWUXFWXUH�DQG�WKH /1RGH FODVV� 7KHVQDSVKRWV�VKRZ�WKH�H[HFXWLRQ�RI S� �QHZ�/1RGH�7!����

7KLV�IXQFWLRQDOLW\�LV�VR�FRPPRQ�WKDW�&���SURYLGHV�D�FRS\�FRQVWUXFWRU�DXWRPDWLFDOO\HYHQ�LI�QRW�GHFODUHG�E\�WKH�SURJUDPPHU� 7KH�LPSOLFLW�DXWRPDWLFDOO\�VXSSOLHG�FRQVWUXF�WRU�GRHV�D�VKDOORZ�FRS\� %HFDXVH�WKH�GS�GV�GLVWULEXWLRQ�VSHFLÀHV�D�GHHS�FRS\� LW�GHFODUHVWKLV�SULYDWH /LVW/ FRS\�FRQVWUXFWRU�EXW�GRHV�QRW�LPSOHPHQW�LW� 7KDW�SUHYHQWV�WKH�FRP�SLOHU�IURP�VXSSO\LQJ�WKH�GHIDXOW�FRQVWUXFWRU�DXWRPDWLFDOO\�RU�WKH�XVHU�RI�WKH�OLEUDU\�IURPZULWLQJ�DQ�XQVDIH�FRS\�FRQVWUXFWRU�IRU�WKH /LVW/ GDWD�VWUXFWXUH�

)LJXUH���� VKRZV�WKH�FRQVWUXFWRUV�IRU�WKH /LVW/ GDWD�VWUXFWXUH�DQG�WKH /1RGH FODVV�7KHUH�LV�D�FRQVWUXFWRU�IRU�WKH�OLVW�DQG�D�FRQVWUXFWRU�IRU�WKH�QRGH��QRW�VKRZQ�LQ�)LJXUH������7KH�FRQVWUXFWRUV�XVH�D�&���WHFKQLTXH�IRU�LQLWLDOL]LQJ�DWWULEXWHV�FDOOHG�DQ LQLWLDO]HU�OLVW�7KH�LQLWLDO]HU�OLVW�EHJLQV�ZLWK�D�FRORQ � DIWHU�WKH�IRUPDO�SDUDPHWHU�DQG�EHIRUH�WKH�RSHQLQJEUDFH ^ IRU�WKH�FRQVWUXFWRU� ,WHPV�LQ�WKH�LQLWLDO]HU�OLVW�DUH�VHSDUDWHG�ZLWK�D�FRPPD �DQG�FRQVLVW�RI�WKH�DWWULEXWH�WR�EH�LQLWLDOL]HG�DQG�WKH�YDOXH�WR�ZKLFK�LW�LV�LQLWLDOL]HG�LQSDUHQWKHVHV � �� 7KH�WKH�QRGH�FRQVWUXFWRUWHPSODWH�FODVV�7!�/1RGH�7!��/1RGH�7�GDWD��

BGDWD�GDWD��BQH[W�QXOOSWU��^

`

FRXOG�DOWHUQDWLYHO\�EH�ZULWWHQ�ZLWKRXW�WKH�LQLWLDO]HU�OLVW�DV

5HYLVHG� $XJXVW��� ���� &RS\ULJKW F⃝� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG

��� &KDSWHU�� 0XWDEOH�/LVWV

�� SUHSHQG WHPSODWH�FODVV 7!YRLG /LVW/�7!��SUHSHQG�7 FRQVW GDWD� ^

/1RGH�7! WHPS BKHDG�BKHDG QHZ /1RGH�7!�GDWD��BKHDG�!BQH[W WHPS�

`

(d) _head->_next = temp

2 4_head

temp

9

(c) _head = new LNode<T>(data)

2 4_head

temp

9

(b) LNode<T> *temp = _head

2 4_head

temp

(a) Original list.

2 4_head

)LJXUH ���� $Q�LQVHUWLRQ�PHWKRG�IRU�WKH /LVW/ GDWD�VWUXFWXUH� 7KH�VQDSVKRWV�VKRZWKH�H[HFXWLRQ�RI P\/LVW�SUHSHQG����

WHPSODWH�FODVV 7! /1RGH�7!��/1RGH�7 GDWD� ^BGDWD GDWD�BQH[W QXOOSWU�

`

ZKHUH�WKH�LQLWLDOL]DWLRQ�LV�H[SOLFLW�ZLWK�WKH�DVVLJQPHQW�RSHUDWRU �$OWKRXJK�WKH�XVH�RI�WKH�LQLWLDO]HU�OLVW�LV�RSWLRQDO�LQ�WKLV�H[DPSOH� VRPH�VFHQDULRV

ZLWK�LQKHULWDQFH�DQG�FODVV�FRPSRVLWLRQ�UHTXLUH�DQ�LQLWLDO]HU�OLVW� ,W�LV�HDVLHU�WR�DOZD\VXVH�LQLWLDO]HU�OLVWV�LQVWHDG�RI�WU\LQJ�WR�UHPHPEHU�ZKHQ�WKH\�PXVW�EH�XVHG�

7KH�VQDSVKRWV�RQ�WKH�ULJKW�VKRZ�WKH�DFWLRQ�RI�WKH�FRQVWUXFWRU�ZKHQ�WKH�VWDWHPHQW

S QHZ /1RGH�7!���

H[HFXWHV� :KHQ�WKH QHZ RSHUDWRU�H[HFXWHV�ZLWK�D�FODVV�KDYLQJ�D�FRQVWUXFWRU�LW�GRHV�WKUHHWKLQJV� ,W! DOORFDWHV�VWRUDJH�IURP�WKH�KHDS�IRU�WKH�DWWULEXWHV�RI�WKH�REMHFW�! FDOOV�WKH�FRQVWUXFWRU�EDVHG�RQ�WKH�QXPEHU�DQG�W\SHV�RI�SDUDPHWHUV�LQ�WKH�SDUDPHWHU

OLVW� DQG

&RS\ULJKW F⃝� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG 5HYLVHG� $XJXVW��� ����

Figure 6.9

Page 25: Mutable Lists - Pepperdine University · Design Patterns for Data Structures Figure 6.1 &KDSWHU 0XWDEOH /LVWV 4 (a) A linked list. 9 2 7 4 (c) A circular linked list. 9 2 7 (d) A

Design Patterns for Data Structures

��� &KDSWHU�� 0XWDEOH�/LVWV

�� SUHSHQG WHPSODWH�FODVV 7!YRLG /LVW/�7!��SUHSHQG�7 FRQVW GDWD� ^

/1RGH�7! WHPS BKHDG�BKHDG QHZ /1RGH�7!�GDWD��BKHDG�!BQH[W WHPS�

`

(d) _head->_next = temp

2 4_head

temp

9

(c) _head = new LNode<T>(data)

2 4_head

temp

9

(b) LNode<T> *temp = _head

2 4_head

temp

(a) Original list.

2 4_head

)LJXUH ���� $Q�LQVHUWLRQ�PHWKRG�IRU�WKH /LVW/ GDWD�VWUXFWXUH� 7KH�VQDSVKRWV�VKRZWKH�H[HFXWLRQ�RI P\/LVW�SUHSHQG����

WHPSODWH�FODVV 7! /1RGH�7!��/1RGH�7 GDWD� ^BGDWD GDWD�BQH[W QXOOSWU�

`

ZKHUH�WKH�LQLWLDOL]DWLRQ�LV�H[SOLFLW�ZLWK�WKH�DVVLJQPHQW�RSHUDWRU �$OWKRXJK�WKH�XVH�RI�WKH�LQLWLDO]HU�OLVW�LV�RSWLRQDO�LQ�WKLV�H[DPSOH� VRPH�VFHQDULRV

ZLWK�LQKHULWDQFH�DQG�FODVV�FRPSRVLWLRQ�UHTXLUH�DQ�LQLWLDO]HU�OLVW� ,W�LV�HDVLHU�WR�DOZD\VXVH�LQLWLDO]HU�OLVWV�LQVWHDG�RI�WU\LQJ�WR�UHPHPEHU�ZKHQ�WKH\�PXVW�EH�XVHG�

7KH�VQDSVKRWV�RQ�WKH�ULJKW�VKRZ�WKH�DFWLRQ�RI�WKH�FRQVWUXFWRU�ZKHQ�WKH�VWDWHPHQW

S QHZ /1RGH�7!���

H[HFXWHV� :KHQ�WKH QHZ RSHUDWRU�H[HFXWHV�ZLWK�D�FODVV�KDYLQJ�D�FRQVWUXFWRU�LW�GRHV�WKUHHWKLQJV� ,W! DOORFDWHV�VWRUDJH�IURP�WKH�KHDS�IRU�WKH�DWWULEXWHV�RI�WKH�REMHFW�! FDOOV�WKH�FRQVWUXFWRU�EDVHG�RQ�WKH�QXPEHU�DQG�W\SHV�RI�SDUDPHWHUV�LQ�WKH�SDUDPHWHU

OLVW� DQG

&RS\ULJKW F⃝� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG 5HYLVHG� $XJXVW��� ����

��� 7KH�&ODVVLF�/LQNHG�,PSOHPHQWDWLRQ ���

4

(a) Original list.

9 2 4

(b) Initialize p.

9 2

p

4

(e) Allocate and attach the new node.

79 2

p

4

(c) Advance p in a while loop.

9 2

p

4

(d) Advance p in a while loop.

9 2

p

)LJXUH ���� 7KH�DFWLRQ�RI�PHWKRG DSSHQG��� ,PSOHPHQWDWLRQ�LV�OHIW�DV�DQ�H[HUFLVH�7KH�ÀJXUH�VKRZV�WKH�H[HFXWLRQ�RI P\/LVW�DSSHQG����

! UHWXUQV�D�SRLQWHU�WR�WKH�QHZO\�DOORFDWHG�VWRUDJH�

3DUW��E��RI�WKH�ÀJXUH�VKRZV�DOORFDWLRQ�IURP�WKH�KHDS� 3DUW��F��GRHV�WKH�LPSOLFLW�DVVLJQ�PHQW�RI�WKH�LQLWLDO]HU�OLVW� 3DUW��G��UHWXUQV�WKH�SRLQWHU� ZKLFK�WKH�DVVLJQPHQW�VWDWHPHQWJLYHV�WR S�

)LJXUH����� VKRZV�WKH�LPSOHPHQWDWLRQ�RI SUHSHQG��� RQH�RI�WKH�LQVHUWLRQ�PHWKRGVRI /LVW/��,W�RQO\�UHTXLUHV�WKUHH�&���VWDWHPHQWV�³�RQH�WR�VHW�D�WHPSRUDU\�YDULDEOH�WRWKH�QRGH�DW�WKH�KHDG�RI�WKH�OLVW� RQH�WR�DOORFDWH�WKH�QHZ�QRGH�IURP�WKH�KHDS� DQG�RQH�WROLQN�WKH�QHZO\�DOORFDWHG�QRGH�WR�WKH�IRUPHU�ÀUVW�QRGH�RI�WKH�OLVW� 7KH�VQDSVKRWV�VKRZWKH�H[HFXWLRQ�RI

P\/LVW�SUHSHQG���

%HFDXVH�WKHUH�LV�QR�ORRS�RU�UHFXUVLRQ� WKH�WLPH�FRPSOH[LW\�RI SUHSHQG�� LVΘ(1)�7KH�RWKHU�LQVHUWLRQ�PHWKRG DSSHQG�� DWWDFKHV�WKH�QRGH�DW�WKH�HQG�RI�WKH�OLVW� 7KH

LPSOHPHQWDWLRQ�RI DSSHQG�� LV�DQ�H[HUFLVH�DW�WKH�HQG�RI�WKH�FKDSWHU�)LJXUH����� VKRZV�WKH�DFWLRQ�RI DSSHQG�� ZLWK�D�OLVW�RI�WKUHH�HOHPHQWV� %HFDXVH

/LVW/ GRHV�QRW�KDYH�GLUHFW�DFFHVV�WR�WKH�ODVW�QRGH� \RX�PXVW�ÀQG�WKH�ODVW�QRGH�E\DGYDQFLQJ�D�SRLQWHU�GRZQ�WKH�OLVW�LQ�D�ORRS� 7R�DSSHQG�D�YDOXH�WR�DQ�HPSW\�OLVW�LV�DVSHFLDO�FDVH� ZKLFK�PXVW�EH�FKHFNHG�ÀUVW�ZLWK�DQ LI VWDWHPHQW� 7KH�VWHSV�LQ�WKH�ÀJXUHVKRZ�WKH�DFWLRQ�RI�WKH�DOJRULWKP�ZKHQ�WKH�OLVW�LV�QRW�HPSW\� 7KH�ORRS�LQ�\RXU�DOJRULWKPPXVW�VWRS�ZLWK�ORFDO�YDULDEOH S SRLQWLQJ�WR�WKH�ODVW�QRGH� ,W�PXVW�QRW�EH QXOOSWU� 6WHS�H��UHTXLUHV�RQO\�RQH�DVVLJQPHQW�VWDWHPHQW�RXWVLGH�WKH�ORRS� %HFDXVH�RI�WKH�ORRS� WKHWLPH�FRPSOH[LW\�RI DSSHQG�� LVΘ(n) ZKHUH n LV�WKH�QXPEHU�RI�HOHPHQWV�LQ�WKH�OLVW�

)LJXUH����� VKRZV�WKH�WZR�PHWKRGV�WKDW�SURYLGH�D�GHHS�FRS\�ZLWK�WKH�DVVLJQPHQWVWDWHPHQW� 0HWKRG RSHUDWRU �� RYHUORDGV�WKH�DVVLJQPHQW�RSHUDWRU�VR�LW�FDQ�EH�XVHG

5HYLVHG� $XJXVW��� ���� &RS\ULJKW F⃝� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG

��� &KDSWHU�� 0XWDEOH�/LVWV

�� SUHSHQG WHPSODWH�FODVV 7!YRLG /LVW/�7!��SUHSHQG�7 FRQVW GDWD� ^

/1RGH�7! WHPS BKHDG�BKHDG QHZ /1RGH�7!�GDWD��BKHDG�!BQH[W WHPS�

`

(d) _head->_next = temp

2 4_head

temp

9

(c) _head = new LNode<T>(data)

2 4_head

temp

9

(b) LNode<T> *temp = _head

2 4_head

temp

(a) Original list.

2 4_head

)LJXUH ���� $Q�LQVHUWLRQ�PHWKRG�IRU�WKH /LVW/ GDWD�VWUXFWXUH� 7KH�VQDSVKRWV�VKRZWKH�H[HFXWLRQ�RI P\/LVW�SUHSHQG����

WHPSODWH�FODVV 7! /1RGH�7!��/1RGH�7 GDWD� ^BGDWD GDWD�BQH[W QXOOSWU�

`

ZKHUH�WKH�LQLWLDOL]DWLRQ�LV�H[SOLFLW�ZLWK�WKH�DVVLJQPHQW�RSHUDWRU �$OWKRXJK�WKH�XVH�RI�WKH�LQLWLDO]HU�OLVW�LV�RSWLRQDO�LQ�WKLV�H[DPSOH� VRPH�VFHQDULRV

ZLWK�LQKHULWDQFH�DQG�FODVV�FRPSRVLWLRQ�UHTXLUH�DQ�LQLWLDO]HU�OLVW� ,W�LV�HDVLHU�WR�DOZD\VXVH�LQLWLDO]HU�OLVWV�LQVWHDG�RI�WU\LQJ�WR�UHPHPEHU�ZKHQ�WKH\�PXVW�EH�XVHG�

7KH�VQDSVKRWV�RQ�WKH�ULJKW�VKRZ�WKH�DFWLRQ�RI�WKH�FRQVWUXFWRU�ZKHQ�WKH�VWDWHPHQW

S QHZ /1RGH�7!���

H[HFXWHV� :KHQ�WKH QHZ RSHUDWRU�H[HFXWHV�ZLWK�D�FODVV�KDYLQJ�D�FRQVWUXFWRU�LW�GRHV�WKUHHWKLQJV� ,W! DOORFDWHV�VWRUDJH�IURP�WKH�KHDS�IRU�WKH�DWWULEXWHV�RI�WKH�REMHFW�! FDOOV�WKH�FRQVWUXFWRU�EDVHG�RQ�WKH�QXPEHU�DQG�W\SHV�RI�SDUDPHWHUV�LQ�WKH�SDUDPHWHU

OLVW� DQG

&RS\ULJKW F⃝� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG 5HYLVHG� $XJXVW��� ����

��� &KDSWHU�� 0XWDEOH�/LVWV

�� SUHSHQG WHPSODWH�FODVV 7!YRLG /LVW/�7!��SUHSHQG�7 FRQVW GDWD� ^

/1RGH�7! WHPS BKHDG�BKHDG QHZ /1RGH�7!�GDWD��BKHDG�!BQH[W WHPS�

`

(d) _head->_next = temp

2 4_head

temp

9

(c) _head = new LNode<T>(data)

2 4_head

temp

9

(b) LNode<T> *temp = _head

2 4_head

temp

(a) Original list.

2 4_head

)LJXUH ���� $Q�LQVHUWLRQ�PHWKRG�IRU�WKH /LVW/ GDWD�VWUXFWXUH� 7KH�VQDSVKRWV�VKRZWKH�H[HFXWLRQ�RI P\/LVW�SUHSHQG����

WHPSODWH�FODVV 7! /1RGH�7!��/1RGH�7 GDWD� ^BGDWD GDWD�BQH[W QXOOSWU�

`

ZKHUH�WKH�LQLWLDOL]DWLRQ�LV�H[SOLFLW�ZLWK�WKH�DVVLJQPHQW�RSHUDWRU �$OWKRXJK�WKH�XVH�RI�WKH�LQLWLDO]HU�OLVW�LV�RSWLRQDO�LQ�WKLV�H[DPSOH� VRPH�VFHQDULRV

ZLWK�LQKHULWDQFH�DQG�FODVV�FRPSRVLWLRQ�UHTXLUH�DQ�LQLWLDO]HU�OLVW� ,W�LV�HDVLHU�WR�DOZD\VXVH�LQLWLDO]HU�OLVWV�LQVWHDG�RI�WU\LQJ�WR�UHPHPEHU�ZKHQ�WKH\�PXVW�EH�XVHG�

7KH�VQDSVKRWV�RQ�WKH�ULJKW�VKRZ�WKH�DFWLRQ�RI�WKH�FRQVWUXFWRU�ZKHQ�WKH�VWDWHPHQW

S QHZ /1RGH�7!���

H[HFXWHV� :KHQ�WKH QHZ RSHUDWRU�H[HFXWHV�ZLWK�D�FODVV�KDYLQJ�D�FRQVWUXFWRU�LW�GRHV�WKUHHWKLQJV� ,W! DOORFDWHV�VWRUDJH�IURP�WKH�KHDS�IRU�WKH�DWWULEXWHV�RI�WKH�REMHFW�! FDOOV�WKH�FRQVWUXFWRU�EDVHG�RQ�WKH�QXPEHU�DQG�W\SHV�RI�SDUDPHWHUV�LQ�WKH�SDUDPHWHU

OLVW� DQG

&RS\ULJKW F⃝� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG 5HYLVHG� $XJXVW��� ����

Figure 6.10

Page 26: Mutable Lists - Pepperdine University · Design Patterns for Data Structures Figure 6.1 &KDSWHU 0XWDEOH /LVWV 4 (a) A linked list. 9 2 7 4 (c) A circular linked list. 9 2 7 (d) A

Design Patterns for Data Structures Figure 6.11

append( ), exercise��� 7KH�&ODVVLF�/LQNHG�,PSOHPHQWDWLRQ ���

4

(a) Original list.

9 2 4

(b) Initialize p.

9 2

p

4

(e) Allocate and attach the new node.

79 2

p

4

(c) Advance p in a while loop.

9 2

p

4

(d) Advance p in a while loop.

9 2

p

)LJXUH ���� 7KH�DFWLRQ�RI�PHWKRG DSSHQG��� ,PSOHPHQWDWLRQ�LV�OHIW�DV�DQ�H[HUFLVH�7KH�ÀJXUH�VKRZV�WKH�H[HFXWLRQ�RI P\/LVW�DSSHQG����

! UHWXUQV�D�SRLQWHU�WR�WKH�QHZO\�DOORFDWHG�VWRUDJH�

3DUW��E��RI�WKH�ÀJXUH�VKRZV�DOORFDWLRQ�IURP�WKH�KHDS� 3DUW��F��GRHV�WKH�LPSOLFLW�DVVLJQ�PHQW�RI�WKH�LQLWLDO]HU�OLVW� 3DUW��G��UHWXUQV�WKH�SRLQWHU� ZKLFK�WKH�DVVLJQPHQW�VWDWHPHQWJLYHV�WR S�

)LJXUH����� VKRZV�WKH�LPSOHPHQWDWLRQ�RI SUHSHQG��� RQH�RI�WKH�LQVHUWLRQ�PHWKRGVRI /LVW/��,W�RQO\�UHTXLUHV�WKUHH�&���VWDWHPHQWV�³�RQH�WR�VHW�D�WHPSRUDU\�YDULDEOH�WRWKH�QRGH�DW�WKH�KHDG�RI�WKH�OLVW� RQH�WR�DOORFDWH�WKH�QHZ�QRGH�IURP�WKH�KHDS� DQG�RQH�WROLQN�WKH�QHZO\�DOORFDWHG�QRGH�WR�WKH�IRUPHU�ÀUVW�QRGH�RI�WKH�OLVW� 7KH�VQDSVKRWV�VKRZWKH�H[HFXWLRQ�RI

P\/LVW�SUHSHQG���

%HFDXVH�WKHUH�LV�QR�ORRS�RU�UHFXUVLRQ� WKH�WLPH�FRPSOH[LW\�RI SUHSHQG�� LVΘ(1)�7KH�RWKHU�LQVHUWLRQ�PHWKRG DSSHQG�� DWWDFKHV�WKH�QRGH�DW�WKH�HQG�RI�WKH�OLVW� 7KH

LPSOHPHQWDWLRQ�RI DSSHQG�� LV�DQ�H[HUFLVH�DW�WKH�HQG�RI�WKH�FKDSWHU�)LJXUH����� VKRZV�WKH�DFWLRQ�RI DSSHQG�� ZLWK�D�OLVW�RI�WKUHH�HOHPHQWV� %HFDXVH

/LVW/ GRHV�QRW�KDYH�GLUHFW�DFFHVV�WR�WKH�ODVW�QRGH� \RX�PXVW�ÀQG�WKH�ODVW�QRGH�E\DGYDQFLQJ�D�SRLQWHU�GRZQ�WKH�OLVW�LQ�D�ORRS� 7R�DSSHQG�D�YDOXH�WR�DQ�HPSW\�OLVW�LV�DVSHFLDO�FDVH� ZKLFK�PXVW�EH�FKHFNHG�ÀUVW�ZLWK�DQ LI VWDWHPHQW� 7KH�VWHSV�LQ�WKH�ÀJXUHVKRZ�WKH�DFWLRQ�RI�WKH�DOJRULWKP�ZKHQ�WKH�OLVW�LV�QRW�HPSW\� 7KH�ORRS�LQ�\RXU�DOJRULWKPPXVW�VWRS�ZLWK�ORFDO�YDULDEOH S SRLQWLQJ�WR�WKH�ODVW�QRGH� ,W�PXVW�QRW�EH QXOOSWU� 6WHS�H��UHTXLUHV�RQO\�RQH�DVVLJQPHQW�VWDWHPHQW�RXWVLGH�WKH�ORRS� %HFDXVH�RI�WKH�ORRS� WKHWLPH�FRPSOH[LW\�RI DSSHQG�� LVΘ(n) ZKHUH n LV�WKH�QXPEHU�RI�HOHPHQWV�LQ�WKH�OLVW�

)LJXUH����� VKRZV�WKH�WZR�PHWKRGV�WKDW�SURYLGH�D�GHHS�FRS\�ZLWK�WKH�DVVLJQPHQWVWDWHPHQW� 0HWKRG RSHUDWRU �� RYHUORDGV�WKH�DVVLJQPHQW�RSHUDWRU�VR�LW�FDQ�EH�XVHG

5HYLVHG� $XJXVW��� ���� &RS\ULJKW F⃝� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG

Page 27: Mutable Lists - Pepperdine University · Design Patterns for Data Structures Figure 6.1 &KDSWHU 0XWDEOH /LVWV 4 (a) A linked list. 9 2 7 4 (c) A circular linked list. 9 2 7 (d) A

Design Patterns for Data Structures Figure 6.12

copyHead( ), exercise��� &KDSWHU�� 0XWDEOH�/LVWV

�� RSHUDWRU WHPSODWH�FODVV 7!/LVW/�7! /LVW/�7!��RSHUDWRU �/LVW/�7! FRQVW UKV� ^

LI �WKLV � UKV� ^ �� ,Q FDVH VRPHRQH ZULWHV P\/LVW P\/LVW�FOHDU���BKHDG FRS\+HDG�UKV��

`UHWXUQ WKLV�

`

�� FRS\+HDG WHPSODWH�FODVV 7!/1RGH�7! /LVW/�7!��FRS\+HDG�/LVW/�7! FRQVW UKV� ^

LI �UKV�LV(PSW\��� ^UHWXUQ QXOOSWU�

`HOVH ^

/1RGH�7! S� T� UHVXOW�FHUU �� ¯/LVW/�7!��FRS\+HDG� ([HUFLVH IRU WKH VWXGHQW�¯ �� HQGO��� 7KUHH OLQHV WR VHW XS WKH ORRS LQYDULDQW��� IROORZHG E\ D VLQJOH ZKLOH ZLWK RQO\ WKUHH OLQHV LQ WKH ERG\��� 1R DGGLWLRQDO ORFDO YDULDEOHV�WKURZ ���

``

)LJXUH ���� 0HWKRGV�IRU�SURYLGLQJ�D�GHHS�FRS\�RI�D /LVW/ ZLWK�WKH�DVVLJQPHQWVWDWHPHQW�

ZLWK /LVW/ REMHFWV� /LNH�PHWKRG RSHUDWRU��� ZKLFK�RYHUORDGV�WKH�RXWSXW�VWUHDPLQJRSHUDWRU� WKH�IRUPDO�SDUDPHWHU UKV VWDQGV�IRU�ULJKW�KDQG�VLGH�EHFDXVH�WKH�FRUUHVSRQGLQJDFWXDO�SDUDPHWHU�LV�RQ�WKH�ULJKW�KDQG�VLGH�RI�WKH�DVVLJQPHQW�RSHUDWRU� ,Q�WKH�DVVLJQPHQWVWDWHPHQW

P\/LVW \RXU/LVW

DFWXDO�SDUDPHWHU \RXU/LVW FRUUHVSRQGV�WR�IRUPDO�SDUDPHWHU UKV� WKLV FRUUHVSRQGVWR P\/LVW� DQG BKHDG FRUUHVSRQGV�WR P\/LVW�BKHDG�

7KH�LPSOHPHQWDWLRQ�LQ RSHUDWRU �� VKRZV�WKH�VWDQGDUG�&���FRGLQJ�SDWWHUQ�IRURYHUORDGLQJ�WKH�DVVLJQPHQW�RSHUDWRU� ,Q�JHQHUDO�IRU�D�GHHS�FRS\� WKH�DOJRULWKP�PXVWGHDOORFDWH�WKH�OLVW�RQ�WKH�OHIW�KDQG�VLGH� GXSOLFDWH�WKH�OLVW�RQ�WKH�ULJKW�KDQG�VLGH� VHWBKHDG RI�WKH�OHIW�KDQG�VLGH�WR�SRLQW�WR�WKH�ÀUVW�QRGH�RI�WKH�GXSOLFDWH�OLVW� DQG�UHWXUQWKH�REMHFW�RQ�WKH�OHIW�KDQG�VLGH� 7KH�LPSOHPHQWDWLRQ�LQ�)LJXUH����� GHDOORFDWHV�WKH�OLVWRQ�WKH�OHIW�KDQG�VLGH�E\�FDOOLQJ FOHDU��� ZKLFK�LV�GHVFULEHG�ODWHU�LQ�)LJXUH����� RQSDJH����� ,W�GXSOLFDWHV�WKH�OLVW�RQ�WKH�ULJKW�KDQG�VLGH�E\�FDOOLQJ FRS\+HDG��� ,W�SRLQWVBKHDG WR�WKH�ÀUVW�QRGH�ZLWK�WKH�DVVLJQPHQW�VWDWHPHQW� $QG�LW�UHWXUQV�WKH�REMHFW�RQ�WKHOHIW�VLGH�RI�WKH�DVVLJQPHQW�VWDWHPHQW�E\�UHWXUQLQJ WKLV�

&RS\ULJKW F⃝� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG 5HYLVHG� 2FWREHU��� ����

Page 28: Mutable Lists - Pepperdine University · Design Patterns for Data Structures Figure 6.1 &KDSWHU 0XWDEOH /LVWV 4 (a) A linked list. 9 2 7 4 (c) A circular linked list. 9 2 7 (d) A

Design Patterns for Data Structures

copyHead( ), exercise��� 7KH�&ODVVLF�/LQNHG�,PSOHPHQWDWLRQ ���

rhs(d) Advance q, re-establishing loop invariant. 4 79 2

result 49 2p

q

rhs(c) Advance p. 4 79 2

result 49 2p

q

rhs(b) Attach copy of node following p to node to which q points.

4 79 2

result 49 2p

q

rhs(a) Establish loop invariant. 4 79 2

result 9 2

p

q

)LJXUH ���� 7KH�DFWLRQ�RI�PHWKRG FRS\+HDG��� ,PSOHPHQWDWLRQ�LV�OHIW�DV�DQ�H[HU�FLVH�

7KHUH�LV�RQH�XQOLNHO\�VFHQDULR�WKDW�\RX�PXVW�JXDUG�DJDLQVW�ZKHQ�\RX�RYHUORDG�WKHDVVLJQPHQW�RSHUDWRU�ZLWK�D�GHHS�FRS\� 6XSSRVH�WKH�XVHU�RI�WKH /LVW/ GDWD�VWUXFWXUHZULWHV

P\/LVW P\/LVW

$GPLWWHGO\� QR�XVHU�VKRXOG�ZULWH�VXFK�DQ�DVVLJQPHQW�VWDWHPHQW�DV�DVVLJQLQJ�D�YDULDEOH�WRLWV�RZQ�YDOXH�GRHV�QRW�DFFRPSOLVK�DQ\WKLQJ�XVHIXO� +RZHYHU� WKHUH�LV�QRWKLQJ�WR�SUHYHQWWKLV�XVHOHVV�VWDWHPHQW�IURP�EHLQJ�ZULWWHQ� DQG�LI�LW�LV�WKHQ�WKH�VWDWH�RI�WKH�FRPSXWDWLRQVKRXOG�QRW�FKDQJH�ZKHQ�LW�H[HFXWHV�

6XSSRVH�WKH�FRGH�IRU RSHUDWRU GLG�QRW�FKHFN�IRU�WKH�DERYH�SRVVLELOLW\� DQG�RPLW�WHG�WKH LI WHVW�DV�IROORZV�

5HYLVHG� $XJXVW��� ���� &RS\ULJKW F⃝� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG

��� &KDSWHU�� 0XWDEOH�/LVWV

a/LVW/����� 3RVW� 7KLV OLVW LV GHDOORFDWHG�

YRLG FOHDU����� 3RVW� 7KLV OLVW LV FOHDUHG WR WKH HPSW\ OLVW�

7 UHP)LUVW����� 3UH� 7KLV OLVW LV QRW HPSW\��� 3RVW� 7KH ILUVW HOHPHQW LV UHPRYHG IURP WKLV OLVW DQG UHWXUQHG�

7 UHP/DVW����� 3UH� 7KLV OLVW LV QRW HPSW\��� 3RVW� 7KH ODVW HOHPHQW LV UHPRYHG IURP WKLV OLVW DQG UHWXUQHG�

YRLG /LVW/�7!��UHPRYH�7 FRQVW GDWD� ^�� 3RVW� ,I GDWD LV LQ WKLV OLVW� LW LV UHPRYHG��� 2WKHUZLVH WKLV OLVW LV XQFKDQJHG�

)LJXUH ���� 6SHFLÀFDWLRQV�IRU�WKH�GHVWUXFWLRQ�DQG�UHPRYDO�PHWKRGV�RI�WKH /LVW/GDWD�VWUXFWXUH�

FOHDU���BKHDG FRS\+HDG�UKV��UHWXUQ WKLV�

7KHQ P\/LVW ZRXOG�EH�GHDOORFDWHG� WKH�GHDOORFDWHG�OLVW�ZRXOG�JHW�GXSOLFDWHG� DQGP\/LVW ZRXOG�JHW�WKH�HPSW\�OLVW�DQG�EH�ZLSHG�RXW� 7KH LI WHVW�SUHYHQWV�WKLV�XQIRU�WXQDWH�VFHQDULR�

RSHUDWRU �� FDOOV FRS\+HDG��� ZKLFK�GRHV�WKH�DFWXDO�GXSOLFDWLRQ� ,PSOHPHQ�WDWLRQ�RI FRS\+HDG�� LV�DQ�H[HUFLVH� )LJXUH����� VKRZV�WKH�DFWLRQ�RI�WKH�DOJRULWKP�ZKLFK�UHTXLUHV�D�ORRS� <RX�ZLOO�REYLRXVO\�QHHG�D�ORFDO�SRLQWHU S WR�DGYDQFH�GRZQ�WKHUKV OLVW�DQG�D�ORFDO�YDULDEOH T WR�PDUN�WKH�HQG�RI�WKH�OLVW�WR�DWWDFK�WKH�GXSOLFDWH�QRGH�

:KHQHYHU�\RX�ZULWH�D�ORRS� \RX�VKRXOG�DOZD\V�DVN�\RXUVHOI� :KDW�LV�WKH�ORRS�LQYDUL�DQW" 7KH�ORRS�LQYDULDQW�IRU�WKLV�DOJRULWKP�KDV�WZR�SDUWV� ZKLFK�GHVFULEH�WKH�SXUSRVHV�RIS DQG T�

! S SRLQWV�WR�WKH�QRGH�LQ UKV SUHFHGLQJ�WKH�QRGH�WR�EH�GXSOLFDWHG�QH[W�

! T SRLQWV�WR�WKH�ODVW�QRGH�LQ UHVXOW�

7R�ZULWH�D�FRUUHFW�ORRS� \RX�ÀUVW�LQLWLDOL]H�WKH�YDULDEOHV�WR�PDNH�WKH�LQYDULDQW�WUXHEHIRUH�H[HFXWLQJ�WKH�ORRS�WKH�ÀUVW�WLPH� ,Q�WKH�ERG\�RI�WKH�ORRS� \RX�SHUIRUP�WKH�DFWLRQQHFHVVDU\�IRU�FRPSXWLQJ�RQH�VWHS�RI�WKH�DOJRULWKP� 7KHQ� \RX�DGMXVW�WKH�YDULDEOHV�WRUH�HVWDEOLVK�WKH�ORRS�LQYDULDQW�

)LJXUH������D��VKRZV�WKH�VWDWH�DIWHU�RQH�RI�WKH�H[HFXWLRQV�RI�WKH�ORRS�ERG\� <RX�FDQVHH�WKDW S SRLQWV�WR�WKH�QRGH�LQ UKV SUHFHGLQJ�WKH�QRGH�WR�EH�GXSOLFDWHG�QH[W� DQG TSRLQWV�WR�WKH�ODVW�QRGH�LQ UHVXOW� 3DUW��E��VKRZV�WKH�DFWLRQ�QHFHVVDU\�IRU�FRPSXWLQJRQH�VWHS�RI�WKH�DOJRULWKP� $W�WKLV�SRLQW�LQ�WKH�FRPSXWDWLRQ� WKH�ORRS�LQYDULDQW�LV�QR�ORQJHU

&RS\ULJKW F⃝� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG 5HYLVHG� $XJXVW��� ����

Figure 6.13

Page 29: Mutable Lists - Pepperdine University · Design Patterns for Data Structures Figure 6.1 &KDSWHU 0XWDEOH /LVWV 4 (a) A linked list. 9 2 7 4 (c) A circular linked list. 9 2 7 (d) A

Design Patterns for Data Structures

copyHead( ), exercise

��� 7KH�&ODVVLF�/LQNHG�,PSOHPHQWDWLRQ ���

rhs(d) Advance q, re-establishing loop invariant. 4 79 2

result 49 2p

q

rhs(c) Advance p. 4 79 2

result 49 2p

q

rhs(b) Attach copy of node following p to node to which q points.

4 79 2

result 49 2p

q

rhs(a) Establish loop invariant. 4 79 2

result 9 2

p

q

)LJXUH ���� 7KH�DFWLRQ�RI�PHWKRG FRS\+HDG��� ,PSOHPHQWDWLRQ�LV�OHIW�DV�DQ�H[HU�FLVH�

7KHUH�LV�RQH�XQOLNHO\�VFHQDULR�WKDW�\RX�PXVW�JXDUG�DJDLQVW�ZKHQ�\RX�RYHUORDG�WKHDVVLJQPHQW�RSHUDWRU�ZLWK�D�GHHS�FRS\� 6XSSRVH�WKH�XVHU�RI�WKH /LVW/ GDWD�VWUXFWXUHZULWHV

P\/LVW P\/LVW

$GPLWWHGO\� QR�XVHU�VKRXOG�ZULWH�VXFK�DQ�DVVLJQPHQW�VWDWHPHQW�DV�DVVLJQLQJ�D�YDULDEOH�WRLWV�RZQ�YDOXH�GRHV�QRW�DFFRPSOLVK�DQ\WKLQJ�XVHIXO� +RZHYHU� WKHUH�LV�QRWKLQJ�WR�SUHYHQWWKLV�XVHOHVV�VWDWHPHQW�IURP�EHLQJ�ZULWWHQ� DQG�LI�LW�LV�WKHQ�WKH�VWDWH�RI�WKH�FRPSXWDWLRQVKRXOG�QRW�FKDQJH�ZKHQ�LW�H[HFXWHV�

6XSSRVH�WKH�FRGH�IRU RSHUDWRU GLG�QRW�FKHFN�IRU�WKH�DERYH�SRVVLELOLW\� DQG�RPLW�WHG�WKH LI WHVW�DV�IROORZV�

5HYLVHG� $XJXVW��� ���� &RS\ULJKW F⃝� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG

��� &KDSWHU�� 0XWDEOH�/LVWV

a/LVW/����� 3RVW� 7KLV OLVW LV GHDOORFDWHG�

YRLG FOHDU����� 3RVW� 7KLV OLVW LV FOHDUHG WR WKH HPSW\ OLVW�

7 UHP)LUVW����� 3UH� 7KLV OLVW LV QRW HPSW\��� 3RVW� 7KH ILUVW HOHPHQW LV UHPRYHG IURP WKLV OLVW DQG UHWXUQHG�

7 UHP/DVW����� 3UH� 7KLV OLVW LV QRW HPSW\��� 3RVW� 7KH ODVW HOHPHQW LV UHPRYHG IURP WKLV OLVW DQG UHWXUQHG�

YRLG /LVW/�7!��UHPRYH�7 FRQVW GDWD� ^�� 3RVW� ,I GDWD LV LQ WKLV OLVW� LW LV UHPRYHG��� 2WKHUZLVH WKLV OLVW LV XQFKDQJHG�

)LJXUH ���� 6SHFLÀFDWLRQV�IRU�WKH�GHVWUXFWLRQ�DQG�UHPRYDO�PHWKRGV�RI�WKH /LVW/GDWD�VWUXFWXUH�

FOHDU���BKHDG FRS\+HDG�UKV��UHWXUQ WKLV�

7KHQ P\/LVW ZRXOG�EH�GHDOORFDWHG� WKH�GHDOORFDWHG�OLVW�ZRXOG�JHW�GXSOLFDWHG� DQGP\/LVW ZRXOG�JHW�WKH�HPSW\�OLVW�DQG�EH�ZLSHG�RXW� 7KH LI WHVW�SUHYHQWV�WKLV�XQIRU�WXQDWH�VFHQDULR�

RSHUDWRU �� FDOOV FRS\+HDG��� ZKLFK�GRHV�WKH�DFWXDO�GXSOLFDWLRQ� ,PSOHPHQ�WDWLRQ�RI FRS\+HDG�� LV�DQ�H[HUFLVH� )LJXUH����� VKRZV�WKH�DFWLRQ�RI�WKH�DOJRULWKP�ZKLFK�UHTXLUHV�D�ORRS� <RX�ZLOO�REYLRXVO\�QHHG�D�ORFDO�SRLQWHU S WR�DGYDQFH�GRZQ�WKHUKV OLVW�DQG�D�ORFDO�YDULDEOH T WR�PDUN�WKH�HQG�RI�WKH�OLVW�WR�DWWDFK�WKH�GXSOLFDWH�QRGH�

:KHQHYHU�\RX�ZULWH�D�ORRS� \RX�VKRXOG�DOZD\V�DVN�\RXUVHOI� :KDW�LV�WKH�ORRS�LQYDUL�DQW" 7KH�ORRS�LQYDULDQW�IRU�WKLV�DOJRULWKP�KDV�WZR�SDUWV� ZKLFK�GHVFULEH�WKH�SXUSRVHV�RIS DQG T�

! S SRLQWV�WR�WKH�QRGH�LQ UKV SUHFHGLQJ�WKH�QRGH�WR�EH�GXSOLFDWHG�QH[W�

! T SRLQWV�WR�WKH�ODVW�QRGH�LQ UHVXOW�

7R�ZULWH�D�FRUUHFW�ORRS� \RX�ÀUVW�LQLWLDOL]H�WKH�YDULDEOHV�WR�PDNH�WKH�LQYDULDQW�WUXHEHIRUH�H[HFXWLQJ�WKH�ORRS�WKH�ÀUVW�WLPH� ,Q�WKH�ERG\�RI�WKH�ORRS� \RX�SHUIRUP�WKH�DFWLRQQHFHVVDU\�IRU�FRPSXWLQJ�RQH�VWHS�RI�WKH�DOJRULWKP� 7KHQ� \RX�DGMXVW�WKH�YDULDEOHV�WRUH�HVWDEOLVK�WKH�ORRS�LQYDULDQW�

)LJXUH������D��VKRZV�WKH�VWDWH�DIWHU�RQH�RI�WKH�H[HFXWLRQV�RI�WKH�ORRS�ERG\� <RX�FDQVHH�WKDW S SRLQWV�WR�WKH�QRGH�LQ UKV SUHFHGLQJ�WKH�QRGH�WR�EH�GXSOLFDWHG�QH[W� DQG TSRLQWV�WR�WKH�ODVW�QRGH�LQ UHVXOW� 3DUW��E��VKRZV�WKH�DFWLRQ�QHFHVVDU\�IRU�FRPSXWLQJRQH�VWHS�RI�WKH�DOJRULWKP� $W�WKLV�SRLQW�LQ�WKH�FRPSXWDWLRQ� WKH�ORRS�LQYDULDQW�LV�QR�ORQJHU

&RS\ULJKW F⃝� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG 5HYLVHG� $XJXVW��� ����

Figure 6.13

Page 30: Mutable Lists - Pepperdine University · Design Patterns for Data Structures Figure 6.1 &KDSWHU 0XWDEOH /LVWV 4 (a) A linked list. 9 2 7 4 (c) A circular linked list. 9 2 7 (d) A

Design Patterns for Data Structures

Methods for destruction and removal

ListL

Page 31: Mutable Lists - Pepperdine University · Design Patterns for Data Structures Figure 6.1 &KDSWHU 0XWDEOH /LVWV 4 (a) A linked list. 9 2 7 4 (c) A circular linked list. 9 2 7 (d) A

Design Patterns for Data Structures Figure 6.14

��� &KDSWHU�� 0XWDEOH�/LVWV

a/LVW/����� 3RVW� 7KLV OLVW LV GHDOORFDWHG�

YRLG FOHDU����� 3RVW� 7KLV OLVW LV FOHDUHG WR WKH HPSW\ OLVW�

7 UHP)LUVW����� 3UH� 7KLV OLVW LV QRW HPSW\��� 3RVW� 7KH ILUVW HOHPHQW LV UHPRYHG IURP WKLV OLVW DQG UHWXUQHG�

7 UHP/DVW����� 3UH� 7KLV OLVW LV QRW HPSW\��� 3RVW� 7KH ODVW HOHPHQW LV UHPRYHG IURP WKLV OLVW DQG UHWXUQHG�

YRLG /LVW/�7!��UHPRYH�7 FRQVW GDWD� ^�� 3RVW� ,I GDWD LV LQ WKLV OLVW� LW LV UHPRYHG��� 2WKHUZLVH WKLV OLVW LV XQFKDQJHG�

)LJXUH ���� 6SHFLÀFDWLRQV�IRU�WKH�GHVWUXFWLRQ�DQG�UHPRYDO�PHWKRGV�RI�WKH /LVW/GDWD�VWUXFWXUH�

FOHDU���BKHDG FRS\+HDG�UKV��UHWXUQ WKLV�

7KHQ P\/LVW ZRXOG�EH�GHDOORFDWHG� WKH�GHDOORFDWHG�OLVW�ZRXOG�JHW�GXSOLFDWHG� DQGP\/LVW ZRXOG�JHW�WKH�HPSW\�OLVW�DQG�EH�ZLSHG�RXW� 7KH LI WHVW�SUHYHQWV�WKLV�XQIRU�WXQDWH�VFHQDULR�

RSHUDWRU �� FDOOV FRS\+HDG��� ZKLFK�GRHV�WKH�DFWXDO�GXSOLFDWLRQ� ,PSOHPHQ�WDWLRQ�RI FRS\+HDG�� LV�DQ�H[HUFLVH� )LJXUH����� VKRZV�WKH�DFWLRQ�RI�WKH�DOJRULWKP�ZKLFK�UHTXLUHV�D�ORRS� <RX�ZLOO�REYLRXVO\�QHHG�D�ORFDO�SRLQWHU S WR�DGYDQFH�GRZQ�WKHUKV OLVW�DQG�D�ORFDO�YDULDEOH T WR�PDUN�WKH�HQG�RI�WKH�OLVW�WR�DWWDFK�WKH�GXSOLFDWH�QRGH�

:KHQHYHU�\RX�ZULWH�D�ORRS� \RX�VKRXOG�DOZD\V�DVN�\RXUVHOI� :KDW�LV�WKH�ORRS�LQYDUL�DQW" 7KH�ORRS�LQYDULDQW�IRU�WKLV�DOJRULWKP�KDV�WZR�SDUWV� ZKLFK�GHVFULEH�WKH�SXUSRVHV�RIS DQG T�

! S SRLQWV�WR�WKH�QRGH�LQ UKV SUHFHGLQJ�WKH�QRGH�WR�EH�GXSOLFDWHG�QH[W�

! T SRLQWV�WR�WKH�ODVW�QRGH�LQ UHVXOW�

7R�ZULWH�D�FRUUHFW�ORRS� \RX�ÀUVW�LQLWLDOL]H�WKH�YDULDEOHV�WR�PDNH�WKH�LQYDULDQW�WUXHEHIRUH�H[HFXWLQJ�WKH�ORRS�WKH�ÀUVW�WLPH� ,Q�WKH�ERG\�RI�WKH�ORRS� \RX�SHUIRUP�WKH�DFWLRQQHFHVVDU\�IRU�FRPSXWLQJ�RQH�VWHS�RI�WKH�DOJRULWKP� 7KHQ� \RX�DGMXVW�WKH�YDULDEOHV�WRUH�HVWDEOLVK�WKH�ORRS�LQYDULDQW�

)LJXUH������D��VKRZV�WKH�VWDWH�DIWHU�RQH�RI�WKH�H[HFXWLRQV�RI�WKH�ORRS�ERG\� <RX�FDQVHH�WKDW S SRLQWV�WR�WKH�QRGH�LQ UKV SUHFHGLQJ�WKH�QRGH�WR�EH�GXSOLFDWHG�QH[W� DQG TSRLQWV�WR�WKH�ODVW�QRGH�LQ UHVXOW� 3DUW��E��VKRZV�WKH�DFWLRQ�QHFHVVDU\�IRU�FRPSXWLQJRQH�VWHS�RI�WKH�DOJRULWKP� $W�WKLV�SRLQW�LQ�WKH�FRPSXWDWLRQ� WKH�ORRS�LQYDULDQW�LV�QR�ORQJHU

&RS\ULJKW F⃝� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG 5HYLVHG� $XJXVW��� ����

Page 32: Mutable Lists - Pepperdine University · Design Patterns for Data Structures Figure 6.1 &KDSWHU 0XWDEOH /LVWV 4 (a) A linked list. 9 2 7 4 (c) A circular linked list. 9 2 7 (d) A

Design Patterns for Data Structures��� 7KH�&ODVVLF�/LQNHG�,PSOHPHQWDWLRQ ���

�� 'HVWUXFWRU WHPSODWH�FODVV 7!/LVW/�7!��a/LVW/�� ^

FOHDU���`

�� FOHDU WHPSODWH�FODVV 7!YRLG /LVW/�7!��FOHDU�� ^

/1RGH�7! S�ZKLOH �BKHDG � QXOOSWU� ^

S BKHDG�BKHDG BKHDG�!BQH[W�S�!BQH[W QXOOSWU�GHOHWH S�

``

(a) Initial list.

9 2_head

p

(b) p = _head

9 2_head

p

(c) _head = _head->_next

9 2_head

p

(d) p->_next = nullptr

9 2_head

p

(e) delete p

2_head

p

)LJXUH ���� 7KH�GHVWUXFWRU�IRU�WKH /LVW/ GDWD�VWUXFWXUH� 7KH�VQDSVKRWV�VKRZ�WKHÀUVW�H[HFXWLRQ�RI�WKH�ERG\�RI�WKH�ORRS�LQ FOHDU���

WUXH� +RZHYHU� DIWHU�DGYDQFLQJ S DQG T WKH�LQYDULDQW�LV�UH�HVWDEOLVKHG� 7KDW�LV� DIWHU�VWHS�G��LW�LV�DJDLQ�WUXH�WKDW S SRLQWV�WR�WKH�QRGH�LQ UKV SUHFHGLQJ�WKH�QRGH�WR�EH�GXSOLFDWHGQH[W� DQG T SRLQWV�WR�WKH�ODVW�QRGH�LQ UHVXOW� 7KH�FRUUHFWQHVV�RI�WKH�LQYDULDQW�EHIRUHVWHS��E��JXDUDQWHHV�WKDW�WKH�SURFHVVLQJ�LQ�VWHS��E��LV�FRUUHFW�

$OJRULWKPV�ZLWK�ORRSV� HVSHFLDOO\�WKRVH�ZLWK�SRLQWHUV� FDQ�EH�GLIÀFXOW�WR�LPSOHPHQW�<RX�VKRXOG�SUDFWLFH�WU\LQJ�WR�IRUPXODWH�WKH�SURSHU�ORRS�LQYDULDQW�EHIRUH�\RX�FRGH�WKHORRS� $ SURSHU�LQYDULDQW�FDQ�JXLGH�\RXU�GHFLVLRQV�DV�\RX�GHVLJQ�\RXU�DOJRULWKP�

5HYLVHG� $XJXVW��� ���� &RS\ULJKW F⃝� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG

��� 7KH�&ODVVLF�/LQNHG�,PSOHPHQWDWLRQ ���

�� 'HVWUXFWRU WHPSODWH�FODVV 7!/LVW/�7!��a/LVW/�� ^

FOHDU���`

�� FOHDU WHPSODWH�FODVV 7!YRLG /LVW/�7!��FOHDU�� ^

/1RGH�7! S�ZKLOH �BKHDG � QXOOSWU� ^

S BKHDG�BKHDG BKHDG�!BQH[W�S�!BQH[W QXOOSWU�GHOHWH S�

``

(a) Initial list.

9 2_head

p

(b) p = _head

9 2_head

p

(c) _head = _head->_next

9 2_head

p

(d) p->_next = nullptr

9 2_head

p

(e) delete p

2_head

p

)LJXUH ���� 7KH�GHVWUXFWRU�IRU�WKH /LVW/ GDWD�VWUXFWXUH� 7KH�VQDSVKRWV�VKRZ�WKHÀUVW�H[HFXWLRQ�RI�WKH�ERG\�RI�WKH�ORRS�LQ FOHDU���

WUXH� +RZHYHU� DIWHU�DGYDQFLQJ S DQG T WKH�LQYDULDQW�LV�UH�HVWDEOLVKHG� 7KDW�LV� DIWHU�VWHS�G��LW�LV�DJDLQ�WUXH�WKDW S SRLQWV�WR�WKH�QRGH�LQ UKV SUHFHGLQJ�WKH�QRGH�WR�EH�GXSOLFDWHGQH[W� DQG T SRLQWV�WR�WKH�ODVW�QRGH�LQ UHVXOW� 7KH�FRUUHFWQHVV�RI�WKH�LQYDULDQW�EHIRUHVWHS��E��JXDUDQWHHV�WKDW�WKH�SURFHVVLQJ�LQ�VWHS��E��LV�FRUUHFW�

$OJRULWKPV�ZLWK�ORRSV� HVSHFLDOO\�WKRVH�ZLWK�SRLQWHUV� FDQ�EH�GLIÀFXOW�WR�LPSOHPHQW�<RX�VKRXOG�SUDFWLFH�WU\LQJ�WR�IRUPXODWH�WKH�SURSHU�ORRS�LQYDULDQW�EHIRUH�\RX�FRGH�WKHORRS� $ SURSHU�LQYDULDQW�FDQ�JXLGH�\RXU�GHFLVLRQV�DV�\RX�GHVLJQ�\RXU�DOJRULWKP�

5HYLVHG� $XJXVW��� ���� &RS\ULJKW F⃝� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG

��� 7KH�&ODVVLF�/LQNHG�,PSOHPHQWDWLRQ ���

�� 'HVWUXFWRU WHPSODWH�FODVV 7!/LVW/�7!��a/LVW/�� ^

FOHDU���`

�� FOHDU WHPSODWH�FODVV 7!YRLG /LVW/�7!��FOHDU�� ^

/1RGH�7! S�ZKLOH �BKHDG � QXOOSWU� ^

S BKHDG�BKHDG BKHDG�!BQH[W�S�!BQH[W QXOOSWU�GHOHWH S�

``

(a) Initial list.

9 2_head

p

(b) p = _head

9 2_head

p

(c) _head = _head->_next

9 2_head

p

(d) p->_next = nullptr

9 2_head

p

(e) delete p

2_head

p

)LJXUH ���� 7KH�GHVWUXFWRU�IRU�WKH /LVW/ GDWD�VWUXFWXUH� 7KH�VQDSVKRWV�VKRZ�WKHÀUVW�H[HFXWLRQ�RI�WKH�ERG\�RI�WKH�ORRS�LQ FOHDU���

WUXH� +RZHYHU� DIWHU�DGYDQFLQJ S DQG T WKH�LQYDULDQW�LV�UH�HVWDEOLVKHG� 7KDW�LV� DIWHU�VWHS�G��LW�LV�DJDLQ�WUXH�WKDW S SRLQWV�WR�WKH�QRGH�LQ UKV SUHFHGLQJ�WKH�QRGH�WR�EH�GXSOLFDWHGQH[W� DQG T SRLQWV�WR�WKH�ODVW�QRGH�LQ UHVXOW� 7KH�FRUUHFWQHVV�RI�WKH�LQYDULDQW�EHIRUHVWHS��E��JXDUDQWHHV�WKDW�WKH�SURFHVVLQJ�LQ�VWHS��E��LV�FRUUHFW�

$OJRULWKPV�ZLWK�ORRSV� HVSHFLDOO\�WKRVH�ZLWK�SRLQWHUV� FDQ�EH�GLIÀFXOW�WR�LPSOHPHQW�<RX�VKRXOG�SUDFWLFH�WU\LQJ�WR�IRUPXODWH�WKH�SURSHU�ORRS�LQYDULDQW�EHIRUH�\RX�FRGH�WKHORRS� $ SURSHU�LQYDULDQW�FDQ�JXLGH�\RXU�GHFLVLRQV�DV�\RX�GHVLJQ�\RXU�DOJRULWKP�

5HYLVHG� $XJXVW��� ���� &RS\ULJKW F⃝� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG

Figure 6.15

Page 33: Mutable Lists - Pepperdine University · Design Patterns for Data Structures Figure 6.1 &KDSWHU 0XWDEOH /LVWV 4 (a) A linked list. 9 2 7 4 (c) A circular linked list. 9 2 7 (d) A

Design Patterns for Data Structures Figure 6.16

remLast( ), exercise��� &KDSWHU�� 0XWDEOH�/LVWV

(a) Original list. 4 79 2myList

pq

(b) q = p. 4 79 2myList

pq

(c) p advances. 4 79 2myList

pq

(d) q = p. 4 79 2myList

pq

(e) p advances. 4 79 2myList

pq

(f) q = p. 4 79 2myList

pq

(g) p advances. 4 79 2myList

pq

(h) Remove the last node. 49 2myList

q

)LJXUH ���� 7KH�DFWLRQ�RI�PHWKRG UHP/DVW��� ,W�LOOXVWUDWHV�WKH�LQFKZRUP�FRGLQJWHFKQLTXH� ,PSOHPHQWDWLRQ�LV�OHIW�DV�DQ�H[HUFLVH�

'HVWUXFWLRQ�DQG�UHPRYDO7KHVH�PHWKRGV�PRGLI\�WKH�OLVW�GDWD�VWUXFWXUH�E\�UHPRYLQJ�RQH�RU�PRUH�HOHPHQWV�IURPWKH�OLVW� )LJXUH����� VKRZV�WKH�VSHFLÀFDWLRQ�IRU�WKLV�JURXS�RI�PHWKRGV� 7KH�GHVWUXFWRUGHDOORFDWHV�WKH�QRGHV�LQ�D�OLVW�EHIRUH�GHDOORFDWLQJ�WKH�OLVW�LWVHOI� 7KHUH�DUH�PHWKRGV�WRUHPRYH�WKH�ÀUVW�HOHPHQW�IURP�D�OLVW� WKH�ODVW�HOHPHQW�IURP�D�OLVW� DQG�WR�VHDUFK�IRU�D�YDOXHLQ�WKH�OLVW�DQG�UHPRYH�WKDW�HOHPHQW�LI�LW�H[LVWV�

)LJXUH����� VKRZV�WKH�LPSOHPHQWDWLRQ�RI�WKH�GHVWUXFWRU�IRU /LVW/��,W�FDOOV�PHWKRGFOHDU��� ZKLFK�LV�D�SXEOLF�PHPEHU�IRU�XVHUV�RI�WKH /LVW/ FODVV� 7KH�VQDSVKRWV�RQ�WKHULJKW�VLGH�RI�WKH�ÀJXUH�VKRZ�WKH�HYROXWLRQ�RI�WKH�FRPSXWDWLRQ�VWDWH�IRU�WKH�ÀUVW�H[HFXWLRQRI�WKH�ORRS�LQ FOHDU��� 7KH�VWHS�LQ�SDUW��G�

S�!BQH[W QXOOSWU�

LV�RSWLRQDO� ,I�\RX�RPLW�LW�WKH�DOJRULWKP�VWLOO�H[HFXWHV�FRUUHFWO\� +RZHYHU� WR�EH�RQ�WKH

&RS\ULJKW F⃝� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG 5HYLVHG� $XJXVW��� ����

Page 34: Mutable Lists - Pepperdine University · Design Patterns for Data Structures Figure 6.1 &KDSWHU 0XWDEOH /LVWV 4 (a) A linked list. 9 2 7 4 (c) A circular linked list. 9 2 7 (d) A

Design Patterns for Data Structures Figure 6.16

remLast( ), exercise

��� &KDSWHU�� 0XWDEOH�/LVWV

(a) Original list. 4 79 2myList

pq

(b) q = p. 4 79 2myList

pq

(c) p advances. 4 79 2myList

pq

(d) q = p. 4 79 2myList

pq

(e) p advances. 4 79 2myList

pq

(f) q = p. 4 79 2myList

pq

(g) p advances. 4 79 2myList

pq

(h) Remove the last node. 49 2myList

q

)LJXUH ���� 7KH�DFWLRQ�RI�PHWKRG UHP/DVW��� ,W�LOOXVWUDWHV�WKH�LQFKZRUP�FRGLQJWHFKQLTXH� ,PSOHPHQWDWLRQ�LV�OHIW�DV�DQ�H[HUFLVH�

'HVWUXFWLRQ�DQG�UHPRYDO7KHVH�PHWKRGV�PRGLI\�WKH�OLVW�GDWD�VWUXFWXUH�E\�UHPRYLQJ�RQH�RU�PRUH�HOHPHQWV�IURPWKH�OLVW� )LJXUH����� VKRZV�WKH�VSHFLÀFDWLRQ�IRU�WKLV�JURXS�RI�PHWKRGV� 7KH�GHVWUXFWRUGHDOORFDWHV�WKH�QRGHV�LQ�D�OLVW�EHIRUH�GHDOORFDWLQJ�WKH�OLVW�LWVHOI� 7KHUH�DUH�PHWKRGV�WRUHPRYH�WKH�ÀUVW�HOHPHQW�IURP�D�OLVW� WKH�ODVW�HOHPHQW�IURP�D�OLVW� DQG�WR�VHDUFK�IRU�D�YDOXHLQ�WKH�OLVW�DQG�UHPRYH�WKDW�HOHPHQW�LI�LW�H[LVWV�

)LJXUH����� VKRZV�WKH�LPSOHPHQWDWLRQ�RI�WKH�GHVWUXFWRU�IRU /LVW/��,W�FDOOV�PHWKRGFOHDU��� ZKLFK�LV�D�SXEOLF�PHPEHU�IRU�XVHUV�RI�WKH /LVW/ FODVV� 7KH�VQDSVKRWV�RQ�WKHULJKW�VLGH�RI�WKH�ÀJXUH�VKRZ�WKH�HYROXWLRQ�RI�WKH�FRPSXWDWLRQ�VWDWH�IRU�WKH�ÀUVW�H[HFXWLRQRI�WKH�ORRS�LQ FOHDU��� 7KH�VWHS�LQ�SDUW��G�

S�!BQH[W QXOOSWU�

LV�RSWLRQDO� ,I�\RX�RPLW�LW�WKH�DOJRULWKP�VWLOO�H[HFXWHV�FRUUHFWO\� +RZHYHU� WR�EH�RQ�WKH

&RS\ULJKW F⃝� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG 5HYLVHG� $XJXVW��� ����

Page 35: Mutable Lists - Pepperdine University · Design Patterns for Data Structures Figure 6.1 &KDSWHU 0XWDEOH /LVWV 4 (a) A linked list. 9 2 7 4 (c) A circular linked list. 9 2 7 (d) A

Design Patterns for Data Structures

Methods for manipulation

ListL

Page 36: Mutable Lists - Pepperdine University · Design Patterns for Data Structures Figure 6.1 &KDSWHU 0XWDEOH /LVWV 4 (a) A linked list. 9 2 7 4 (c) A circular linked list. 9 2 7 (d) A

Design Patterns for Data Structures Figure 6.17��� 7KH�&ODVVLF�/LQNHG�,PSOHPHQWDWLRQ ���

YRLG VHW)LUVW�7 FRQVW GDWD���� 3UH� 7KLV OLVW LV QRW HPSW\��� 3RVW� 7KH ILUVW HOHPHQW RI WKLV OLVW LV FKDQJHG WR GDWD�

YRLG FRQFDW�/LVW/�7! VXIIL[���� 3RVW� VXIIL[ LV DSSHQGHG WR WKLV OLVW��� VXIIL[ LV HPSW\ �FXW FRQFDWHQDWH� DV RSSRVHG WR FRS\ FRQFDWHQDWH��

YRLG UHYHUVH����� 3RVW� 7KLV OLVW LV UHYHUVHG�

YRLG ]LS�/LVW/�7! RWKHU���� 3RVW� 7KLV OLVW LV WKH VDPH SHUIHFW VKXIIOH RI WKLV OLVW DQG RWKHU��� VWDUWLQJ ZLWK WKH ILUVW HOHPHQW RI WKLV��� RWKHU LV WKH HPSW\ OLVW �FXW ]LS� DV RSSRVHG WR FRS\ ]LS��

/LVW/�7! XQ=LS����� 3RVW� 7KLV OLVW LV HYHU\ RWKHU HOHPHQW RI WKLV OLVW VWDUWLQJ�� ZLWK WKH ILUVW��� $ SRLQWHU WR D OLVW ZLWK HYHU\ RWKHU HOHPHQW RI WKLV OLVW�� VWDUWLQJ ZLWK WKH VHFRQG LV UHWXUQHG�

)LJXUH ���� 6SHFLÀFDWLRQV�IRU�WKH�PDQLSXODWLRQ�PHWKRGV�RI�WKH /LVW/ GDWD�VWUXFWXUH�

VDIH�VLGH�\RX�VKRXOG�DOZD\V�VHW�DQ\�OLQN�ÀHOGV�WR QXOOSWU LQ�D�QRGH�\RX�DUH�DERXW�WRGHOHWH�XQOHVV�\RX�DUH�GHVLJQLQJ�D�UHFXUVLYH�GHOHWLRQ�DOJRULWKP� $OWKRXJK�RPLWWLQJ�VWHS�G��LV�KDUPOHVV�LQ�WKLV�DOJRULWKP� LI�\RX�RPLW�LW�LQ�RWKHU�DOJRULWKPV�\RX�PLJKW�LQDGYHU�WHQWO\�GHDOORFDWH�QRW�RQO\�WKH�QRGH�WR�ZKLFK S SRLQWV�EXW�DOVR�UHFXUVLYHO\�GHOHWH�WKH�QRGHWR�ZKLFK�WKH�OLQN�ÀHOG�RI S SRLQWV�

7KH�VWHS�LQ�SDUW��H��LOOXVWUDWHV�JDUEDJH�FROOHFWLRQ�WKDW�PXVW�EH�PDQDJHG�H[SOLFLWO\E\�WKH�&���SURJUDPPHU� ,I�\RX�RPLW�WKLV�VWHS�WKH�SURJUDP�ZLOO�DSSHDU�WR�H[HFXWH�FRU�UHFWO\� +RZHYHU� LW�ZRXOG�EH�DQ�H[DPSOH�RI�D�PHPRU\�OHDN�DV�GHVFULEHG�LQ�6HFWLRQ���� 3RLQWHU�7\SHV�RQ�SDJH���� 7KH�VHFRQG�WLPH�WKURXJK�WKH�ORRS S ZRXOG�SRLQW�WR�WKHQRGH�FRQWDLQLQJ��� 7KH�QRGH�FRQWDLQLQJ���ZRXOG�KDYH�QR�SRLQWHUV�SRLQWLQJ�WR�LW� VR�LWZRXOG�UHPDLQ�DOORFDWHG�RQ�WKH�KHDS�ZLWK�QR�SRVVLELOLW\�RI�EHLQJ�GHDOORFDWHG�DV�ORQJ�DVWKH�SURJUDP�FRQWLQXHV�WR�H[HFXWH� ,I�WKH�SURJUDP�ZHUH�DFWLYH�RYHU�D�ORQJ�SHULRG�RI�WLPHLWV�KHDS�FRXOG�JUDGXDOO\�JHW�FORJJHG�XS�ZLWK�DOORFDWHG�EXW�XQXVHG�QRGHV� WKH�SURJUDPFRXOG�SRVVLEO\�EHFRPH�VOXJJLVK� DQG�LW�FRXOG�HYHQWXDOO\�IUHH]H�XS�

,PSOHPHQWDWLRQ�RI�PHWKRG UHP)LUVW�� LV�DQ�H[HUFLVH� 1RW�RQO\�GRHV�LW�UHPRYHWKH�ÀUVW�QRGH�LQ�WKH�OLVW� LW�UHWXUQV�WKH�YDOXH�WKDW�ZDV�VWRUHG�LQ�WKH BGDWD SDUW�RI�WKHQRGH� 7R�LPSOHPHQW�WKH�PHWKRG�\RX�VKRXOG�VDYH�WKH�YDOXH�LQ�D�WHPSRUDU\�YDULDEOH� VD\UHVXOW� RI�W\SH 7��7KHQ� DIWHU�\RX�GHOHWH�WKH�QRGH� \RX�FDQ�UHWXUQ UHVXOW�

,PSOHPHQWDWLRQ�RI�PHWKRG UHP/DVW�� LV�DOVR�DQ�H[HUFLVH� $V�ZLWK DSSHQG���\RX�PXVW�DGYDQFH�D�SRLQWHU�GRZQ�WKH�OLVW�EHIRUH�\RX�UHPRYH�WKH�ODVW�HOHPHQW� +RZHYHU�WKHUH�LV�DQ�DGGLWLRQDO�FRPSOLFDWLRQ�ZLWK UHP/DVW��� <RX�QRW�RQO\�QHHG�D�SRLQWHU�WR

5HYLVHG� $XJXVW��� ���� &RS\ULJKW F⃝� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG

Page 37: Mutable Lists - Pepperdine University · Design Patterns for Data Structures Figure 6.1 &KDSWHU 0XWDEOH /LVWV 4 (a) A linked list. 9 2 7 4 (c) A circular linked list. 9 2 7 (d) A

Design Patterns for Data Structures Figure 6.18

��� &KDSWHU�� 0XWDEOH�/LVWV

�� VHW)LUVW WHPSODWH�FODVV 7!YRLG /LVW/�7!��VHW)LUVW�7 FRQVW GDWD� ^

LI �BKHDG QXOOSWU� ^FHUU �� ¯VHW)LUVW SUHFRQGLWLRQ YLRODWHG� ¯

�� ¯&DQQRW VHW ILUVW RQ DQ HPSW\ OLVW�¯�� HQGO�

WKURZ ���`BKHDG�!BGDWD GDWD�

`

)LJXUH ���� ,PSOHPHQWDWLRQ�RI�PHWKRG VHW)LUVW�� IRU�WKH /LVW/ GDWD�VWUXFWXUH�

WKH�ODVW�QRGH� \RX�DOVR�QHHG�D�SRLQWHU�WR�WKH�SHQXOWLPDWH�QRGH�EHFDXVH�\RX�PXVW�VHW�WKDWQRGH·V BQH[W ÀHOG�WR QXOOSWU�

)LJXUH����� VKRZV�WKH�DFWLRQ�RI�PHWKRG UHP/DVW��� ,W�XVHV�ZKDW�LV�NQRZQ�DV�WKHLQFKZRUP�WHFKQLTXH� $V�XVXDO� SRLQWHU S DGYDQFHV�WKURXJK�WKH�OLVW�RQH�QRGH�DW�D�WLPHXQWLO�LW�JHWV�WR�WKH�ODVW�QRGH� $Q�DGGLWLRQDO�SRLQWHU T IROORZV�S�GRZQ�WKH�OLVW� 7KH�SURJUHVVRI S DQG T LV�OLNH�DQ�LQFKZRUP� ZKR�VWHSV�ZLWK�KLV�KLQG�IHHW�UDLVLQJ�KLV�PLGVHFWLRQ�DQGWKHQ�VWHSV�ZLWK�KLV�IURQW�IHHW�ÁDWWHQLQJ�KLV�PLGVHFWLRQ� 7KH�ORRS�LQYDULDQW�LV! T SRLQWV�WR�WKH�QRGH�SUHYLRXV�WR�WKH�QRGH�WR�ZKLFK S SRLQWV� LI�WKHUH�LV�VXFK�D�QRGH�<RX�FDQ�VHH�WKDW�WKH�LQYDULDQW�LV�QRW�WUXH�DW�VWHS��G��LQ�WKH�ÀJXUH� +RZHYHU� LW�LV�WUXH�DWVWHS��H��DQG�DW�HDFK�VWHS�MXVW�EHIRUH�H[HFXWLRQ�RI�WKH�ORRS�ERG\�

7KH�ODVW�PHWKRG�LQ�WKLV�JURXS�LV UHPRYH�� DQG�LV�DOVR�DQ�H[HUFLVH� ,W�LV�VLPLODU�WRUHP/DVW�� ZLWK�WKH�LQFKZRUP�WHFKQLTXH�H[FHSW�WKDW�\RX�VWRS�ZKHQ�\RX�UHDFK�D�QRGHKDYLQJ�WKH�VDPH BGDWD ÀHOG�DV GDWD LQVWHDG�RI�VWRSSLQJ�ZKHQ�\RX�UHDFK�WKH�HQG�RI�WKHOLVW� $OVR� LQVWHDG�RI�VHWWLQJ�WKH BQH[W ÀHOG�RI�WKH�QRGH�WR�ZKLFK T SRLQWV�WR QXOOSWU�\RX�PXVW�VHW�LW�WR�SRLQW�WKH�QRGH�WR�ZKLFK S�!BQH[W SRLQWV�

0DQLSXODWLRQ7KHVH�PHWKRGV�DVVXPH�RQH�RU�WZR�OLVWV�KDYH�EHHQ�SUHYLRXVO\�LQVWDQWLDWHG�DQG�PDQLSXODWHWKHP� )LJXUH����� VKRZV�WKH�VSHFLÀFDWLRQ�IRU�WKLV�JURXS�RI�PHWKRGV� 7KH\�VHW�WKH�ÀUVWHOHPHQW�WR�D�JLYHQ�YDOXH� FRQFDWHQDWH�WZR�OLVWV� UHYHUVH�WKH�RUGHU�RI�WKH�HOHPHQWV�LQ�DOLVW� ]LS�WZR�OLVWV�WRJHWKHU� DQG�XQ]LS�D�VLQJOH�OLVW�SURGXFLQJ�WZR�OLVWV�

)LJXUH����� VKRZV�WKH�LPSOHPHQWDWLRQ�RI VHW)LUVW��� 0HWKRG VHW)LUVW�� KDVD�SUHFRQGLWLRQ�WKDW�WKH�OLVW�KDV�DW�OHDVW�RQH�HOHPHQW�DQG�LPSOHPHQWV�WKH�SUHFRQGLWLRQDFFRUGLQJO\� $Q�H[DPSOH�RI�LWV�XVH�LV

P\/LVW�VHW)LUVW����

ZKLFK�VHWV�WKH BGDWD ÀHOG�LQ�WKH�ÀUVW�QRGH�WR����0HWKRG FRQFDW�� LV�DQ�H[HUFLVH� ,WV�IRUPDO�SDUDPHWHU�LV VXIIL[� ZKLFK�LV�DS�

SHQGHG�WR WKLV OLVW� )LJXUH����� VKRZV�EHIRUH�DQG�DIWHU�VQDSVKRWV�ZKHQ

&RS\ULJKW F⃝� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG 5HYLVHG� $XJXVW��� ����

Page 38: Mutable Lists - Pepperdine University · Design Patterns for Data Structures Figure 6.1 &KDSWHU 0XWDEOH /LVWV 4 (a) A linked list. 9 2 7 4 (c) A circular linked list. 9 2 7 (d) A

Design Patterns for Data Structures Figure 6.19

concat( ), exercise

��� 7KH�&ODVVLF�/LQNHG�,PSOHPHQWDWLRQ ���

(b) Final lists. 4 79 2

myList

yourList

83 5

(a) Initial lists. 4 79 2

myList

yourList

83 5

)LJXUH ���� 7KH�DFWLRQ�RI�PHWKRG FRQFDW�� IRU�WKH /LVW/ GDWD�VWUXFWXUH� ,PSOH�PHQWDWLRQ�LV�OHIW�DV�DQ�H[HUFLVH�

P\/LVW�FRQFDW�\RXU/LVW�

H[HFXWHV� $FWXDO�SDUDPHWHU \RXU/LVW FRUUHVSRQGV�WR�IRUPDO�SDUDPHWHU VXIIL[� DQGP\/LVW FRUUHVSRQGV�WR WKLV�

8QOLNH�ZLWK�WKH�DVVLJQPHQW�RSHUDWRU� QR�QRGHV�DUH�FRSLHG�RU�DOORFDWHG�ZLWK�WKH QHZRSHUDWRU� 1RU�DUH�DQ\�QRGHV�GHDOORFDWHG�ZLWK�WKH GHOHWH RSHUDWRU� $OO�QRGHV�DUH�UHF\�FOHG� 7KH�DOJRULWKP�VLPSO\�ÀQGV�WKH�ODVW�QRGH�RI WKLV OLVW� VHWV�LWV BQH[W ÀHOG�WR�SRLQWWR�WKH�ÀUVW�QRGH�RI VXIIL[� DQG�JLYHV QXOOSWU WR�WKH�KHDG�RI VXIIL[� <RX�FDQ�VHHWKDW�WKH�H[HFXWLRQ�WLPH�LVΘ(m) ZKHUH m LV�WKH�QXPEHU�RI�HOHPHQWV�LQ WKLV OLVW�

0HWKRG UHYHUVH�� UHYHUVHV�WKH�YDOXHV�LQ�D�OLVW� ,I P\/LVW KDV�YDOXHV���� �� �� �����DQG�\RX�H[HFXWH

P\/LVW�UHYHUVH��

WKHQ P\/LVW ZLOO�KDYH�YDOXHV���� �� �� �� ��� 2QH�VLPSOH�EXW�LQHIÀFLHQW�ZD\�WR�UHYHUVHWKH�OLVW�LV�WR�H[HFXWH UHP)LUVW�� LQ�D�ORRS�UHPRYLQJ�DOO�WKH�YDOXHV�IURP�WKH�RULJLQDOOLVW� ,Q�WKH�ERG\�RI�WKH�ORRS� SUHSHQG�WKH�YDOXH�UHPRYHG�WR�D�WHPSRUDU\�OLVW� ZKLFK� DWORRS�WHUPLQDWLRQV�FRQWDLQ�WKH�RULJLQDO�YDOXHV�RI�WKH�OLVW�EXW�LQ�UHYHUVH�RUGHU�

7KH�WLPH�WR�H[HFXWH�WKH�DERYH�DOJRULWKP�LVΘ(n) ZKHUH n LV�WKH�QXPEHU�RI�HOHPHQWVLQ�WKH�OLVW�EHFDXVH�WKH�ORRS�H[HFXWHV n WLPHV� ,W�LV�REYLRXV�WKDW�QR�DOJRULWKP�FDQ�GREHWWHU�WKDQΘ(n) EHFDXVH�HYHU\�HOHPHQW�LQ�WKH�OLVW�PXVW�EH�SURFHVVHG�DW�OHDVW�RQH�WLPH�WRUHYHUVH�WKHP�DOO�

7KH�UHDVRQ�IRU�WKH�LQHIÀFLHQF\�LV�WKDW UHP)LUVW�� GHDOORFDWHV�D�QRGH�IURP�WKHKHDS�DQG SUHSHQG�� DOORFDWHV�D�QRGH�IURP�WKH�KHDS�ZLWK�WKH�VDPH�YDOXH� <RX�FDQDYRLG�WKH�GHDOORFDWLRQ�IURP�WKH�KHDS�E\�XQOLQNLQJ�WKH�ÀUVW�QRGH�IURP�WKH�RULJLQDO�OLVWDQG�DYRLG�WKH�DOORFDWLRQ�IURP�WKH�KHDS�E\�OLQNLQJ�WKH�VDPH�QRGH�WR�WKH�WHPSRUDU\�OLVW�7KH�UHVXOWLQJ�DOJRULWKP�LV�VWLOOΘ(n)� EXW�WKH�FRQVWDQW�FRHIÀFLHQW�RI n LV�VPDOOHU�

)LJXUH����� VKRZV�WKH�DFWLRQ�RI UHYHUVH XVLQJ�WKLV�WHFKQLTXH� 3DUW��D��VKRZV�WKHRULJLQDO�OLVW� 3DUW��E��VKRZV�WKH�VWDWH�RI�WKH�FRPSXWDWLRQ�DIWHU�WZR�H[HFXWLRQV�RI�WKHORRS� /RFDO�YDULDEOH S5HYHUVH LV�D�SRLQWHU�WR�WKH�ÀUVW�QRGH�RI�WKH�WHPSRUDU\�OLVW� 7KHGHVFULSWLRQV�RI�WKH�WZR�WHPSRUDU\�SRLQWHUV�LQ�WKH�ÀJXUH�DUH�WKH�WZR�SDUWV�RI�WKH�ORRSLQYDULDQW�IRU�D�OLVW�RI n HOHPHQWV�

5HYLVHG� $XJXVW��� ���� &RS\ULJKW F⃝� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG

Page 39: Mutable Lists - Pepperdine University · Design Patterns for Data Structures Figure 6.1 &KDSWHU 0XWDEOH /LVWV 4 (a) A linked list. 9 2 7 4 (c) A circular linked list. 9 2 7 (d) A

Design Patterns for Data Structures Figure 6.20

reverse( ), exercise

��� &KDSWHU�� 0XWDEOH�/LVWV

(a) Initial list. 4 79 2_head 3

pReverse pRest

(b) After two executions of the loop.

4 79 2_head 3

pReverse pRest

(c) After three executions of the loop.

4 79 2_head 3

(d) Final list. 4 79 2_head 3

)LJXUH ���� 7KH�DFWLRQ�RI�PHWKRG UHYHUVH�� IRU�WKH /LVW/ GDWD�VWUXFWXUH� ,PSOH�PHQWDWLRQ�LV�OHIW�DV�DQ�H[HUFLVH�

! S5HVW SRLQWV�WR�WKH�ÀUVW�QRGH�LQ�D�OLVW�RI�WKH�ODVW m YDOXHV�RI�WKH�RULJLQDO�OLVW�! S5HYHUVH SRLQWV�WR�WKH�ÀUVW�QRGH�RI�D�OLVW�RI�WKH�ÀUVW n−m YDOXHV�RI�WKH�RULJLQDO�OLVW

LQ�UHYHUVH�RUGHU�)RU�H[DPSOH� SDUW��D��RI�WKH�ÀJXUH�VKRZV�DQ�RULJLQDO�OLVW�RI���� �� �� �� ��� ,Q�SDUW��E��RIWKH�ÀJXUH�! S5HVW SRLQWV�WR���� �� ��� ZKLFK�LV�D�OLVW�RI�WKH�ODVW�WKUHH�YDOXHV�RI�WKH�RULJLQDO�OLVW�! S5HYHUVH SRLQWV�WR���� ��� ZKLFK�LV�D�OLVW�RI�WKH�ÀUVW�WZR�YDOXHV�RI�WKH�RULJLQDO�OLVW

LQ�UHYHUVH�RUGHU�3DUW��F��VKRZV�WKDW�RQH�PRUH�H[HFXWLRQ�RI�WKH�ORRS�PDLQWDLQV�WKH�LQYDULDQW� ZLWK S5HVWSRLQWLQJ�WR���� ���DQG S5HYHUVH SRLQWLQJ�WR���� �� ���

,PSOHPHQWDWLRQ�RI UHYHUVH�� LV�DQ�H[HUFLVH� 7KH�LQLWLDOL]DWLRQ�FRGH�VKRXOG�HVWDE�OLVK�WKH�ORRS�LQYDULDQW�EHIRUH�WKH�ORRS�H[HFXWHV�WKH�ÀUVW�WLPH� 7KH�FRGH�LQ�WKH�ERG\�RIWKH�ORRS�VKRXOG�XQOLQN�WKH�ÀUVW�QRGH�IURP S5HVW� SUHSHQG�LW�WR S5HYHUVH� DQG�WKHQUH�HVWDEOLVK�WKH�ORRS�LQYDULDQW�

7R�]LS�WZR�OLVWV�WRJHWKHU�LV�WR�SHUIRUP�D�SHUIHFW�VKXIÁH�DV�LI�HDFK�YDOXH�LQ�WKH�WZROLVWV�DUH�FRQWDLQHG�LQ�WZR�VWDFNV�RI�FDUGV� 7R�VKXIÁH�WZR�VWDFNV�RI�FDUGV�\RX�FRPELQHWKHP�E\�WDNLQJ�WKH�ÀUVW�FDUG�IURP�WKH�ÀUVW�VWDFN� WKH�ÀUVW�FDUG�IURP�WKH�VHFRQG�VWDFN�WKHVHFRQG�FDUG�IURP�WKH�ÀUVW�VWDFN� WKH�VHFRQG�FDUG�IURP�WKH�VHFRQG�VWDFN� DQG�VR�RQ� )LJXUH���� VKRZV�WKH�DFWLRQ�RI

P\/LVW�]LS�\RXU/LVW�

&RS\ULJKW F⃝� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG 5HYLVHG� $XJXVW��� ����

��� &KDSWHU�� 0XWDEOH�/LVWV

(a) Initial list. 4 79 2_head 3

pReverse pRest

(b) After two executions of the loop.

4 79 2_head 3

pReverse pRest

(c) After three executions of the loop.

4 79 2_head 3

(d) Final list. 4 79 2_head 3

)LJXUH ���� 7KH�DFWLRQ�RI�PHWKRG UHYHUVH�� IRU�WKH /LVW/ GDWD�VWUXFWXUH� ,PSOH�PHQWDWLRQ�LV�OHIW�DV�DQ�H[HUFLVH�

! S5HVW SRLQWV�WR�WKH�ÀUVW�QRGH�LQ�D�OLVW�RI�WKH�ODVW m YDOXHV�RI�WKH�RULJLQDO�OLVW�! S5HYHUVH SRLQWV�WR�WKH�ÀUVW�QRGH�RI�D�OLVW�RI�WKH�ÀUVW n−m YDOXHV�RI�WKH�RULJLQDO�OLVW

LQ�UHYHUVH�RUGHU�)RU�H[DPSOH� SDUW��D��RI�WKH�ÀJXUH�VKRZV�DQ�RULJLQDO�OLVW�RI���� �� �� �� ��� ,Q�SDUW��E��RIWKH�ÀJXUH�! S5HVW SRLQWV�WR���� �� ��� ZKLFK�LV�D�OLVW�RI�WKH�ODVW�WKUHH�YDOXHV�RI�WKH�RULJLQDO�OLVW�! S5HYHUVH SRLQWV�WR���� ��� ZKLFK�LV�D�OLVW�RI�WKH�ÀUVW�WZR�YDOXHV�RI�WKH�RULJLQDO�OLVW

LQ�UHYHUVH�RUGHU�3DUW��F��VKRZV�WKDW�RQH�PRUH�H[HFXWLRQ�RI�WKH�ORRS�PDLQWDLQV�WKH�LQYDULDQW� ZLWK S5HVWSRLQWLQJ�WR���� ���DQG S5HYHUVH SRLQWLQJ�WR���� �� ���

,PSOHPHQWDWLRQ�RI UHYHUVH�� LV�DQ�H[HUFLVH� 7KH�LQLWLDOL]DWLRQ�FRGH�VKRXOG�HVWDE�OLVK�WKH�ORRS�LQYDULDQW�EHIRUH�WKH�ORRS�H[HFXWHV�WKH�ÀUVW�WLPH� 7KH�FRGH�LQ�WKH�ERG\�RIWKH�ORRS�VKRXOG�XQOLQN�WKH�ÀUVW�QRGH�IURP S5HVW� SUHSHQG�LW�WR S5HYHUVH� DQG�WKHQUH�HVWDEOLVK�WKH�ORRS�LQYDULDQW�

7R�]LS�WZR�OLVWV�WRJHWKHU�LV�WR�SHUIRUP�D�SHUIHFW�VKXIÁH�DV�LI�HDFK�YDOXH�LQ�WKH�WZROLVWV�DUH�FRQWDLQHG�LQ�WZR�VWDFNV�RI�FDUGV� 7R�VKXIÁH�WZR�VWDFNV�RI�FDUGV�\RX�FRPELQHWKHP�E\�WDNLQJ�WKH�ÀUVW�FDUG�IURP�WKH�ÀUVW�VWDFN� WKH�ÀUVW�FDUG�IURP�WKH�VHFRQG�VWDFN�WKHVHFRQG�FDUG�IURP�WKH�ÀUVW�VWDFN� WKH�VHFRQG�FDUG�IURP�WKH�VHFRQG�VWDFN� DQG�VR�RQ� )LJXUH���� VKRZV�WKH�DFWLRQ�RI

P\/LVW�]LS�\RXU/LVW�

&RS\ULJKW F⃝� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG 5HYLVHG� $XJXVW��� ����

Page 40: Mutable Lists - Pepperdine University · Design Patterns for Data Structures Figure 6.1 &KDSWHU 0XWDEOH /LVWV 4 (a) A linked list. 9 2 7 4 (c) A circular linked list. 9 2 7 (d) A

Design Patterns for Data Structures

reverse( ), exercise

��� &KDSWHU�� 0XWDEOH�/LVWV

(a) Initial list. 4 79 2_head 3

pReverse pRest

(b) After two executions of the loop.

4 79 2_head 3

pReverse pRest

(c) After three executions of the loop.

4 79 2_head 3

(d) Final list. 4 79 2_head 3

)LJXUH ���� 7KH�DFWLRQ�RI�PHWKRG UHYHUVH�� IRU�WKH /LVW/ GDWD�VWUXFWXUH� ,PSOH�PHQWDWLRQ�LV�OHIW�DV�DQ�H[HUFLVH�

! S5HVW SRLQWV�WR�WKH�ÀUVW�QRGH�LQ�D�OLVW�RI�WKH�ODVW m YDOXHV�RI�WKH�RULJLQDO�OLVW�! S5HYHUVH SRLQWV�WR�WKH�ÀUVW�QRGH�RI�D�OLVW�RI�WKH�ÀUVW n−m YDOXHV�RI�WKH�RULJLQDO�OLVW

LQ�UHYHUVH�RUGHU�)RU�H[DPSOH� SDUW��D��RI�WKH�ÀJXUH�VKRZV�DQ�RULJLQDO�OLVW�RI���� �� �� �� ��� ,Q�SDUW��E��RIWKH�ÀJXUH�! S5HVW SRLQWV�WR���� �� ��� ZKLFK�LV�D�OLVW�RI�WKH�ODVW�WKUHH�YDOXHV�RI�WKH�RULJLQDO�OLVW�! S5HYHUVH SRLQWV�WR���� ��� ZKLFK�LV�D�OLVW�RI�WKH�ÀUVW�WZR�YDOXHV�RI�WKH�RULJLQDO�OLVW

LQ�UHYHUVH�RUGHU�3DUW��F��VKRZV�WKDW�RQH�PRUH�H[HFXWLRQ�RI�WKH�ORRS�PDLQWDLQV�WKH�LQYDULDQW� ZLWK S5HVWSRLQWLQJ�WR���� ���DQG S5HYHUVH SRLQWLQJ�WR���� �� ���

,PSOHPHQWDWLRQ�RI UHYHUVH�� LV�DQ�H[HUFLVH� 7KH�LQLWLDOL]DWLRQ�FRGH�VKRXOG�HVWDE�OLVK�WKH�ORRS�LQYDULDQW�EHIRUH�WKH�ORRS�H[HFXWHV�WKH�ÀUVW�WLPH� 7KH�FRGH�LQ�WKH�ERG\�RIWKH�ORRS�VKRXOG�XQOLQN�WKH�ÀUVW�QRGH�IURP S5HVW� SUHSHQG�LW�WR S5HYHUVH� DQG�WKHQUH�HVWDEOLVK�WKH�ORRS�LQYDULDQW�

7R�]LS�WZR�OLVWV�WRJHWKHU�LV�WR�SHUIRUP�D�SHUIHFW�VKXIÁH�DV�LI�HDFK�YDOXH�LQ�WKH�WZROLVWV�DUH�FRQWDLQHG�LQ�WZR�VWDFNV�RI�FDUGV� 7R�VKXIÁH�WZR�VWDFNV�RI�FDUGV�\RX�FRPELQHWKHP�E\�WDNLQJ�WKH�ÀUVW�FDUG�IURP�WKH�ÀUVW�VWDFN� WKH�ÀUVW�FDUG�IURP�WKH�VHFRQG�VWDFN�WKHVHFRQG�FDUG�IURP�WKH�ÀUVW�VWDFN� WKH�VHFRQG�FDUG�IURP�WKH�VHFRQG�VWDFN� DQG�VR�RQ� )LJXUH���� VKRZV�WKH�DFWLRQ�RI

P\/LVW�]LS�\RXU/LVW�

&RS\ULJKW F⃝� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG 5HYLVHG� $XJXVW��� ����

��� &KDSWHU�� 0XWDEOH�/LVWV

(a) Initial list. 4 79 2_head 3

pReverse pRest

(b) After two executions of the loop.

4 79 2_head 3

pReverse pRest

(c) After three executions of the loop.

4 79 2_head 3

(d) Final list. 4 79 2_head 3

)LJXUH ���� 7KH�DFWLRQ�RI�PHWKRG UHYHUVH�� IRU�WKH /LVW/ GDWD�VWUXFWXUH� ,PSOH�PHQWDWLRQ�LV�OHIW�DV�DQ�H[HUFLVH�

! S5HVW SRLQWV�WR�WKH�ÀUVW�QRGH�LQ�D�OLVW�RI�WKH�ODVW m YDOXHV�RI�WKH�RULJLQDO�OLVW�! S5HYHUVH SRLQWV�WR�WKH�ÀUVW�QRGH�RI�D�OLVW�RI�WKH�ÀUVW n−m YDOXHV�RI�WKH�RULJLQDO�OLVW

LQ�UHYHUVH�RUGHU�)RU�H[DPSOH� SDUW��D��RI�WKH�ÀJXUH�VKRZV�DQ�RULJLQDO�OLVW�RI���� �� �� �� ��� ,Q�SDUW��E��RIWKH�ÀJXUH�! S5HVW SRLQWV�WR���� �� ��� ZKLFK�LV�D�OLVW�RI�WKH�ODVW�WKUHH�YDOXHV�RI�WKH�RULJLQDO�OLVW�! S5HYHUVH SRLQWV�WR���� ��� ZKLFK�LV�D�OLVW�RI�WKH�ÀUVW�WZR�YDOXHV�RI�WKH�RULJLQDO�OLVW

LQ�UHYHUVH�RUGHU�3DUW��F��VKRZV�WKDW�RQH�PRUH�H[HFXWLRQ�RI�WKH�ORRS�PDLQWDLQV�WKH�LQYDULDQW� ZLWK S5HVWSRLQWLQJ�WR���� ���DQG S5HYHUVH SRLQWLQJ�WR���� �� ���

,PSOHPHQWDWLRQ�RI UHYHUVH�� LV�DQ�H[HUFLVH� 7KH�LQLWLDOL]DWLRQ�FRGH�VKRXOG�HVWDE�OLVK�WKH�ORRS�LQYDULDQW�EHIRUH�WKH�ORRS�H[HFXWHV�WKH�ÀUVW�WLPH� 7KH�FRGH�LQ�WKH�ERG\�RIWKH�ORRS�VKRXOG�XQOLQN�WKH�ÀUVW�QRGH�IURP S5HVW� SUHSHQG�LW�WR S5HYHUVH� DQG�WKHQUH�HVWDEOLVK�WKH�ORRS�LQYDULDQW�

7R�]LS�WZR�OLVWV�WRJHWKHU�LV�WR�SHUIRUP�D�SHUIHFW�VKXIÁH�DV�LI�HDFK�YDOXH�LQ�WKH�WZROLVWV�DUH�FRQWDLQHG�LQ�WZR�VWDFNV�RI�FDUGV� 7R�VKXIÁH�WZR�VWDFNV�RI�FDUGV�\RX�FRPELQHWKHP�E\�WDNLQJ�WKH�ÀUVW�FDUG�IURP�WKH�ÀUVW�VWDFN� WKH�ÀUVW�FDUG�IURP�WKH�VHFRQG�VWDFN�WKHVHFRQG�FDUG�IURP�WKH�ÀUVW�VWDFN� WKH�VHFRQG�FDUG�IURP�WKH�VHFRQG�VWDFN� DQG�VR�RQ� )LJXUH���� VKRZV�WKH�DFWLRQ�RI

P\/LVW�]LS�\RXU/LVW�

&RS\ULJKW F⃝� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG 5HYLVHG� $XJXVW��� ����

Figure 6.20

Page 41: Mutable Lists - Pepperdine University · Design Patterns for Data Structures Figure 6.1 &KDSWHU 0XWDEOH /LVWV 4 (a) A linked list. 9 2 7 4 (c) A circular linked list. 9 2 7 (d) A

Design Patterns for Data Structures Figure 6.21

zip( ), exercise��� 7KH�&ODVVLF�/LQNHG�,PSOHPHQWDWLRQ ���

(a) Initial lists. 3 41 2this 5

86 7other

q

p

(b) After one execution of the loop.

3 41 2this 5

86 7other

q

p

(c) After two executions of the loop.

3 41 2this 5

86 7other

(d) Final lists. 3 41 2this 5

86 7other

)LJXUH ���� 7KH�DFWLRQ�RI�PHWKRG ]LS�� IRU�WKH /LVW/ GDWD�VWUXFWXUH� ,PSOHPHQ�WDWLRQ�LV�OHIW�DV�DQ�H[HUFLVH�

ZKHQ P\/LVW KDV�YDOXHV���� �� �� �� ���DQG \RXU/LVW KDV�YDOXHV���� �� ��� $IWHU�WKH]LS P\/LVW KDV�YDOXHV���� �� �� �� �� �� �� ���DQG \RXU/LVW LV�HPSW\�

,Q�WKH�DERYH�H[DPSOH� P\/LVW KDV�WZR�PRUH�YDOXHV�WKDQ \RXU/LVW� 7KH�DOJRULWKPPDNHV�QR�DVVXPSWLRQ�DERXW�WKH�OHQJWKV�RI�WKH�WZR�OLVWV� :QHQ�SURFHVVLQJ�JHWV�WR�WKH�HQGRI�RQH�OLVW�WKH�UHPDLQLQJ�PHPEHUV�RI�WKH�RWKHU�OLVW�DUH�WKH�ODVW�PHPEHUV�RI�WKH�]LSSHGOLVW� )RU�H[DPSOH� LI P\/LVW KDV�YDOXHV���� ���DQG \RXU/LVW KDV�YDOXHV���� �� �� �� ���� ���WKH�]LSSHG�OLVW�VKRXOG�EH���� �� �� �� �� �� �� �� ���

)LJXUH������E��VKRZV�WKH�VWDWH�RI�WKH�FRPSXWDWLRQ�DIWHU�RQH�H[HFXWLRQ�RI�WKH�ORRS�6XSSRVH WKLV OLVW�KDV n HOHPHQWV� /RFDO�YDULDEOHV S DQG T PDLQWDLQ�WKH�ORRS�LQYDULDQW�ZKLFK�KDV�WKUHH�SDUWV�

! S SRLQWV�WR�WKH�ÀUVW�QRGH�LQ�D�OLVW�RI�WKH�ODVW m YDOXHV�RI�WKLV�OLVW�

! 7KH�ÀUVW 2 · (n−m) LWHPV�RI WKLV OLVW�DUH�WKH�ÀUVW (n−m) LWHPV�RI WKLV DQG RWKHU]LSSHG�

! T SRLQWV�WR�WKH (n−m+1)WK�YDOXH�RI�WKH�RULJLQDO�RWKHU�OLVW�

5HYLVHG� $XJXVW��� ���� &RS\ULJKW F⃝� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG

��� 7KH�&ODVVLF�/LQNHG�,PSOHPHQWDWLRQ ���

(a) Initial lists. 3 41 2this 5

86 7other

q

p

(b) After one execution of the loop.

3 41 2this 5

86 7other

q

p

(c) After two executions of the loop.

3 41 2this 5

86 7other

(d) Final lists. 3 41 2this 5

86 7other

)LJXUH ���� 7KH�DFWLRQ�RI�PHWKRG ]LS�� IRU�WKH /LVW/ GDWD�VWUXFWXUH� ,PSOHPHQ�WDWLRQ�LV�OHIW�DV�DQ�H[HUFLVH�

ZKHQ P\/LVW KDV�YDOXHV���� �� �� �� ���DQG \RXU/LVW KDV�YDOXHV���� �� ��� $IWHU�WKH]LS P\/LVW KDV�YDOXHV���� �� �� �� �� �� �� ���DQG \RXU/LVW LV�HPSW\�

,Q�WKH�DERYH�H[DPSOH� P\/LVW KDV�WZR�PRUH�YDOXHV�WKDQ \RXU/LVW� 7KH�DOJRULWKPPDNHV�QR�DVVXPSWLRQ�DERXW�WKH�OHQJWKV�RI�WKH�WZR�OLVWV� :QHQ�SURFHVVLQJ�JHWV�WR�WKH�HQGRI�RQH�OLVW�WKH�UHPDLQLQJ�PHPEHUV�RI�WKH�RWKHU�OLVW�DUH�WKH�ODVW�PHPEHUV�RI�WKH�]LSSHGOLVW� )RU�H[DPSOH� LI P\/LVW KDV�YDOXHV���� ���DQG \RXU/LVW KDV�YDOXHV���� �� �� �� ���� ���WKH�]LSSHG�OLVW�VKRXOG�EH���� �� �� �� �� �� �� �� ���

)LJXUH������E��VKRZV�WKH�VWDWH�RI�WKH�FRPSXWDWLRQ�DIWHU�RQH�H[HFXWLRQ�RI�WKH�ORRS�6XSSRVH WKLV OLVW�KDV n HOHPHQWV� /RFDO�YDULDEOHV S DQG T PDLQWDLQ�WKH�ORRS�LQYDULDQW�ZKLFK�KDV�WKUHH�SDUWV�

! S SRLQWV�WR�WKH�ÀUVW�QRGH�LQ�D�OLVW�RI�WKH�ODVW m YDOXHV�RI�WKLV�OLVW�

! 7KH�ÀUVW 2 · (n−m) LWHPV�RI WKLV OLVW�DUH�WKH�ÀUVW (n−m) LWHPV�RI WKLV DQG RWKHU]LSSHG�

! T SRLQWV�WR�WKH (n−m+1)WK�YDOXH�RI�WKH�RULJLQDO�RWKHU�OLVW�

5HYLVHG� $XJXVW��� ���� &RS\ULJKW F⃝� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG

Page 42: Mutable Lists - Pepperdine University · Design Patterns for Data Structures Figure 6.1 &KDSWHU 0XWDEOH /LVWV 4 (a) A linked list. 9 2 7 4 (c) A circular linked list. 9 2 7 (d) A

Design Patterns for Data Structures Figure 6.21

zip( ), exercise

��� 7KH�&ODVVLF�/LQNHG�,PSOHPHQWDWLRQ ���

(a) Initial lists. 3 41 2this 5

86 7other

q

p

(b) After one execution of the loop.

3 41 2this 5

86 7other

q

p

(c) After two executions of the loop.

3 41 2this 5

86 7other

(d) Final lists. 3 41 2this 5

86 7other

)LJXUH ���� 7KH�DFWLRQ�RI�PHWKRG ]LS�� IRU�WKH /LVW/ GDWD�VWUXFWXUH� ,PSOHPHQ�WDWLRQ�LV�OHIW�DV�DQ�H[HUFLVH�

ZKHQ P\/LVW KDV�YDOXHV���� �� �� �� ���DQG \RXU/LVW KDV�YDOXHV���� �� ��� $IWHU�WKH]LS P\/LVW KDV�YDOXHV���� �� �� �� �� �� �� ���DQG \RXU/LVW LV�HPSW\�

,Q�WKH�DERYH�H[DPSOH� P\/LVW KDV�WZR�PRUH�YDOXHV�WKDQ \RXU/LVW� 7KH�DOJRULWKPPDNHV�QR�DVVXPSWLRQ�DERXW�WKH�OHQJWKV�RI�WKH�WZR�OLVWV� :QHQ�SURFHVVLQJ�JHWV�WR�WKH�HQGRI�RQH�OLVW�WKH�UHPDLQLQJ�PHPEHUV�RI�WKH�RWKHU�OLVW�DUH�WKH�ODVW�PHPEHUV�RI�WKH�]LSSHGOLVW� )RU�H[DPSOH� LI P\/LVW KDV�YDOXHV���� ���DQG \RXU/LVW KDV�YDOXHV���� �� �� �� ���� ���WKH�]LSSHG�OLVW�VKRXOG�EH���� �� �� �� �� �� �� �� ���

)LJXUH������E��VKRZV�WKH�VWDWH�RI�WKH�FRPSXWDWLRQ�DIWHU�RQH�H[HFXWLRQ�RI�WKH�ORRS�6XSSRVH WKLV OLVW�KDV n HOHPHQWV� /RFDO�YDULDEOHV S DQG T PDLQWDLQ�WKH�ORRS�LQYDULDQW�ZKLFK�KDV�WKUHH�SDUWV�

! S SRLQWV�WR�WKH�ÀUVW�QRGH�LQ�D�OLVW�RI�WKH�ODVW m YDOXHV�RI�WKLV�OLVW�

! 7KH�ÀUVW 2 · (n−m) LWHPV�RI WKLV OLVW�DUH�WKH�ÀUVW (n−m) LWHPV�RI WKLV DQG RWKHU]LSSHG�

! T SRLQWV�WR�WKH (n−m+1)WK�YDOXH�RI�WKH�RULJLQDO�RWKHU�OLVW�

5HYLVHG� $XJXVW��� ���� &RS\ULJKW F⃝� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG

��� 7KH�&ODVVLF�/LQNHG�,PSOHPHQWDWLRQ ���

(a) Initial lists. 3 41 2this 5

86 7other

q

p

(b) After one execution of the loop.

3 41 2this 5

86 7other

q

p

(c) After two executions of the loop.

3 41 2this 5

86 7other

(d) Final lists. 3 41 2this 5

86 7other

)LJXUH ���� 7KH�DFWLRQ�RI�PHWKRG ]LS�� IRU�WKH /LVW/ GDWD�VWUXFWXUH� ,PSOHPHQ�WDWLRQ�LV�OHIW�DV�DQ�H[HUFLVH�

ZKHQ P\/LVW KDV�YDOXHV���� �� �� �� ���DQG \RXU/LVW KDV�YDOXHV���� �� ��� $IWHU�WKH]LS P\/LVW KDV�YDOXHV���� �� �� �� �� �� �� ���DQG \RXU/LVW LV�HPSW\�

,Q�WKH�DERYH�H[DPSOH� P\/LVW KDV�WZR�PRUH�YDOXHV�WKDQ \RXU/LVW� 7KH�DOJRULWKPPDNHV�QR�DVVXPSWLRQ�DERXW�WKH�OHQJWKV�RI�WKH�WZR�OLVWV� :QHQ�SURFHVVLQJ�JHWV�WR�WKH�HQGRI�RQH�OLVW�WKH�UHPDLQLQJ�PHPEHUV�RI�WKH�RWKHU�OLVW�DUH�WKH�ODVW�PHPEHUV�RI�WKH�]LSSHGOLVW� )RU�H[DPSOH� LI P\/LVW KDV�YDOXHV���� ���DQG \RXU/LVW KDV�YDOXHV���� �� �� �� ���� ���WKH�]LSSHG�OLVW�VKRXOG�EH���� �� �� �� �� �� �� �� ���

)LJXUH������E��VKRZV�WKH�VWDWH�RI�WKH�FRPSXWDWLRQ�DIWHU�RQH�H[HFXWLRQ�RI�WKH�ORRS�6XSSRVH WKLV OLVW�KDV n HOHPHQWV� /RFDO�YDULDEOHV S DQG T PDLQWDLQ�WKH�ORRS�LQYDULDQW�ZKLFK�KDV�WKUHH�SDUWV�

! S SRLQWV�WR�WKH�ÀUVW�QRGH�LQ�D�OLVW�RI�WKH�ODVW m YDOXHV�RI�WKLV�OLVW�

! 7KH�ÀUVW 2 · (n−m) LWHPV�RI WKLV OLVW�DUH�WKH�ÀUVW (n−m) LWHPV�RI WKLV DQG RWKHU]LSSHG�

! T SRLQWV�WR�WKH (n−m+1)WK�YDOXH�RI�WKH�RULJLQDO�RWKHU�OLVW�

5HYLVHG� $XJXVW��� ���� &RS\ULJKW F⃝� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG

Page 43: Mutable Lists - Pepperdine University · Design Patterns for Data Structures Figure 6.1 &KDSWHU 0XWDEOH /LVWV 4 (a) A linked list. 9 2 7 4 (c) A circular linked list. 9 2 7 (d) A

Design Patterns for Data Structures Figure 6.22

unZip( ), exercise

��� &KDSWHU�� 0XWDEOH�/LVWV

(a) Initial list.

3 41 2this 5

(b) Before first execution of the loop.

3 41 2this 65

result q p

(c) After one execution of the loop.

3 41 2this 65

result q p

7

6 7

7

(d) Final list.

3 41 2this 65

result

7

)LJXUH ���� 7KH�DFWLRQ�RI�PHWKRG XQ=LS�� IRU�WKH /LVW/ GDWD�VWUXFWXUH� ,PSOH�PHQWDWLRQ�LV�OHIW�DV�DQ�H[HUFLVH�

,PSOHPHQWDWLRQ�RI ]LS�� LV�DQ�H[HUFLVH� 7KH�LQLWLDOL]DWLRQ�FRGH�VKRXOG�HVWDEOLVKWKH�ORRS�LQYDULDQW�EHIRUH�WKH�ORRS�H[HFXWHV�WKH�ÀUVW�WLPH� 7KH�FRGH�LQ�WKH�ERG\�RI�WKHORRS�VKRXOG�OLQN�WKH�QRGH�WR�ZKLFK S SRLQWV�WR�WKH�QRGH�WR�ZKLFK T SRLQWV� OLQN�WKH�QRGHWR�ZKLFK T SRLQWV�WR�WKH�QRGH�WR�ZKLFK S ZDV�SRLQWLQJ� DQG�WKHQ�UH�HVWDEOLVK�WKH�ORRSLQYDULDQW�

%HFDXVH�\RX�GR�QRW�NQRZ�ZKHWKHU WKLV RU RWKHU LV�ORQJHU� WKH�WHVW�IRU�WKH ZKLOHORRS�WR�H[HFXWH�PXVW�JXDUDQWHH�WKDW�WKHUH�DUH�XQ]LSSHG�HOHPHQWV�DW�ERWK S DQG T� $IWHUWKH�ORRS�WHUPLQDWHV� WKH�DOJRULWKP�PXVW�GHWHUPLQH�ZKLFK�OLVW�ZDV�ORQJHU�DQG�FRPSXWHDFFRUGLQJO\�

0HWKRG XQ]LS�� GRHV�WKH�RSSRVLWH�RI ]LS��� ,W�WDNHV�D�VLQJOH�OLVW�DQG�FUHDWHV�WZROLVWV�IURP�LW�XVLQJ�HYHU\�RWKHU�YDOXH� )LJXUH����� VKRZV�WKH�DFWLRQ�RI

\RXU/LVW P\/LVW�XQ=LS��

&RS\ULJKW F⃝� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG 5HYLVHG� $XJXVW��� ����

Page 44: Mutable Lists - Pepperdine University · Design Patterns for Data Structures Figure 6.1 &KDSWHU 0XWDEOH /LVWV 4 (a) A linked list. 9 2 7 4 (c) A circular linked list. 9 2 7 (d) A

Design Patterns for Data Structures Figure 6.22

unZip( ), exercise

��� &KDSWHU�� 0XWDEOH�/LVWV

(a) Initial list.

3 41 2this 5

(b) Before first execution of the loop.

3 41 2this 65

result q p

(c) After one execution of the loop.

3 41 2this 65

result q p

7

6 7

7

(d) Final list.

3 41 2this 65

result

7

)LJXUH ���� 7KH�DFWLRQ�RI�PHWKRG XQ=LS�� IRU�WKH /LVW/ GDWD�VWUXFWXUH� ,PSOH�PHQWDWLRQ�LV�OHIW�DV�DQ�H[HUFLVH�

,PSOHPHQWDWLRQ�RI ]LS�� LV�DQ�H[HUFLVH� 7KH�LQLWLDOL]DWLRQ�FRGH�VKRXOG�HVWDEOLVKWKH�ORRS�LQYDULDQW�EHIRUH�WKH�ORRS�H[HFXWHV�WKH�ÀUVW�WLPH� 7KH�FRGH�LQ�WKH�ERG\�RI�WKHORRS�VKRXOG�OLQN�WKH�QRGH�WR�ZKLFK S SRLQWV�WR�WKH�QRGH�WR�ZKLFK T SRLQWV� OLQN�WKH�QRGHWR�ZKLFK T SRLQWV�WR�WKH�QRGH�WR�ZKLFK S ZDV�SRLQWLQJ� DQG�WKHQ�UH�HVWDEOLVK�WKH�ORRSLQYDULDQW�

%HFDXVH�\RX�GR�QRW�NQRZ�ZKHWKHU WKLV RU RWKHU LV�ORQJHU� WKH�WHVW�IRU�WKH ZKLOHORRS�WR�H[HFXWH�PXVW�JXDUDQWHH�WKDW�WKHUH�DUH�XQ]LSSHG�HOHPHQWV�DW�ERWK S DQG T� $IWHUWKH�ORRS�WHUPLQDWHV� WKH�DOJRULWKP�PXVW�GHWHUPLQH�ZKLFK�OLVW�ZDV�ORQJHU�DQG�FRPSXWHDFFRUGLQJO\�

0HWKRG XQ]LS�� GRHV�WKH�RSSRVLWH�RI ]LS��� ,W�WDNHV�D�VLQJOH�OLVW�DQG�FUHDWHV�WZROLVWV�IURP�LW�XVLQJ�HYHU\�RWKHU�YDOXH� )LJXUH����� VKRZV�WKH�DFWLRQ�RI

\RXU/LVW P\/LVW�XQ=LS��

&RS\ULJKW F⃝� ����� 'XQJ�;��1JX\HQ�DQG�-��6WDQOH\�:DUIRUG 5HYLVHG� $XJXVW��� ����