1 00:00:00,000 --> 00:00:02,730 [Powered by Google Translate] [Adran 6: Llai cyfforddus] 2 00:00:02,730 --> 00:00:05,040 [Nate Hardison] [Harvard University] 3 00:00:05,040 --> 00:00:07,320 [Mae hyn yn CS50.] [CS50.TV] 4 00:00:07,320 --> 00:00:11,840 Mae pob hawl. Croeso i adran 6. 5 00:00:11,840 --> 00:00:14,690 Yr wythnos hon, rydym yn mynd i fod yn siarad am strwythurau data yn adran, 6 00:00:14,690 --> 00:00:19,780 yn bennaf oherwydd bod problem yr wythnos hon gosod ar spellr 7 00:00:19,780 --> 00:00:24,410 yn criw cyfan o archwilio strwythur gwahanol data. 8 00:00:24,410 --> 00:00:26,520 Mae criw o wahanol ffyrdd y gallwch chi fynd â'r broblem a osodwyd, 9 00:00:26,520 --> 00:00:31,570 a'r strwythurau data po fwyaf y gwyddoch amdanynt, y pethau yn fwy oer gallwch ei wneud. 10 00:00:31,570 --> 00:00:34,990 >> Felly, gadewch i ni ddechrau arni. Yn gyntaf rydym yn mynd i siarad am pentyrrau, 11 00:00:34,990 --> 00:00:37,530 y data pentwr a ciw strwythurau ein bod ni'n mynd i siarad am. 12 00:00:37,530 --> 00:00:40,560 Staciau a ciwiau yn ddefnyddiol iawn wrth inni ddechrau sôn am graffiau, 13 00:00:40,560 --> 00:00:44,390 nad ydym yn mynd i wneud cymaint o ar hyn o bryd. 14 00:00:44,390 --> 00:00:52,820 Ond maent yn wirioneddol dda i ddeall un o'r mawr strwythurau data sylfaenol CS. 15 00:00:52,820 --> 00:00:54,880 Mae'r disgrifiad yn y set problem fanyleb, 16 00:00:54,880 --> 00:00:59,260 os ydych yn tynnu i fyny, yn siarad am staciau yn debyg i 17 00:00:59,260 --> 00:01:05,239 y pentwr o hambyrddau bwyta sydd gennych yn y caffi yn y neuaddau bwyta 18 00:01:05,239 --> 00:01:09,680 lle pan fydd y staff fwyta yn dod ac yn rhoi'r hambyrddau bwyta allan ar ôl ydyn nhw wedi glanhau nhw, 19 00:01:09,680 --> 00:01:12,000 byddant yn gwneud synnwyr iddynt un ar ben y llall. 20 00:01:12,000 --> 00:01:15,050 Ac yna pan fydd plant yn dod i mewn i gael bwyd, 21 00:01:15,050 --> 00:01:19,490 maent yn tynnu i ffwrdd yr hambyrddau, yn gyntaf yr un uchaf, yna yr un isod, yna yr un is na hynny. 22 00:01:19,490 --> 00:01:25,190 Felly, mewn gwirionedd, yr hambwrdd cyntaf y mae'r staff fwyta roi i lawr yw'r un olaf sy'n cael ei gymryd i ffwrdd. 23 00:01:25,190 --> 00:01:32,330 Yr un diwethaf fod y staff fwyta ei roi ar yr un cyntaf sy'n cael ei gymryd i ffwrdd ar gyfer cinio. 24 00:01:32,330 --> 00:01:38,100 Yn spec y broblem a osodwyd yn, y gallwch ei lawrlwytho os nad ydych wedi eisoes, 25 00:01:38,100 --> 00:01:46,730 fyddwn yn sôn am fodelu pentwr Strwythur data gan ddefnyddio math hwn o strwythur. 26 00:01:46,730 --> 00:01:51,070 >> Felly beth sydd gennym yma, mae hyn yn debyg i'r hyn a gyflwynwyd mewn darlithoedd, 27 00:01:51,070 --> 00:01:58,120 ac eithrio mewn darlith gwnaethom gyflwyno hyn gyda ints yn hytrach na * torgoch s. 28 00:01:58,120 --> 00:02:06,250 Mae hyn yn mynd i fod yn stac bod siopau beth? 29 00:02:06,250 --> 00:02:09,009 Daniel? Beth rydym yn cadw yn y stac? 30 00:02:09,009 --> 00:02:15,260 [Daniel] Strings? >> Rydym yn storio llinynnau yn y stac, yn union. 31 00:02:15,260 --> 00:02:20,950 Y cyfan sydd angen i chi eu cael er mwyn creu pentwr yn arae 32 00:02:20,950 --> 00:02:23,920 o allu arbennig, sydd yn yr achos hwn, 33 00:02:23,920 --> 00:02:28,020 gallu yn mynd i fod yn yr holl gapiau oherwydd ei fod yn gyson. 34 00:02:28,020 --> 00:02:36,340 Ac yna yn ychwanegol at yr amrywiaeth, y cyfan sydd angen i olrhain yw maint presennol y rhesi. 35 00:02:36,340 --> 00:02:38,980 Un peth i'w nodi yma bod fath o oer 36 00:02:38,980 --> 00:02:47,060 yw ein bod yn creu strwythur data pentyrru ar ben y llall, strwythur data y rhesi. 37 00:02:47,060 --> 00:02:50,110 Mae nifer o ffyrdd gwahanol i weithredu pentyrrau. 38 00:02:50,110 --> 00:02:54,250 Ni fyddwn yn gwneud hyn yn eithaf eto, ond gobeithio ar ôl gwneud y problemau cysylltiedig-rhestr, 39 00:02:54,250 --> 00:03:00,520 byddwch yn gweld sut y gallwch yn hawdd weithredu pentwr ar ben rhestr cysylltiedig yn ogystal. 40 00:03:00,520 --> 00:03:02,640 Ond am nawr, byddwn yn cadw at y arrays. 41 00:03:02,640 --> 00:03:06,350 Felly eto, y cyfan rydym ei angen yw amrywiaeth, ac mae'n rhaid i ni olrhain y maint y rhesi. 42 00:03:06,350 --> 00:03:09,850 [Sam] Mae'n ddrwg gennym, pam yr ydych wedi'i ddweud y pentwr ar ben y tannau? 43 00:03:09,850 --> 00:03:13,440 I mi mae'n ymddangos fel y tannau o fewn y pentwr. 44 00:03:13,440 --> 00:03:16,790 [Hardison] Yeah. Rydym yn creu, rydym yn cymryd ein casgliad data strwythur - 45 00:03:16,790 --> 00:03:22,130 mae hwnnw'n gwestiwn mawr. Felly, y cwestiwn yw pam, ar gyfer y bobl sy'n cael eu gwylio hon ar-lein, 46 00:03:22,130 --> 00:03:24,140 pam yr ydym yn dweud bod y pentwr ar ben y llinynnau, 47 00:03:24,140 --> 00:03:27,990 oherwydd dyma ei fod yn edrych fel y llinynnau yn y tu mewn i'r pentwr? 48 00:03:27,990 --> 00:03:31,050 Pa yn gwbl wir. 49 00:03:31,050 --> 00:03:34,660 Yr hyn yr oeddwn yn cyfeirio ato oedd ein bod wedi cael amrywiaeth strwythur data. 50 00:03:34,660 --> 00:03:39,290 Mae gennym amrywiaeth o torgoch * s, mae hyn yn amrywiaeth o linynnau, 51 00:03:39,290 --> 00:03:45,300 ac rydym yn mynd i ychwanegu at hynny er mwyn creu strwythur data pentyrru. 52 00:03:45,300 --> 00:03:48,620 >> Felly pentwr ychydig yn fwy cymhleth nag arae. 53 00:03:48,620 --> 00:03:51,890 Gallwn ddefnyddio amrywiaeth i adeiladu pentwr. 54 00:03:51,890 --> 00:03:55,810 Felly, dyna lle'r ydym yn dweud bod y pentwr yn cael ei hadeiladu ar ben arae. 55 00:03:55,810 --> 00:04:02,510 Yn yr un modd, fel y dywedais yn gynharach, gallwn adeiladu pentwr ar ben rhestr cysylltiedig. 56 00:04:02,510 --> 00:04:04,960 Yn hytrach na defnyddio amrywiaeth i gynnal ein elfennau, 57 00:04:04,960 --> 00:04:10,070 gallem ddefnyddio rhestr cysylltiedig i gynnal ein elfennau ac adeiladu ar y pentwr o gwmpas hynny. 58 00:04:10,070 --> 00:04:12,420 Gadewch i ni gerdded drwy un neu ddau o enghreifftiau, yn edrych ar rai cod, 59 00:04:12,420 --> 00:04:14,960 i weld beth sy'n digwydd mewn gwirionedd yma. 60 00:04:14,960 --> 00:04:23,400 Ar y chwith, rydw i wedi taflu i lawr yr hyn y byddai strwythur stac edrych fel yn y cof 61 00:04:23,400 --> 00:04:28,330 os allu cael eu diffinio # i fod yn bedwar. 62 00:04:28,330 --> 00:04:33,490 Rydym wedi cael ein pedair elfen amrywiaeth * torgoch. 63 00:04:33,490 --> 00:04:38,110 Rydym wedi cael llinynnau [0], llinynnau [1], llinynnau [2], llinynnau [3], 64 00:04:38,110 --> 00:04:43,800 ac yna y lle olaf ar gyfer ein gyfanrif maint. 65 00:04:43,800 --> 00:04:46,270 A yw hyn yn gwneud synnwyr? Iawn. 66 00:04:46,270 --> 00:04:48,790 Dyma beth sy'n digwydd os bydd yr hyn yr wyf yn ei wneud ar y dde, 67 00:04:48,790 --> 00:04:55,790 a fydd yn fy cod, ydy at jyst ddatgan strwythur, a strwythur eu pentyrru enw s. 68 00:04:55,790 --> 00:05:01,270 Dyma'r hyn yr ydym yn ei gael. Mae'n gosod yr ôl-troed yn y cof. 69 00:05:01,270 --> 00:05:05,590 Y cwestiwn cyntaf yma yw beth yw cynnwys y strwythur pentwr? 70 00:05:05,590 --> 00:05:09,250 Ar hyn o bryd maent yn dim byd, ond nid ydynt yn gwbl ddim. 71 00:05:09,250 --> 00:05:13,300 Maent yn y math hwn o garbage. Nid oes gennym unrhyw syniad beth sydd ynddynt. 72 00:05:13,300 --> 00:05:17,000 Pan fyddwn yn datgan s simnai, rydym yn taflu bod i lawr ar ben y cof. 73 00:05:17,000 --> 00:05:19,840 Mae'n fath o fel datgan int i ac nid ei ymgychwyn. 74 00:05:19,840 --> 00:05:21,730 Nid ydych yn gwybod beth sydd yno. Gallwch ddarllen beth sydd yno, 75 00:05:21,730 --> 00:05:27,690 ond ni allai fod yn ddefnyddiol super. 76 00:05:27,690 --> 00:05:32,680 Un peth y byddwch eisiau bob amser yn cofio ei wneud yw ymgychwyn hyn sydd angen ei ymgychwyn. 77 00:05:32,680 --> 00:05:35,820 Yn yr achos hwn, rydyn ni'n mynd i ymgychwyn y maint i fod yn sero, 78 00:05:35,820 --> 00:05:39,960 oherwydd mae hynny'n mynd i droi allan i fod yn bwysig iawn i ni. 79 00:05:39,960 --> 00:05:43,450 Gallem fynd yn ei flaen ac yn ymgychwyn holl arwyddion, yr holl s * torgoch, 80 00:05:43,450 --> 00:05:49,670 bod rhywfaint o werth ddealladwy, yn ôl pob tebyg null. 81 00:05:49,670 --> 00:05:58,270 Ond nid yw'n hollol angenrheidiol ein bod yn gwneud hynny. 82 00:05:58,270 --> 00:06:04,200 >> Yn awr, y ddau brif weithrediadau ar pentyrrau yn? 83 00:06:04,200 --> 00:06:07,610 Unrhyw un yn cofio o ddarlith yr hyn yr ydych yn ei wneud gyda chyrn? Ydw? 84 00:06:07,610 --> 00:06:09,700 [Stella] Gwthio a popping? >> Yn union. 85 00:06:09,700 --> 00:06:13,810 Gwthio a popping yw'r ddwy brif weithrediadau ar pentyrrau. 86 00:06:13,810 --> 00:06:17,060 A beth mae gwthio yn ei wneud? >> Mae'n rhoi rhywbeth ar y top 87 00:06:17,060 --> 00:06:19,300 y pentwr, ac yna popping yn mynd ag ef i ffwrdd. 88 00:06:19,300 --> 00:06:23,150 [Hardison] Yn union. Felly, gwthio gwthio rhywbeth ar ben y pentwr. 89 00:06:23,150 --> 00:06:27,700 Mae fel y staff fwyta rhoi hambwrdd bwyta i lawr ar y cownter. 90 00:06:27,700 --> 00:06:33,630 Ac popping yn cymryd hambwrdd fwyta oddi ar y pentwr. 91 00:06:33,630 --> 00:06:36,460 Gadewch i ni gerdded drwy ychydig o enghreifftiau o'r hyn sy'n digwydd 92 00:06:36,460 --> 00:06:39,720 pan fyddwn yn gwthio pethau i mewn i'r pentwr. 93 00:06:39,720 --> 00:06:45,110 Pe baem yn gwthio'r llinyn 'helo' ar ein simnai, 94 00:06:45,110 --> 00:06:49,760 mae hyn yn beth fyddai ein diagram yn edrych fel yn awr. 95 00:06:49,760 --> 00:06:53,410 Gweld beth sy'n digwydd? 96 00:06:53,410 --> 00:06:56,530 Rydym yn gwthio i mewn i'r elfen gyntaf ein llinynnau amrywiaeth 97 00:06:56,530 --> 00:07:01,420 ac rydym yn upped ein Cyfrif maint i fod yn 1. 98 00:07:01,420 --> 00:07:05,340 Felly, os ydym yn edrych ar y gwahaniaeth rhwng y ddau sleidiau, dyma oedd 0, dyma cyn y gwthio. 99 00:07:05,340 --> 00:07:08,690 Dyma ôl y gwthio. 100 00:07:08,690 --> 00:07:13,460 Cyn y gwthio, ar ôl y gwthio. 101 00:07:13,460 --> 00:07:16,860 Ac yn awr mae gennym un elfen yn ein pentwr. 102 00:07:16,860 --> 00:07:20,970 Mae'n y llinyn "helo", a dyna ni. 103 00:07:20,970 --> 00:07:24,440 Mae popeth arall yn y casgliad, yn ein llinynnau amrywiaeth, yn dal i garbage. 104 00:07:24,440 --> 00:07:27,070 Nid ydym wedi ymgychwyn hynny. 105 00:07:27,070 --> 00:07:29,410 Lets 'ddeud rydym yn gwthio llinyn arall ar ein pentwr. 106 00:07:29,410 --> 00:07:32,210 Rydym yn mynd i wthio "byd" ar hyn o bryd. 107 00:07:32,210 --> 00:07:35,160 Felly gallwch weld "byd" yma yn mynd ar ben o "helo", 108 00:07:35,160 --> 00:07:40,040 ac yn y cyfrif faint yn mynd i fyny i 2. 109 00:07:40,040 --> 00:07:44,520 Nawr gallwn wthio "CS50", a fe sy'n mynd ar ben eto. 110 00:07:44,520 --> 00:07:51,110 Os awn yn ôl, gallwch weld sut yr ydym yn gwthio pethau ar ben y pentwr. 111 00:07:51,110 --> 00:07:53,320 Ac yn awr rydym yn dod i pop. 112 00:07:53,320 --> 00:07:58,910 Pan fyddwn yn popped rhywbeth oddi ar y pentwr, beth ddigwyddodd? 113 00:07:58,910 --> 00:08:01,540 Unrhyw un weld y gwahaniaeth? Mae'n eithaf cynnil. 114 00:08:01,540 --> 00:08:05,810 [Myfyrwyr] Mae maint. >> Yeah, maint newid. 115 00:08:05,810 --> 00:08:09,040 >> Beth arall fyddech wedi disgwyl i newid? 116 00:08:09,040 --> 00:08:14,280 [Myfyrwyr] Mae'r llinynnau, hefyd. >> Iawn. Mae'r llinynnau hefyd. 117 00:08:14,280 --> 00:08:17,110 Mae'n troi allan bod pan fyddwch chi'n ei wneud yn y modd hwn, 118 00:08:17,110 --> 00:08:21,960 oherwydd nad ydym yn copïo elfennau yn ein stac, 119 00:08:21,960 --> 00:08:24,670 nid ydym mewn gwirionedd yn rhaid i chi wneud unrhyw beth; unig a fedrwn ddefnyddio maint 120 00:08:24,670 --> 00:08:28,630 i gadw golwg ar y nifer o bethau yn ein amrywiaeth 121 00:08:28,630 --> 00:08:33,780 felly pan fyddwn yn galw eto, eto rydym yn unig lleihau a ein maint i lawr i 1. 122 00:08:33,780 --> 00:08:39,440 Does dim angen i chi mewn gwirionedd yn mynd i mewn ac trosysgrifo unrhyw beth. 123 00:08:39,440 --> 00:08:41,710 Kind of ffynci. 124 00:08:41,710 --> 00:08:46,520 Mae'n troi allan bod yn nodweddiadol yn gadael pethau yn unig oherwydd ei fod yn llai o waith i ni ei wneud. 125 00:08:46,520 --> 00:08:50,060 Os nad oes raid i ni fynd yn ôl a trosysgrifo rhywbeth, yna pam ei wneud? 126 00:08:50,060 --> 00:08:54,150 Felly, pan fyddwn yn galw ddwywaith i ffwrdd o'r pentwr, y cyfan a wna hynny yw lleihau a maint cwpl o weithiau. 127 00:08:54,150 --> 00:08:59,120 Ac eto, dim ond oherwydd nad ydym yn copïo pethau yn ein pentwr. 128 00:08:59,120 --> 00:09:01,320 Ydw? Mynd yn ei flaen. 129 00:09:01,320 --> 00:09:04,460 [Myfyrwyr, annealladwy] >> Ac yna beth sy'n digwydd pan fyddwch yn gwthio rhywbeth eto? 130 00:09:04,460 --> 00:09:08,570 Pan fyddwch yn gwthio rhywbeth eto, ble mae'n mynd? 131 00:09:08,570 --> 00:09:12,390 I ble mae'n mynd, Basil? >> Into llinynnau [1]? >> Iawn. 132 00:09:12,390 --> 00:09:14,530 Pam nad yw'n mynd i mewn llinynnau [3]? 133 00:09:14,530 --> 00:09:19,410 [Basil] Oherwydd ei fod yn anghofio bod yna unrhyw beth yn llinynnau [1] a [2]? 134 00:09:19,410 --> 00:09:24,040 [Hardison] Yn union. Mae ein corn, yn y bôn, "anghofio" ei fod yn dal ar i unrhyw beth 135 00:09:24,040 --> 00:09:29,480 mewn llinynnau [1] neu linynnau [2], felly pan fyddwn yn gwthio "Woot", 136 00:09:29,480 --> 00:09:36,670 'i jyst yn rhoi bod i elfen ar llinynnau [1]. 137 00:09:36,670 --> 00:09:41,590 A oes unrhyw gwestiynau ynglŷn â sut mae hyn yn gweithio, ar lefel sylfaenol? 138 00:09:41,590 --> 00:09:45,160 [Sam] Felly nid yw hyn yn ddeinamig mewn unrhyw ffordd, o ran y swm 139 00:09:45,160 --> 00:09:47,620 neu o ran maint y pentwr? 140 00:09:47,620 --> 00:09:56,750 [Hardison] Yn union. Mae hyn yn - y pwynt oedd nad oedd hyn yn pentwr ddynamig growning. 141 00:09:56,750 --> 00:10:02,850 Mae hwn yn stac gallu dal, ar y mwyaf, bedwar * torgoch s, ar y mwyaf pedwar peth. 142 00:10:02,850 --> 00:10:07,580 Pe baem yn ceisio gwthio beth pumed, beth ydych chi'n feddwl ddylai ddigwydd? 143 00:10:07,580 --> 00:10:11,870 [Myfyrwyr, annealladwy] 144 00:10:11,870 --> 00:10:14,600 [Hardison] Yn union. Mae yna nifer o bethau a allai ddigwydd. 145 00:10:14,600 --> 00:10:19,330 Gallai o bosibl SEG fai, yn dibynnu ar yr hyn a oedd - 146 00:10:19,330 --> 00:10:22,530 sut yn union yr oeddem yn gweithredu y cefn-diwedd. 147 00:10:22,530 --> 00:10:31,740 Gallai trosysgrifo. Gallai gael y gorlif byffer ein bod yn siarad am yn y dosbarth. 148 00:10:31,740 --> 00:10:35,240 Beth fyddai'r peth mwyaf amlwg a allai fod yn overwritten 149 00:10:35,240 --> 00:10:42,370 os ydym yn ceisio gwthio rhywbeth ychwanegol ar ein corn? 150 00:10:42,370 --> 00:10:44,550 Felly, soniasoch am gorlif byffer. 151 00:10:44,550 --> 00:10:47,870 Beth allai fod y peth a fyddai'n cael eu hysgrifennu dros neu stomped ar 152 00:10:47,870 --> 00:10:52,320 os ydym yn gorlifo ddamweiniol gan geisio gwthio rhywbeth ychwanegol? 153 00:10:52,320 --> 00:10:54,730 [Daniel, annealladwy] >> bosibl. 154 00:10:54,730 --> 00:10:58,440 Ond i ddechrau, beth allai ddigwydd? Beth os ydym yn ceisio gwthio beth 4? 155 00:10:58,440 --> 00:11:06,220 Gallai ysgrifennu dros y maint, o leiaf gyda'r diagram cof ein bod wedi cael. 156 00:11:06,220 --> 00:11:10,880 >> Yn y set problem fanyleb, sef yr hyn rydym yn mynd i fod yn gweithredu heddiw, 157 00:11:10,880 --> 00:11:16,030 hyn yr ydym am ei wneud yn unig yn dychwelyd ffug. 158 00:11:16,030 --> 00:11:20,030 Mae ein dull gwthio yn mynd i ddychwelyd gwerth boolean, 159 00:11:20,030 --> 00:11:22,920 a bydd y gwerth boolaidd yn wir os yw'r gwthio yn llwyddo 160 00:11:22,920 --> 00:11:29,730 a ffug os na allwn wthio unrhyw beth mwy oherwydd bod y pentwr yn llawn. 161 00:11:29,730 --> 00:11:33,620 Gadewch i ni gerdded drwy ychydig o'r cod ar hyn o bryd. 162 00:11:33,620 --> 00:11:36,400 Dyma ein swyddogaeth gwthio. 163 00:11:36,400 --> 00:11:40,380 Ein swyddogaeth wthio ar gyfer pentwr yn mynd i'w cymryd yn y llinyn i roi ar y corn. 164 00:11:40,380 --> 00:11:45,820 Mae'n mynd i ddychwelyd wir os yw'r llinyn ei wthio yn llwyddiannus 165 00:11:45,820 --> 00:11:51,820 ar y corn fel arall a ffug. 166 00:11:51,820 --> 00:11:59,740 Gall unrhyw awgrymiadau ar beth yn beth cyntaf da i'w wneud yma? 167 00:11:59,740 --> 00:12:20,630 [Sam] Os faint yn hafal i allu dychwelyd ffug? 168 00:12:20,630 --> 00:12:23,320 [Hardison] Bingo. Swydd Nice. 169 00:12:23,320 --> 00:12:26,310 Os yw'r maint yn gallu, rydym yn mynd i ddychwelyd ffug. 170 00:12:26,310 --> 00:12:29,270 Ni allwn roi unrhyw beth mwy yn ein pentwr. 171 00:12:29,270 --> 00:12:36,900 Fel arall, rydym yn awyddus i roi rhywbeth ar ben y pentwr. 172 00:12:36,900 --> 00:12:41,670 Beth yw "frig y pentwr," i ddechrau? 173 00:12:41,670 --> 00:12:43,650 [Daniel] Maint 0? >> Maint 0. 174 00:12:43,650 --> 00:12:49,990 Beth yw frig y pentwr ar ôl mae un peth yn y pentwr? Missy, ydych chi'n gwybod? 175 00:12:49,990 --> 00:12:52,720 [Missy] Un. Maint >> yn un, yn union. Byddwch yn parhau i ychwanegu at y maint, 176 00:12:52,720 --> 00:13:01,690 a phob tro y byddwch chi'n rhoi yn yr elfen newydd yn y maint mynegai yn y rhesi. 177 00:13:01,690 --> 00:13:05,470 Gallwn wneud hyn gyda'r math hynny o un-leinin, os yw hynny'n gwneud synnwyr. 178 00:13:05,470 --> 00:13:11,910 Felly, rydym wedi cael ein llinynnau amrywiaeth, rydym yn mynd i gael mynediad iddo ar y mynegai maint, 179 00:13:11,910 --> 00:13:14,780 ac rydym yn jyst yn mynd i gadw ein * torgoch i mewn 'na. 180 00:13:14,780 --> 00:13:19,340 Hysbysiad sut y mae 'dim copïo llinyn yn mynd ymlaen yn fan hyn, 181 00:13:19,340 --> 00:13:29,680 unrhyw ddyraniad deinamig o gof? 182 00:13:29,680 --> 00:13:34,440 Ac yna Missy fagu hyn yr ydym yn awr i wneud, 183 00:13:34,440 --> 00:13:40,570 oherwydd ein bod wedi cael eu storio y llinyn yn y lle priodol yn yr amrywiaeth, 184 00:13:40,570 --> 00:13:49,230 a dywedodd bod yn rhaid i gynnydd y maint gan un fel ein bod ni'n barod ar gyfer y gwthiad nesaf. 185 00:13:49,230 --> 00:13:53,950 Felly, gallwn wneud hynny gyda s.size + +. 186 00:13:53,950 --> 00:13:59,330 Ar y pwynt hwn, rydym wedi gwthio i mewn i'n casgliad. Beth yw'r peth olaf mae'n rhaid i ni ei wneud? 187 00:13:59,330 --> 00:14:10,110 [Myfyrwyr] Dychwelyd wir. >> Dychwelyd wir. 188 00:14:10,110 --> 00:14:14,690 Felly, mae'n eithaf syml, cod 'n bert syml. Ddim yn rhy fawr. 189 00:14:14,690 --> 00:14:17,070 Unwaith y byddwch wedi lapio eich pen o gwmpas sut y pentwr yn gweithio, 190 00:14:17,070 --> 00:14:21,910 mae hyn yn eithaf syml i'w gweithredu. 191 00:14:21,910 --> 00:14:26,390 >> Yn awr, y rhan nesaf o hyn yw popping llinyn oddi ar y pentwr. 192 00:14:26,390 --> 00:14:29,410 Rydw i'n mynd i roi i chi guys rhywfaint o amser i weithio ar y darn ychydig. 193 00:14:29,410 --> 00:14:34,320 Mae bron yn y bôn y gwrthwyneb o'r hyn yr ydym wedi ei wneud yma yn gwthio. 194 00:14:34,320 --> 00:14:38,510 Hyn yr wyf wedi ei wneud mewn gwirionedd - wps. 195 00:14:38,510 --> 00:14:48,160 Rydw i wedi booted i fyny teclyn dros yma, ac yn y peiriant, 196 00:14:48,160 --> 00:14:53,600 Rwyf wedi tynnu i fyny y broblem a osodwyd 5 Manyleb. 197 00:14:53,600 --> 00:15:02,560 Os byddwn yn chwyddo i mewn yma, gallwn weld fy mod yn cdn.cs50.net/2012/fall/psets/pset5.pdf. 198 00:15:02,560 --> 00:15:08,590 Ydych chi wedi guys llwytho i lawr y cod hwn sydd wedi lleoli yma, section6.zip? 199 00:15:08,590 --> 00:15:15,030 Mae pob hawl. Os nad ydych wedi gwneud hynny, wneud hynny ar hyn o bryd, yn gyflym iawn. 200 00:15:15,030 --> 00:15:22,130 'N annhymerus' yn ei wneud yn fy ffenestr terfynell. 201 00:15:22,130 --> 00:15:25,090 Fi 'n weithredol yn gwneud i fyny yma. Yeah. 202 00:15:25,090 --> 00:15:34,730 Ie, Sam? >> Mae gen i gwestiwn ynghylch pam wnaethoch chi ei ddweud cromfachau s.string 's o faint = str? 203 00:15:34,730 --> 00:15:42,910 Beth yw str? A yw hyn a ddiffinnir yn rhywle o'r blaen, neu - oh, yn y str * torgoch? 204 00:15:42,910 --> 00:15:47,160 [Hardison] Ie, yn union. Dyna oedd y ddadl. >> O, iawn. Mae'n ddrwg gennym. 205 00:15:47,160 --> 00:15:49,470 [Hardison] Rydym yn nodi y llinyn i wthio i mewn 206 00:15:49,470 --> 00:15:55,220 Y cwestiwn arall a allai ddod i fyny nad ydym yn wir yn siarad am y fan hon oedd 207 00:15:55,220 --> 00:15:58,810 rydym yn cymryd yn ganiataol ein bod wedi newidyn hwn a elwir yn 208 00:15:58,810 --> 00:16:02,710 a oedd o ran cwmpas ac yn hygyrch i ni. 209 00:16:02,710 --> 00:16:06,960 Rydym yn cymryd yn ganiataol fod ef oedd y strwythur stac. 210 00:16:06,960 --> 00:16:08,930 Felly, edrych yn ôl ar y cod gwthio, 211 00:16:08,930 --> 00:16:13,450 gallwch weld ein bod ni'n gwneud pethau gyda'r llinyn a gafodd eu pasio yn 212 00:16:13,450 --> 00:16:19,210 ond yna yn sydyn, rydym yn cyrchu s.size, fel, lle oedd yn dod? 213 00:16:19,210 --> 00:16:23,020 Yn y cod ein bod ni'n mynd i edrych arno yn yr archif adran 214 00:16:23,020 --> 00:16:27,100 ac yna y pethau y byddwch chi'n ei wneud yn eich problem yn gosod, 215 00:16:27,100 --> 00:16:32,440 rydym wedi gwneud ein pentwr strwythur newidyn byd-eang 216 00:16:32,440 --> 00:16:36,380 fel y gallwn gael mynediad iddo yn ein holl swyddogaethau gwahanol 217 00:16:36,380 --> 00:16:40,630 heb orfod manually basio o gwmpas a phasio drwy gyfeirio, 218 00:16:40,630 --> 00:16:44,870 yn gwneud popeth y math o bethau iddo. 219 00:16:44,870 --> 00:16:52,280 Rydym yn unig yn twyllo ychydig bach, os ydych, er mwyn gwneud pethau brafiach. 220 00:16:52,280 --> 00:16:57,430 Ac mae hynny'n rhywbeth rydym yn ei wneud yma am ei fod am hwyl, mae'n haws. 221 00:16:57,430 --> 00:17:02,800 Yn aml, byddwch yn gweld pobl yn gwneud hyn os oes ganddynt un strwythur data mawr 222 00:17:02,800 --> 00:17:07,750 sy'n cael ei gweithredu ar o fewn eu rhaglen. 223 00:17:07,750 --> 00:17:09,560 >> Gadewch i ni fynd yn ôl dros i'r ddyfais. 224 00:17:09,560 --> 00:17:15,240 A oedd pawb yn llwyddiannus yn cael y section6.zip? 225 00:17:15,240 --> 00:17:20,440 Mae pawb yn unzip 'gan ddefnyddio section6.zip unzip? 226 00:17:20,440 --> 00:17:27,200 Os byddwch yn mynd i adran 6 cyfeiriadur - 227 00:17:27,200 --> 00:17:29,220 AAH, i gyd dros y lle - 228 00:17:29,220 --> 00:17:32,840 ac eich bod yn rhestru beth sydd yn fan hyn, byddwch yn gweld eich bod wedi Mae tair gwahanol. ffeiliau c. 229 00:17:32,840 --> 00:17:38,350 Rydych chi wedi cael ciw, yn SLL, sy'n unigol sy'n gysylltiedig â rhestr, ac pentwr. 230 00:17:38,350 --> 00:17:44,600 Os byddwch yn agor i fyny stack.c, 231 00:17:44,600 --> 00:17:47,330 gallwch weld bod gennym y strwythur diffiniedig i ni, 232 00:17:47,330 --> 00:17:51,330 y strwythur union yr ydym newydd sôn amdanynt yn y sleidiau. 233 00:17:51,330 --> 00:17:56,340 Rydym wedi cael ein newidyn byd-eang am y pentwr, 234 00:17:56,340 --> 00:18:00,110 rydym wedi cael ein swyddogaeth gwthio, 235 00:18:00,110 --> 00:18:04,230 ac yna rydym wedi cael ein swyddogaeth pop. 236 00:18:04,230 --> 00:18:08,320 'N annhymerus' rhoi'r cod ar gyfer gwthio yn ôl i fyny ar y sleid yma, 237 00:18:08,320 --> 00:18:10,660 ond beth hoffwn i chi guys i chi ei wneud yw, hyd eithaf eich gallu, 238 00:18:10,660 --> 00:18:13,790 fynd ac yn gweithredu'r swyddogaeth pop. 239 00:18:13,790 --> 00:18:18,480 Unwaith y byddwch wedi ei rhoi ar waith, gallwch lunio gwneud hyn gyda simnai, 240 00:18:18,480 --> 00:18:22,540 ac yna rhedeg y gweithredadwy pentwr o ganlyniad, 241 00:18:22,540 --> 00:18:28,390 a fydd yn rhedeg yr holl cod hwn prawf i lawr yma dyna yn y prif. 242 00:18:28,390 --> 00:18:31,060 A phrif cymryd gofal mewn gwirionedd gwneud y gwthiad galwadau pop a 243 00:18:31,060 --> 00:18:33,220 a gwneud yn siŵr bod popeth yn mynd drwy bob hawl. 244 00:18:33,220 --> 00:18:36,820 Mae hefyd yn initializes maint pentwr dde yma 245 00:18:36,820 --> 00:18:39,780 felly nid oes rhaid i chi boeni am ymgychwyn hynny. 246 00:18:39,780 --> 00:18:42,310 Gallwch gymryd yn ganiataol ei fod yn briodol wedi'i ymgychwyn 247 00:18:42,310 --> 00:18:48,000 erbyn yr amser yr ydych yn cael mynediad iddo yn y swyddogaeth pop. 248 00:18:48,000 --> 00:18:53,530 Ydy hynny'n gwneud synnwyr? 249 00:18:53,530 --> 00:19:00,100 Felly, yma rydym yn mynd. Mae y cod gwthio. 250 00:19:00,100 --> 00:19:13,210 Byddaf yn rhoi i chi guys 5 neu 10 munud. 251 00:19:13,210 --> 00:19:15,690 Ac os oes gennych unrhyw gwestiynau yn y cyfamser tra eich bod yn codio, 252 00:19:15,690 --> 00:19:17,710 gofynnwch iddyn nhw yn uchel. 253 00:19:17,710 --> 00:19:23,080 Felly, os ydych yn cyrraedd pwynt glynu, dim ond gofyn. 254 00:19:23,080 --> 00:19:26,030 Gadewch i mi wybod, gadewch i bawb arall wybod. 255 00:19:26,030 --> 00:19:28,160 Gweithiwch gyda'ch cymydog hefyd. 256 00:19:28,160 --> 00:19:30,360 [Daniel] Rydym yn unig yn gweithredu pop ar hyn o bryd? >> Just pop. 257 00:19:30,360 --> 00:19:34,200 Er y gallwch gopïo gweithredu wthio os hoffech 258 00:19:34,200 --> 00:19:37,780 fel y bydd y profion yn gweithio. 259 00:19:37,780 --> 00:19:41,940 Oherwydd ei fod yn anodd i brofi pethau mynd i mewn i - 260 00:19:41,940 --> 00:19:49,030 neu, mae'n anodd i brofi pethau popping allan o bentwr os nad oes unrhyw beth yn y pentwr i ddechrau. 261 00:19:49,030 --> 00:19:55,250 >> Beth yw pop i fod i gael eu dychwelyd? Mae'r elfen o frig y pentwr. 262 00:19:55,250 --> 00:20:01,260 Mae i fod i gael yr elfen oddi ar ben y pentwr 263 00:20:01,260 --> 00:20:05,780 ac yna lleihau a maint y pentwr, 264 00:20:05,780 --> 00:20:07,810 ac yn awr ydych wedi colli'r elfen ar y top. 265 00:20:07,810 --> 00:20:11,420 Ac yna i chi ddychwelyd yr elfen ar y top. 266 00:20:11,420 --> 00:20:20,080 [Myfyrwyr, annealladwy] 267 00:20:20,080 --> 00:20:28,810 [Hardison] Felly beth sy'n digwydd os ydych yn gwneud hynny? [Myfyrwyr, annealladwy] 268 00:20:28,810 --> 00:20:34,000 Beth sy'n dod i ben i fyny digwydd yw eich bod yn ôl pob tebyg gael mynediad naill ai 269 00:20:34,000 --> 00:20:37,350 ddim yn elfen sydd wedi ei ymgychwyn eto, fel bod eich cyfrifiad 270 00:20:37,350 --> 00:20:39,990 o ble mae'r elfen olaf yn i ffwrdd. 271 00:20:39,990 --> 00:20:46,260 Felly yma, os ydych yn sylwi, yn gwthio, rydym yn cyrchu llinynnau ar yr elfen s.size 272 00:20:46,260 --> 00:20:48,560 oherwydd ei fod yn fynegai newydd. 273 00:20:48,560 --> 00:20:51,460 Mae'n brig newydd y pentwr. 274 00:20:51,460 --> 00:21:01,100 Tra yn pop, s.size yn mynd i fod y lle nesaf, 275 00:21:01,100 --> 00:21:05,210 y gofod sydd ar ben yr holl elfennau yn eich pentwr. 276 00:21:05,210 --> 00:21:10,050 Felly nid yw'r elfen uchaf-y rhan fwyaf ar s.size, 277 00:21:10,050 --> 00:21:14,930 ond yn hytrach, mae'n oddi tano. 278 00:21:14,930 --> 00:21:19,640 >> Y peth arall i'w wneud pan fyddwch yn - mewn pop, 279 00:21:19,640 --> 00:21:22,030 ei oes rhaid i chi lleihau a maint. 280 00:21:22,030 --> 00:21:28,750 Os ydych yn cofio yn ôl at ein diagram bach iawn yma, 281 00:21:28,750 --> 00:21:30,980 mewn gwirionedd, yr unig beth a welsom yn digwydd pan fyddwn yn galw pop 282 00:21:30,980 --> 00:21:36,150 oedd bod gostwng maint hwn, yn gyntaf i 2, ac yna i 1. 283 00:21:36,150 --> 00:21:42,620 Yna, pan fyddwn yn gwthio elfen newydd ar, bydd yn mynd ymlaen yn y fan a'r lle cywir. 284 00:21:42,620 --> 00:21:49,610 [Basil] Os yw'r s.size yw 2, ni fyddai yna mae'n mynd i'r elfen 2, 285 00:21:49,610 --> 00:21:54,400 ac yna byddech eisiau i pop yr elfen honno i ffwrdd? 286 00:21:54,400 --> 00:21:59,510 Felly, os ydym yn mynd i - >> Felly, gadewch i ni edrych ar hyn eto. 287 00:21:59,510 --> 00:22:07,730 Os yw hyn yn ein stac ar y pwynt hwn 288 00:22:07,730 --> 00:22:12,130 ac rydym yn galw pop, 289 00:22:12,130 --> 00:22:16,150 lle y mynegai yw'r elfen uchaf-y rhan fwyaf o? 290 00:22:16,150 --> 00:22:19,300 [Basil] Ar 2, ond mae'n mynd i pop 3. >> Iawn. 291 00:22:19,300 --> 00:22:24,220 Felly dyna lle mae ein maint yn 3, ond rydym am i pop yr elfen ar mynegai 2. 292 00:22:24,220 --> 00:22:29,900 Mae'n y math hwnnw nodweddiadol oddi ar gan un sydd gennych yn yr sero-mynegeio araeau. 293 00:22:29,900 --> 00:22:36,430 Felly, ydych chi eisiau i pop y drydedd elfen, ond nid yw'r drydedd elfen ar fynegai 3. 294 00:22:36,430 --> 00:22:39,430 A'r rheswm nad oes raid i ni wneud bod 1 minws pan fyddwn ni'n gwthio 295 00:22:39,430 --> 00:22:44,120 yw oherwydd ar hyn o bryd, byddwch yn sylwi bod yr elfen uchaf-y rhan fwyaf, 296 00:22:44,120 --> 00:22:47,600 pe baem yn gwthio rhywbeth arall ar y pentwr ar y pwynt hwn, 297 00:22:47,600 --> 00:22:50,360 byddem yn awyddus i wthio yn fynegai 3. 298 00:22:50,360 --> 00:23:03,550 Ac dim ond fel y digwydd bod y maint a'r mynegeion llinell i fyny pan fyddwch yn gwthio. 299 00:23:03,550 --> 00:23:06,960 >> Pwy sy'n cael gweithredu pentwr yn gweithio? 300 00:23:06,960 --> 00:23:09,690 Rydych chi wedi cael pentwr weithio un. A oes gennych pop yn gweithio eto? 301 00:23:09,690 --> 00:23:11,890 [Daniel] Ydw. Rwy'n credu hynny. 302 00:23:11,890 --> 00:23:14,610 >> Rhaglen yn rhedeg ac nid SEG ffawtio, mae'n argraffu? 303 00:23:14,610 --> 00:23:17,520 A yw'n argraffu "llwyddiant" pan fyddwch yn ei redeg? 304 00:23:17,520 --> 00:23:22,630 Yeah. Gwnewch stac, rhedeg, os bydd yn argraffu allan "llwyddiant" ac nid yw'n mynd ffyniant, 305 00:23:22,630 --> 00:23:26,000 yna i gyd yn dda. 306 00:23:26,000 --> 00:23:34,070 Mae pob hawl. Gadewch i ni fynd drosodd i'r offer yn gyflym iawn, 307 00:23:34,070 --> 00:23:46,100 a byddwn yn cerdded drwy hyn. 308 00:23:46,100 --> 00:23:51,110 Os ydym yn edrych ar yr hyn sy'n digwydd yma gyda pop, 309 00:23:51,110 --> 00:23:55,220 Daniel, beth oedd y peth cyntaf a wnaethoch? 310 00:23:55,220 --> 00:23:58,850 [Daniel] Os s.size yn fwy na 0. 311 00:23:58,850 --> 00:24:03,120 [Hardison] Iawn. A pham wnaethoch chi hynny? 312 00:24:03,120 --> 00:24:05,610 [Daniel] I wneud yn siwr bod rhywbeth y tu mewn i'r pentwr. 313 00:24:05,610 --> 00:24:10,950 [Hardison] Hawl. Byddwch am brofi i wneud yn siŵr bod s.size yn fwy na 0; 314 00:24:10,950 --> 00:24:13,280 fel arall, beth ydych chi eisiau bod wedi digwydd? 315 00:24:13,280 --> 00:24:16,630 [Daniel] null Dychwelyd? Null Dychwelyd >>, yn union. 316 00:24:16,630 --> 00:24:20,740 Felly, os s.size yn fwy na 0. Yna, beth ydyn ni'n mynd i'w wneud? 317 00:24:20,740 --> 00:24:25,890 Beth ydym ni'n ei wneud os nad yw'r pentwr yn wag? 318 00:24:25,890 --> 00:24:31,210 [Stella] Rydych lleihau a faint? >> Byddwch yn lleihau a maint, iawn. 319 00:24:31,210 --> 00:24:34,440 Felly, sut wnaethoch chi hynny? >> S.size--. 320 00:24:34,440 --> 00:24:37,030 [Hardison] Fawr. Ac yna beth wnaethoch chi? 321 00:24:37,030 --> 00:24:44,140 [Stella] Ac yna y dywedais s.string dychwelyd [s.size]. 322 00:24:44,140 --> 00:24:48,560 [Hardison] Fawr. 323 00:24:48,560 --> 00:24:51,940 Fel arall, byddwch yn dychwelyd null. Ie, Sam? 324 00:24:51,940 --> 00:24:55,510 [Sam] Pam nad yw angen iddo fod yn s.size + 1? 325 00:24:55,510 --> 00:24:58,430 [Hardison] Plus 1? >> Yeah. >> Got iddo. 326 00:24:58,430 --> 00:25:00,980 [Sam] Roeddwn i'n meddwl oherwydd eich bod yn cymryd 1 allan, 327 00:25:00,980 --> 00:25:04,290 yna rydych chi'n mynd i fod yn dychwelyd nad yw'r un y maent yn gofyn amdano. 328 00:25:04,290 --> 00:25:09,400 [Hardison] Ac mae hyn yn unig oedd hyn yr ydym yn sôn amdano gyda'r holl fater o 0 mynegai. 329 00:25:09,400 --> 00:25:11,380 Felly, os ydym yn chwyddo yn ôl dros yma. 330 00:25:11,380 --> 00:25:15,650 Os ydym yn edrych ar y boi iawn yma, gallwch weld bod pan fyddwn yn galw, 331 00:25:15,650 --> 00:25:19,340 rydym yn popping yr elfen yn mynegai 2. 332 00:25:19,340 --> 00:25:25,200 >> Felly, rydym yn lleihau ein maint yn gyntaf, yna mae ein maint yn cyfateb ein mynegai. 333 00:25:25,200 --> 00:25:39,650 Os nad ydym yn lleihau a maint yn gyntaf, yna mae'n rhaid i ni wneud maint -1 a wedyn lleihau a. 334 00:25:39,650 --> 00:25:45,270 Great. I gyd yn dda? 335 00:25:45,270 --> 00:25:47,530 Unrhyw gwestiynau am hyn? 336 00:25:47,530 --> 00:25:54,050 Mae yna nifer o ffyrdd gwahanol i ysgrifennu hyn yn ogystal. 337 00:25:54,050 --> 00:26:03,290 Yn wir, gallwn wneud rhywbeth hyd yn oed - gallwn wneud un-leinin. 338 00:26:03,290 --> 00:26:05,770 Gallwn wneud elw un llinell. 339 00:26:05,770 --> 00:26:12,980 Felly gallwn mewn gwirionedd yn lleihau a cyn i ni ddychwelyd drwy wneud hynny. 340 00:26:12,980 --> 00:26:18,320 Felly roi'r - cyn y s.size. 341 00:26:18,320 --> 00:26:22,060 Mae hynny'n gwneud y llinell mewn gwirionedd trwchus. 342 00:26:22,060 --> 00:26:30,940 Pan fydd y gwahaniaeth rhwng y -. Maint s a s.size-- 343 00:26:30,940 --> 00:26:40,130 yw bod hyn Postfix - maent yn ei alw Postfix oherwydd bod y - yn dod ar ôl y s.size-- 344 00:26:40,130 --> 00:26:47,430 yn golygu bod s.size yn cael ei werthuso at ddibenion ddod o hyd i'r mynegai 345 00:26:47,430 --> 00:26:50,410 fel y mae ar hyn o bryd pan fydd y llinell hon yn cael ei weithredu, 346 00:26:50,410 --> 00:26:54,290 ac yna mae hyn - sy'n digwydd ar ôl y llinell yn cael ei ddienyddio. 347 00:26:54,290 --> 00:27:00,340 Ar ôl yr elfen yn mynegai s.size ceir mynediad. 348 00:27:00,340 --> 00:27:07,260 Ac nid dyna'r hyn yr ydym ei eisiau, gan ein bod am i'r lleihau a ddigwydd gyntaf. 349 00:27:07,260 --> 00:27:10,990 Othewise, rydyn ni'n mynd i cael gafael ar y array, yn effeithiol, y tu allan i ffiniau. 350 00:27:10,990 --> 00:27:16,850 Rydym yn mynd i cael gafael ar y elfen uwchben yr un yr ydym mewn gwirionedd am gael mynediad. 351 00:27:16,850 --> 00:27:23,840 Yeah, Sam? >> Ydy hi'n gyflymach na defnyddio RAM llai i'w wneud yn un llinell neu beidio? 352 00:27:23,840 --> 00:27:29,620 [Hardison] Onest, mae'n wir yn dibynnu arnynt. 353 00:27:29,620 --> 00:27:34,220 [Sam, annealladwy] >> Yeah, mae'n dibynnu. Gallwch wneud triciau compiler 354 00:27:34,220 --> 00:27:41,580 i gael y compiler i gydnabod hynny, fel arfer, yr wyf yn dychmygu. 355 00:27:41,580 --> 00:27:44,840 >> Felly rydym wedi crybwyll ychydig am y optimization compiler pethau 356 00:27:44,840 --> 00:27:47,400 y gallwch ei wneud wrth lunio, 357 00:27:47,400 --> 00:27:50,580 a dyna'r math o beth y gallai casglwr yn gallu chyfrif i maes, 358 00:27:50,580 --> 00:27:54,710 fel oh, hey, efallai y gallaf wneud hyn i gyd mewn un gweithred, 359 00:27:54,710 --> 00:27:59,420 yn hytrach na llwytho y newidyn maint mewn o RAM, 360 00:27:59,420 --> 00:28:03,770 decrementing ei, ei storio yn ôl allan, ac yna llwytho yn ôl i mewn eto 361 00:28:03,770 --> 00:28:08,000 i brosesu gweddill y llawdriniaeth hon. 362 00:28:08,000 --> 00:28:10,710 Ond yn nodweddiadol, na, nid dyma'r math o beth 363 00:28:10,710 --> 00:28:20,770 mae hynny'n mynd i wneud eich rhaglen sylweddol gyflymach. 364 00:28:20,770 --> 00:28:26,000 Unrhyw gwestiynau mwy o wybodaeth am pentyrrau? 365 00:28:26,000 --> 00:28:31,360 >> Felly, gwthio a neidio. Os ydych chi guys am roi cynnig ar y rhifyn haciwr, 366 00:28:31,360 --> 00:28:33,660 hyn yr ydym wedi ei wneud yn y rhifyn haciwr yn cael mynd mewn gwirionedd 367 00:28:33,660 --> 00:28:37,670 a gwneud y pentwr tyfu yn ddeinamig. 368 00:28:37,670 --> 00:28:43,190 Mae'r her yno yn bennaf i fyny yma yn y swyddogaeth gwthio, 369 00:28:43,190 --> 00:28:48,820 at chyfrif i maes sut i wneud y casgliad yn tyfu 370 00:28:48,820 --> 00:28:52,450 â'ch bod yn cadw gwthio elfennau mwy a mwy ar y pentwr. 371 00:28:52,450 --> 00:28:56,000 Nid yw'n mewn gwirionedd yn rhy fawr cod ychwanegol. 372 00:28:56,000 --> 00:29:00,080 Dim ond galwad i - mae'n rhaid i chi gofio i gael y galwadau i'r malloc yno yn iawn, 373 00:29:00,080 --> 00:29:03,310 ac yna chyfrif i maes pan fyddwch chi'n mynd i alw realloc. 374 00:29:03,310 --> 00:29:06,090 Mae hynny'n her hwyl os oes gennych ddiddordeb. 375 00:29:06,090 --> 00:29:11,550 >> Ond am y tro, gadewch i ni symud ymlaen, a gadewch i ni siarad am ciwiau. 376 00:29:11,550 --> 00:29:15,680 Sgroliwch drwy yma. 377 00:29:15,680 --> 00:29:19,340 Mae'r ciw yn frawd neu chwaer agos y pentwr. 378 00:29:19,340 --> 00:29:25,380 Felly, yn y simnai, pethau a oedd yn rhoi diwethaf 379 00:29:25,380 --> 00:29:28,810 oedd y pethau cyntaf i wedyn yn cael eu hadalw. 380 00:29:28,810 --> 00:29:33,600 Rydym wedi cael yr olaf i mewn, cyntaf allan, neu LIFO, archebu. 381 00:29:33,600 --> 00:29:38,390 Tra yn y ciw, fel y byddech yn ei ddisgwyl o'r adeg pan fyddwch yn sefyll mewn llinell, 382 00:29:38,390 --> 00:29:41,980 y person cyntaf i fynd i mewn llinell, y peth cyntaf i fynd i mewn i'r ciw, 383 00:29:41,980 --> 00:29:47,630 yw'r peth cyntaf sy'n cael ei adfer gan y ciw. 384 00:29:47,630 --> 00:29:51,490 Ciwiau yn cael eu defnyddio'n aml hefyd pan fyddwn yn delio gyda graffiau, 385 00:29:51,490 --> 00:29:55,560 fel yr ydym yn siarad am yn gryno gyda staciau, 386 00:29:55,560 --> 00:30:00,260 a chiwiau hefyd yn ddefnyddiol ar gyfer criw o bethau eraill. 387 00:30:00,260 --> 00:30:06,180 Un peth sy'n dod i fyny yn aml yn ceisio cynnal, er enghraifft, 388 00:30:06,180 --> 00:30:12,310 rhestr datrys o elfennau. 389 00:30:12,310 --> 00:30:17,650 A allwch chi wneud hyn gydag amrywiaeth. Gallwch cadw rhestr datrys o bethau mewn amrywiaeth, 390 00:30:17,650 --> 00:30:20,650 ond lle sy'n cael anodd wedyn byddwch bob amser yn rhaid i chi ddod o hyd i 391 00:30:20,650 --> 00:30:26,160 y lle priodol i fewnosod y peth nesaf. 392 00:30:26,160 --> 00:30:28,250 Felly, os oes gennych amrywiaeth o rifau, 1 hyd at 10, 393 00:30:28,250 --> 00:30:31,630 ac yna rydych am ehangu hynny i bob un o'r rhifau 1 trwy 100, 394 00:30:31,630 --> 00:30:33,670 ac eich bod yn cael y rhifau hyn mewn trefn ar hap ac yn ceisio cadw popeth 395 00:30:33,670 --> 00:30:40,650 didoli wrth i chi fynd drwy, byddwch yn gorfod gwneud llawer o symud. 396 00:30:40,650 --> 00:30:43,910 Gyda rhai mathau o giwiau a rhai mathau o strwythurau data gwaelodol, 397 00:30:43,910 --> 00:30:46,670 gallwch chi mewn gwirionedd yn ei gadw'n weddol syml. 398 00:30:46,670 --> 00:30:50,640 Nid oes rhaid i chi ychwanegu rhywbeth ac yna ad-drefnu'r holl beth bob tro. 399 00:30:50,640 --> 00:30:56,770 Nid oes yn rhaid i chi wneud llawer o symud o'r elfennau mewnol o gwmpas. 400 00:30:56,770 --> 00:31:02,990 Pan fyddwn yn edrych ar ciw, byddwch yn gweld bod - hefyd yn queue.c yn y cod adran - 401 00:31:02,990 --> 00:31:10,950 y strwythur yr ydym wedi ei rhoi yn wir yn debyg i'r strwythur yr ydym yn rhoi i chi am pentwr. 402 00:31:10,950 --> 00:31:13,770 >> Mae un eithriad i hyn, a bod un eithriad 403 00:31:13,770 --> 00:31:21,700 yw ein bod yn cael y cyfanrif ychwanegol a elwir yn y pen, 404 00:31:21,700 --> 00:31:28,120 a'r pennaeth yma am gadw golwg ar y pennaeth y ciw, 405 00:31:28,120 --> 00:31:32,160 neu yr elfen gyntaf yn y ciw. 406 00:31:32,160 --> 00:31:37,470 Gyda stac, roeddem yn gallu cadw golwg ar yr elfen ein bod am i adfer, 407 00:31:37,470 --> 00:31:40,800 neu ben y pentwr, gan ddefnyddio dim ond y maint, 408 00:31:40,800 --> 00:31:44,220 tra gyda ciw, rydym yn gorfod delio â dod i ben gyferbyn. 409 00:31:44,220 --> 00:31:49,000 Rydym yn ceisio tac pethau ar ar y diwedd, ond yna'n dychwelyd pethau o'r tu blaen. 410 00:31:49,000 --> 00:31:54,640 Felly, yn effeithiol, gyda'r pennaeth, mae gennym y mynegai o ddechrau'r y ciw, 411 00:31:54,640 --> 00:31:58,920 a maint yn rhoi i ni y mynegai o ddiwedd y ciw 412 00:31:58,920 --> 00:32:03,730 fel y gallwn adfer pethau gan y pennaeth ac yn ychwanegu pethau ar y gynffon. 413 00:32:03,730 --> 00:32:06,890 Er bod y simnai, roeddem ond yn delio â ben y pentwr. 414 00:32:06,890 --> 00:32:08,900 Rydym byth yn gorfod cael gafael ar waelod y pentwr. 415 00:32:08,900 --> 00:32:12,220 Byddwn ond yn ychwanegu pethau at y brig ac yn cymryd pethau oddi ar y top 416 00:32:12,220 --> 00:32:17,470 felly nid oedd angen y maes ychwanegol y tu mewn i'n strwythur. 417 00:32:17,470 --> 00:32:20,590 Ydy hynny yn gyffredinol yn gwneud synnwyr? 418 00:32:20,590 --> 00:32:27,670 Mae pob hawl. Ie, Charlotte? [Charlotte, annealladwy] 419 00:32:27,670 --> 00:32:32,660 [Hardison] Dyna gwestiwn mawr, a dyna oedd un a ddaeth i fyny mewn darlith. 420 00:32:32,660 --> 00:32:36,290 Efallai bydd cerdded drwy ychydig o enghreifftiau yn dangos pam 421 00:32:36,290 --> 00:32:41,400 nid ydym am i ddefnyddio llinynnau [0] fel pennaeth y ciw. 422 00:32:41,400 --> 00:32:46,770 >> Felly dychmygwch ein bod wedi ein ciw, rydym yn mynd i alw ciw. 423 00:32:46,770 --> 00:32:49,210 Ar y dechrau, pan fyddwn wedi instantiated newydd ei, 424 00:32:49,210 --> 00:32:53,330 pan fyddwn wedi datgan yn unig, nid ydym wedi ymgychwyn unrhyw beth. 425 00:32:53,330 --> 00:32:56,790 Mae hyn i gyd garbage. Felly, wrth gwrs rydym am wneud yn siŵr ein bod yn ymgychwyn 426 00:32:56,790 --> 00:33:00,950 y maint a'r caeau pen i fod yn 0, rhywbeth rhesymol. 427 00:33:00,950 --> 00:33:05,770 Gallem hefyd yn mynd yn ei flaen ac yn null allan yr elfennau yn ein ciw. 428 00:33:05,770 --> 00:33:09,930 Ac i wneud hwn yn addas diagram, yn sylwi bod yn awr gall ein ciw ond yn dal tair elfen; 429 00:33:09,930 --> 00:33:13,150 tra gallai ein pentwr cynnal pedwar, gall ein ciw ond yn dal tri. 430 00:33:13,150 --> 00:33:18,680 A dim ond i wneud y ffit diagram. 431 00:33:18,680 --> 00:33:26,150 Y peth cyntaf sy'n digwydd yma yw ein enqueue y llinyn "hi". 432 00:33:26,150 --> 00:33:30,380 Ac yn union fel y buom gyda'r simnai, dim byd mawr yn wahanol yma, 433 00:33:30,380 --> 00:33:39,230 rydym yn taflu y llinyn ar o linynnau [0] a cynyddiad ein maint erbyn 1. 434 00:33:39,230 --> 00:33:42,720 Rydym yn enqueue "bye", mae'n cael ei roi ar. 435 00:33:42,720 --> 00:33:45,870 Felly, mae hyn yn edrych fel pentwr ar gyfer y rhan fwyaf. 436 00:33:45,870 --> 00:33:53,230 Rydym yn dechrau yma, elfen newydd, elfen newydd, maint yn cadw mynd i fyny. 437 00:33:53,230 --> 00:33:56,330 Beth sy'n digwydd ar yr adeg hon pan fyddwn eisiau dequeue rhywbeth? 438 00:33:56,330 --> 00:34:01,280 Pan ydym am dequeue, sef yr elfen yr ydym am ei dequeue? 439 00:34:01,280 --> 00:34:04,110 [Basil] Strings [0]. >> Zero. Yn union i'r dde, Basil. 440 00:34:04,110 --> 00:34:10,960 Rydym yn awyddus i gael gwared ar y llinyn cyntaf, mae hyn yn un, "hi". 441 00:34:10,960 --> 00:34:13,170 Felly beth oedd y peth arall sy'n newid? 442 00:34:13,170 --> 00:34:17,010 Hysbysiad pan fyddwn yn popped rhywbeth oddi ar y pentwr, rydym yn unig newid y maint, 443 00:34:17,010 --> 00:34:22,080 ond yma, rydym wedi cael un neu ddau o bethau sy'n newid. 444 00:34:22,080 --> 00:34:27,440 Nid yn unig y mae'r newid maint ond mae'r newidiadau pen. 445 00:34:27,440 --> 00:34:31,020 Mae hyn yn mynd yn ôl at Charlotte pwynt yn gynharach: 446 00:34:31,020 --> 00:34:38,699 pam y mae gennym y pennaeth yn ogystal? 447 00:34:38,699 --> 00:34:42,110 A yw'n gwneud synnwyr yn awr, Charlotte? Kind >> o. 448 00:34:42,110 --> 00:34:47,500 [Hardison] Math o? Felly beth ddigwyddodd pan fyddwn yn dequeued? 449 00:34:47,500 --> 00:34:54,340 Beth oedd y pennaeth yn gwneud hynny bellach yn ddiddorol? 450 00:34:54,340 --> 00:34:56,449 [Charlotte] O, oherwydd ei fod yn newid - iawn. Rwy'n gweld. 451 00:34:56,449 --> 00:35:02,090 Oherwydd bod y pen - lle mae'r pennaeth yn pwyntio at newidiadau o ran y lleoliad. 452 00:35:02,090 --> 00:35:07,200 Mae'n bellach yn wastad yr un mynegai sero. >> Yeah, yn union. 453 00:35:07,200 --> 00:35:17,660 Beth ddigwyddodd oedd, os dequeueing elfen uchel 454 00:35:17,660 --> 00:35:20,590 ei wneud ac nid oedd gennym y maes hwn pen 455 00:35:20,590 --> 00:35:26,880 oherwydd ein bod bob amser yn galw llinyn yma ar 0 mynegai y pennaeth ein ciw, 456 00:35:26,880 --> 00:35:30,170 yna byddai'n rhaid i ni symud gweddill y ciw i lawr. 457 00:35:30,170 --> 00:35:36,010 Byddai'n rhaid i ni symud "bye" o o dannau [1] i llinynnau [0]. 458 00:35:36,010 --> 00:35:38,760 A llinynnau [2] i lawr i llinynnau [1]. 459 00:35:38,760 --> 00:35:43,050 A byddai'n rhaid i ni wneud hyn ar gyfer y rhestr gyfan o elfennau, 460 00:35:43,050 --> 00:35:45,110 yr amrywiaeth cyfan o elfennau. 461 00:35:45,110 --> 00:35:50,490 A phan fyddwn ni'n gwneud hyn gydag amrywiaeth, sy'n mynd yn wirioneddol gostus. 462 00:35:50,490 --> 00:35:53,340 Felly yma, nid yw'n llawer fawr. Rydym yn unig wedi tair elfen yn ein casgliad. 463 00:35:53,340 --> 00:35:57,230 Ond pe bai gennym ciw o fil o elfennau neu miliwn o elfennau, 464 00:35:57,230 --> 00:36:00,060 ac yna yn sydyn, rydym yn dechrau gwneud criw o dequeue galw i gyd mewn dolen, 465 00:36:00,060 --> 00:36:03,930 pethau yn wir yn mynd i arafu i lawr gan ei fod yn symud popeth i lawr yn gyson. 466 00:36:03,930 --> 00:36:07,320 Rydych yn gwybod, symud o 1, newid erbyn 1, newid erbyn 1, newid erbyn 1. 467 00:36:07,320 --> 00:36:13,650 Yn hytrach, rydym yn defnyddio y pen hwn, rydym yn galw ei fod yn "pwyntydd" hyd yn oed er nad yw'n wir yn pwyntydd 468 00:36:13,650 --> 00:36:16,430 yn yr ystyr caeth; nid yw'n fath pwyntydd. 469 00:36:16,430 --> 00:36:19,410 Nid yw'n 'an * int neu * torgoch neu unrhyw beth fel' na. 470 00:36:19,410 --> 00:36:28,930 Ond mae'n pwyntio neu nodi y pennaeth ein ciw. Yeah? 471 00:36:28,930 --> 00:36:38,800 >> [Myfyrwyr] Sut mae dequeue gwybod i ychydig pop oddi ar beth bynnag sydd ar ben? 472 00:36:38,800 --> 00:36:43,620 [Hardison] Sut mae dequeue yn gwybod sut i pop oddi ar beth bynnag sydd wrth y pen? Hawl >>, yeah. 473 00:36:43,620 --> 00:36:49,050 >> Beth mae'n edrych arno yw dim ond beth bynnag y maes pennaeth yn cael ei osod i. 474 00:36:49,050 --> 00:36:52,710 Felly, yn yr achos cyntaf hwn, os edrychwn i'r dde yma, 475 00:36:52,710 --> 00:36:55,690 ein pen yw 0, 0 mynegai. >> Iawn. 476 00:36:55,690 --> 00:37:00,500 [Hardison] Felly, 'i jyst yn dweud iawn, yn dda, yr elfen yn mynegai 0, y llinyn "hi", 477 00:37:00,500 --> 00:37:03,050 yw'r elfen ar ben ein ciw. 478 00:37:03,050 --> 00:37:05,570 Felly, rydym yn mynd i dequeue y boi. 479 00:37:05,570 --> 00:37:09,800 A fydd yr elfen sy'n cael ei ddychwelyd i'r galwr. 480 00:37:09,800 --> 00:37:14,540 Ie, Saad? >> Felly, y pen yn y bôn yn gosod y - lle rydych chi'n mynd i mynegai iddo? 481 00:37:14,540 --> 00:37:17,750 Dyna ddechrau ohono? >> Yeah. >> Iawn. 482 00:37:17,750 --> 00:37:22,900 [Hardison] Mae hynny'n dod yn y dechrau newydd ar gyfer ein casgliad. 483 00:37:22,900 --> 00:37:28,930 Felly, pan fyddwch yn dequeue rhywbeth, y cyfan mae'n rhaid i chi ei wneud yw cael mynediad i'r elfen ar mynegai q.head, 484 00:37:28,930 --> 00:37:32,240 a bydd hynny'n elfen yr ydych am ei dequeue. 485 00:37:32,240 --> 00:37:34,930 Rhaid i chi hefyd lleihau a maint. 486 00:37:34,930 --> 00:37:39,430 Byddwn yn gweld mewn ychydig lle mae pethau yn cael ychydig yn anodd gyda hyn. 487 00:37:39,430 --> 00:37:46,520 Rydym yn dequeue, ac yn awr, os ydym enqueue eto, 488 00:37:46,520 --> 00:37:51,300 lle rydym yn enqueue? 489 00:37:51,300 --> 00:37:55,000 Ble mae'r elfen nesaf yn mynd yn ein ciw? 490 00:37:55,000 --> 00:37:57,980 Dywedwch ydym am enqueue y llinyn "CS". 491 00:37:57,980 --> 00:38:02,240 Bydd i ba mynegai y mae'n mynd? [Mae myfyrwyr yn] Strings [2]. >> Dau. 492 00:38:02,240 --> 00:38:04,980 Pam 2 ac nid 0? 493 00:38:04,980 --> 00:38:13,570 [Basil] Oherwydd yn awr y pennaeth yw 1, felly dyna fel y dechrau y rhestr? 494 00:38:13,570 --> 00:38:21,220 [Hardison] Hawl. A beth yn dynodi diwedd y rhestr? 495 00:38:21,220 --> 00:38:23,290 Beth oedd rydym yn ei defnyddio i ddynodi diwedd ein ciw? 496 00:38:23,290 --> 00:38:25,970 Y pennaeth yw'r pennaeth ein ciw, y dechrau ein ciw. 497 00:38:25,970 --> 00:38:29,530 Beth yw diwedd ein ciw? [Mae myfyrwyr yn] Maint. >> Maint, yn union. 498 00:38:29,530 --> 00:38:36,360 Felly mae ein elfennau newydd yn mynd i mewn ar faint, a'r elfennau yr ydym yn eu cymryd i ffwrdd yn dod oddi ar ben. 499 00:38:36,360 --> 00:38:45,390 Pan fyddwn yn enqueue i'r elfen nesaf, rydym yn ei roi i mewn yn maint. 500 00:38:45,390 --> 00:38:48,530 [Myfyrwyr] Cyn i chi roi hynny fodd bynnag, faint oedd 1, dde? 501 00:38:48,530 --> 00:38:55,690 [Hardison] Hawl. Felly, nid eithaf yn y maint. + Nid yw maint, +1, ond pen +. 502 00:38:55,690 --> 00:38:59,990 Oherwydd ein bod yn symud popeth gan y swm pen. 503 00:38:59,990 --> 00:39:14,270 Felly dyma, yn awr rydym wedi cael ciw o faint 1 sy'n dechrau ar fynegai 1. 504 00:39:14,270 --> 00:39:20,730 Mae'r gynffon yn fynegai 2. Ydw? 505 00:39:20,730 --> 00:39:25,780 >> [Myfyrwyr] Beth sy'n digwydd pan fyddwch yn dequeue llinynnau [0], ac y tannau 'slotiau mewn cof 506 00:39:25,780 --> 00:39:29,420 dim ond yn cael eu gwagio, yn y bôn, neu eu hanghofio yn unig? 507 00:39:29,420 --> 00:39:34,700 [Hardison] Yeah. Yn yr ystyr hwn, rydym yn unig yn anghofio nhw. 508 00:39:34,700 --> 00:39:42,640 Os ydym yn storio copïau ohonynt ar gyfer - 509 00:39:42,640 --> 00:39:46,310 Bydd strwythurau data llawer yn aml yn storio eu copïau eu hunain o'r elfennau 510 00:39:46,310 --> 00:39:51,760 fel na fydd y person sy'n rheoli'r strwythur data oes rhaid i chi boeni 511 00:39:51,760 --> 00:39:53,650 am ble holl awgrymiadau yn mynd. 512 00:39:53,650 --> 00:39:56,000 Mae'r strwythur data a gedwir ar bopeth, yn cynnal ar yr holl gopïau, 513 00:39:56,000 --> 00:39:59,580 i wneud yn siŵr bod popeth yn parhau yn briodol. 514 00:39:59,580 --> 00:40:03,140 Fodd bynnag, yn yr achos hwn, mae'r strwythurau data yn unig, er symlrwydd, 515 00:40:03,140 --> 00:40:05,580 nid ydynt yn gwneud copïau o unrhyw beth yr ydym yn storio ynddynt. 516 00:40:05,580 --> 00:40:08,630 [Myfyrwyr] Felly y mae y casgliad di-dor o -? >> Ydy. 517 00:40:08,630 --> 00:40:14,350 Os ydym yn edrych yn ôl ar yr hyn y diffiniad yn y strwythur hwn, mae'n. 518 00:40:14,350 --> 00:40:19,110 Dim ond amrywiaeth safonol fel chi wedi ei weld, 519 00:40:19,110 --> 00:40:24,280 amrywiaeth o * torgoch s. 520 00:40:24,280 --> 00:40:26,340 A yw hynny'n -? >> Yeah, yr oeddwn yn meddwl tybed 521 00:40:26,340 --> 00:40:29,130 os byddwch yn y pen draw yn rhedeg allan o gof, i ryw raddau, 522 00:40:29,130 --> 00:40:32,330 os oes gennych yr holl mannau gwag yn eich casgliad? 523 00:40:32,330 --> 00:40:36,390 [Hardison] Yeah, mae hynny'n bwynt da. 524 00:40:36,390 --> 00:40:41,530 >> Os ydym yn edrych ar yr hyn sydd wedi digwydd yn awr ar y pwynt hwn, 525 00:40:41,530 --> 00:40:46,350 rydym wedi llenwi ein ciw, mae'n edrych fel. 526 00:40:46,350 --> 00:40:50,390 Ond nid ydym wedi llenwi mewn gwirionedd i fyny ein ciw 527 00:40:50,390 --> 00:40:57,710 oherwydd bod gennym ciw sy'n maint 2, ond mae'n dechrau ar mynegai 1, 528 00:40:57,710 --> 00:41:02,160 oherwydd dyna lle mae ein pwyntydd pen. 529 00:41:02,160 --> 00:41:08,400 Fel yr oeddech yn dweud, yr elfen honno yn y llinynnau [0], ar mynegai 0 Nid yw yno mewn gwirionedd. 530 00:41:08,400 --> 00:41:10,450 Dyw hi ddim yn ein ciw anymore. 531 00:41:10,450 --> 00:41:16,460 Rydym nid yn unig yn trafferthu i fynd i mewn a ysgrifennu drosto pan fyddwn yn ei dequeued. 532 00:41:16,460 --> 00:41:18,700 Felly hyd yn oed er ei fod yn edrych fel ein bod wedi rhedeg allan o gof, nid ydym mewn gwirionedd. 533 00:41:18,700 --> 00:41:23,270 Y fan honno ar gael i ni eu defnyddio. 534 00:41:23,270 --> 00:41:29,310 Mae ymddygiad priodol, pe baem yn ceisio ac yn gyntaf dequeue rhywbeth 535 00:41:29,310 --> 00:41:34,420 fel "bye", a fyddai'n pop bye i ffwrdd. 536 00:41:34,420 --> 00:41:38,460 Nawr ein ciw yn dechrau ar mynegai 2 ac o faint 1. 537 00:41:38,460 --> 00:41:42,240 Ac yn awr os ydym yn ceisio ac yn enqueue rhywbeth eto, dyweder 50, 538 00:41:42,240 --> 00:41:47,880 Dylai 50 yn mynd yn y fan a'r lle yn mynegai 0 539 00:41:47,880 --> 00:41:51,270 oherwydd ei fod yn dal i fod ar gael i ni. Ie, Saad? 540 00:41:51,270 --> 00:41:53,630 [Saad] yw hynny'n digwydd yn awtomatig? 541 00:41:53,630 --> 00:41:56,150 [Hardison] Nid yw'n digwydd yn eithaf awtomatig. Mae'n rhaid i chi wneud y math 542 00:41:56,150 --> 00:42:00,380 i wneud iddo weithio, ond yn ei hanfod yr hyn yr ydym wedi'i wneud yw ein bod wedi ei lapio yn unig o gwmpas. 543 00:42:00,380 --> 00:42:04,070 [Saad] A yw'n iawn os mae hyn yn cael twll yn y canol ohono? 544 00:42:04,070 --> 00:42:08,720 [Hardison] Mae'n os gallwn wneud y math gweithio allan yn iawn. 545 00:42:08,720 --> 00:42:15,470 >> Ac mae'n troi allan nad yw hynny mewn gwirionedd sy'n anodd i wneud gyda'r gweithredwr mod. 546 00:42:15,470 --> 00:42:20,040 Felly, yn union fel y gwnaethom gyda Cesar a'r pethau crypto, 547 00:42:20,040 --> 00:42:25,190 defnyddio mod, gallwn gael pethau i lapio o gwmpas ac yn dal i fynd 548 00:42:25,190 --> 00:42:28,090 o gwmpas ac o amgylch ac o gwmpas gyda ein ciw, 549 00:42:28,090 --> 00:42:32,180 gadw'r pwyntydd pen symud o gwmpas. 550 00:42:32,180 --> 00:42:38,840 Hysbysiad bod maint bob amser yn parchu y nifer o elfennau mewn gwirionedd o fewn y ciw. 551 00:42:38,840 --> 00:42:43,110 Ac mae'n dim ond y pwyntydd pen sy'n cadw seiclo drwy. 552 00:42:43,110 --> 00:42:49,660 Os ydym yn edrych ar beth ddigwyddodd yma, os ydym yn mynd yn ôl i'r dechrau, 553 00:42:49,660 --> 00:42:55,020 a 'ch jyst gwylio beth sy'n digwydd i'r pen 554 00:42:55,020 --> 00:42:58,240 pan fyddwn yn enqueue rhywbeth, ni ddigwyddodd dim i'r pen. 555 00:42:58,240 --> 00:43:00,970 Pan fyddwn yn enqueued rhywbeth arall, ni ddigwyddodd dim i'r pen. 556 00:43:00,970 --> 00:43:04,130 Gynted ag y byddwn dequeued rhywbeth, mae'r pennaeth yn mynd i fyny gan un. 557 00:43:04,130 --> 00:43:06,600 Rydym yn enqueued rhywbeth, dim byd yn digwydd i'r pen. 558 00:43:06,600 --> 00:43:11,060 Pan fyddwn yn dequeue rywbeth, yn sydyn y pennaeth yn cael ei cynyddran. 559 00:43:11,060 --> 00:43:14,660 Pan fyddwn yn enqueue rhywbeth, dim byd yn digwydd i'r pen. 560 00:43:14,660 --> 00:43:20,240 >> Beth fyddai'n digwydd ar y pwynt hwn pe baem yn dequeue rhywbeth eto? 561 00:43:20,240 --> 00:43:23,240 Unrhyw syniadau? Beth fyddai'n digwydd i'r pen? 562 00:43:23,240 --> 00:43:27,190 Beth ddylai ddigwydd i ben 563 00:43:27,190 --> 00:43:32,990 pe baem yn dequeue rhywbeth arall? 564 00:43:32,990 --> 00:43:35,400 Mae'r pennaeth ar hyn o bryd ar fynegai 2, 565 00:43:35,400 --> 00:43:38,920 sy'n golygu bod y pennaeth y ciw yw llinynnau [2]. 566 00:43:38,920 --> 00:43:44,280 [Myfyrwyr] Pa dychwelyd 0? >> Dylai ddychwelyd i 0. Dylai lapio yn ôl o gwmpas, yn union. 567 00:43:44,280 --> 00:43:48,440 Hyd yn hyn, bob tro y byddem ni'n ei alw dequeue, rydym wedi bod yn ychwanegu un at y pennaeth, 568 00:43:48,440 --> 00:43:50,960 ychwanegu un at y pennaeth, ychwanegu un at y pennaeth, ychwanegu un at y pennaeth. 569 00:43:50,960 --> 00:43:58,400 Cyn gynted ag y pwyntydd i'r pen yn cael at y mynegai ddiwethaf yn ein amrywiaeth, 570 00:43:58,400 --> 00:44:05,650 yna mae'n rhaid i lapio o gwmpas yn ôl i'r dechrau, ewch yn ôl i 0. 571 00:44:05,650 --> 00:44:09,900 [Charlotte] Beth sy'n pennu'r gallu y ciw mewn pentwr? 572 00:44:09,900 --> 00:44:13,120 [Hardison] Yn yr achos hwn, rydym wedi dim ond bod yn defnyddio cyson a ddiffinnir #. >> Iawn. 573 00:44:13,120 --> 00:44:19,590 [Hardison] Yn y gwir. Ffeil c, gallwch fynd i mewn a dail ag ef ychydig 574 00:44:19,590 --> 00:44:21,710 a'i gwneud mor fawr neu mor fach ag y dymunwch. 575 00:44:21,710 --> 00:44:25,310 [Charlotte] Felly pan fyddwch chi'n ei wneud yn ciw, sut ydych chi'n gwneud y cyfrifiadur yn gwybod 576 00:44:25,310 --> 00:44:29,120 pa mor fawr ydych am y pentwr i fod? 577 00:44:29,120 --> 00:44:31,700 [Hardison] Dyna gwestiwn mawr. 578 00:44:31,700 --> 00:44:34,800 Mae cwpl o ffyrdd. Un ydy at jyst diffinio o flaen llaw 579 00:44:34,800 --> 00:44:42,050 ac yn dweud hyn yn mynd i fod ciw sydd 4 elfen neu 50 elfen neu 10,000. 580 00:44:42,050 --> 00:44:45,430 Y ffordd arall yw gwneud yr hyn y Folks haciwr rhifyn yn ei wneud 581 00:44:45,430 --> 00:44:52,310 ac yn creu swyddogaethau i gael eich ciw yn tyfu yn ddeinamig wrth i bethau mwy yn cael ei llwytho i mewn 582 00:44:52,310 --> 00:44:54,740 >> [Charlotte] Felly, er mwyn mynd â'r opsiwn cyntaf, pa gystrawen ydych chi'n eu defnyddio 583 00:44:54,740 --> 00:44:57,830 i ddweud wrth y rhaglen beth yw maint y ciw? 584 00:44:57,830 --> 00:45:04,780 [Hardison] Ah. Felly, gadewch i ni gael allan o hyn. 585 00:45:04,780 --> 00:45:12,650 Rwy'n dal yn stack.c yma, felly Im 'jyst yn mynd i sgrolio i fyny at y top yma. 586 00:45:12,650 --> 00:45:17,920 Allwch chi weld yr hawl yma? Dyma'r # diffinio gallu 10. 587 00:45:17,920 --> 00:45:24,600 Ac mae hyn bron yr un gystrawen union sydd gennym ar gyfer ciw. 588 00:45:24,600 --> 00:45:28,390 Ac eithrio mewn ciw, rydym wedi cael y maes hwnnw strwythur ychwanegol yma. 589 00:45:28,390 --> 00:45:32,760 [Charlotte] O, yr wyf yn meddwl y gallu golygu y gallu ar gyfer y llinyn. 590 00:45:32,760 --> 00:45:36,770 [Hardison] Ah. >> Dyna 'i' uchafswm hyd y gair. >> Got iddo. 591 00:45:36,770 --> 00:45:41,180 Yeah. Mae'r gallu yma - mae hynny'n bwynt da. 592 00:45:41,180 --> 00:45:44,000 Ac mae hyn yn rhywbeth sy'n anodd 593 00:45:44,000 --> 00:45:49,480 oherwydd yr hyn yr ydym wedi datgan yma amrywiaeth o * torgoch s. 594 00:45:49,480 --> 00:45:52,770 Mae amrywiaeth o awgrymiadau. 595 00:45:52,770 --> 00:45:56,690 Mae hwn yn amrywiaeth o chars. 596 00:45:56,690 --> 00:46:01,690 Mae hyn yn debyg yr hyn yr ydych wedi gweld pan fyddwch wedi bod yn datgan eich byfferau ar gyfer ffeil I / O, 597 00:46:01,690 --> 00:46:06,840 pan fyddwch wedi bod yn creu llinynnau llaw ar y pentwr. 598 00:46:06,840 --> 00:46:09,090 Fodd bynnag, yr hyn sydd gennym yma amrywiaeth o torgoch * s. 599 00:46:09,090 --> 00:46:13,400 Felly mae'n amrywiaeth o awgrymiadau. 600 00:46:13,400 --> 00:46:18,350 Mewn gwirionedd, os ydym yn chwyddo yn ôl allan ac rydym yn edrych ar yr hyn sy'n mynd ymlaen yma 601 00:46:18,350 --> 00:46:23,140 yn y cyflwyniad, byddwch yn gweld bod yr elfennau gwirioneddol, mae'r data cymeriad 602 00:46:23,140 --> 00:46:26,180 nad yw'n cael ei storio o fewn y rhengoedd ei hun. 603 00:46:26,180 --> 00:46:42,690 Beth sy'n cael ei storio o fewn ein casgliad yma yn awgrymiadau ar gyfer data cymeriad. 604 00:46:42,690 --> 00:46:52,560 Iawn. Felly, rydym wedi gweld sut y mae maint y ciw yn union fel ag y pentwr, 605 00:46:52,560 --> 00:46:58,670 maint bob amser yn parchu nifer o elfennau ar hyn o bryd yn y ciw. 606 00:46:58,670 --> 00:47:02,720 Ar ôl gwneud 2 enqueues, y maint yw 2. 607 00:47:02,720 --> 00:47:07,110 Ar ôl gwneud dequeue y maint yn awr 1. 608 00:47:07,110 --> 00:47:09,330 Ar ôl gwneud un arall enqueue y maint yn ôl i fyny i 2. 609 00:47:09,330 --> 00:47:12,340 Felly mae'r maint yn bendant yn parchu nifer o elfennau yn y ciw, 610 00:47:12,340 --> 00:47:15,580 ac yna y pen yn unig yn cadw beicio. 611 00:47:15,580 --> 00:47:20,210 Mae'n mynd o 0-1-2, 0-1-2, 0-1-2. 612 00:47:20,210 --> 00:47:25,620 A phob tro y byddwn yn galw dequeue, y pwyntydd pen yn cael ei fyny ar y mynegai nesaf. 613 00:47:25,620 --> 00:47:29,930 Ac os bydd y pennaeth ar fin mynd dros, mae'n dolenni yn ôl o gwmpas i 0. 614 00:47:29,930 --> 00:47:34,870 Felly, gyda hynny, gallwn ysgrifennu'r swyddogaeth dequeue. 615 00:47:34,870 --> 00:47:40,200 Ac rydym yn mynd i adael y swyddogaeth enqueue i chi guys i weithredu yn lle hynny. 616 00:47:40,200 --> 00:47:45,880 >> Pan fyddwn yn dequeue elfen allan o'n ciw, 617 00:47:45,880 --> 00:47:55,490 beth oedd y peth cyntaf wnaeth Daniel pan ddechreuodd ysgrifennu'r swyddogaeth pop i pentyrrau? 618 00:47:55,490 --> 00:48:00,490 Gadewch i mi glywed gan rywun sydd heb siarad eto. 619 00:48:00,490 --> 00:48:06,710 Gadewch i ni weld, Saad, ydych chi'n cofio beth wnaeth Daniel fel y peth cyntaf pan ysgrifennodd pop? 620 00:48:06,710 --> 00:48:08,860 [Saad] Nid oedd, fe - >> Roedd profi am rywbeth. 621 00:48:08,860 --> 00:48:12,140 [Saad] Os faint yn fwy na 0. >> Yn union. 622 00:48:12,140 --> 00:48:14,390 A beth oedd y profion ar gyfer? 623 00:48:14,390 --> 00:48:19,090 [Saad] Dyna oedd yn profi i weld a oes unrhyw beth y tu mewn y rhesi. 624 00:48:19,090 --> 00:48:23,210 [Hardison] Yeah. Yn union. Felly, nad ydych yn gallu pop unrhyw beth allan o'r pentwr os yw'n wag. 625 00:48:23,210 --> 00:48:26,510 Yn yr un modd, ni allwch dequeue unrhyw beth o ciw os yw'n wag. 626 00:48:26,510 --> 00:48:30,420 Beth yw'r peth cyntaf y dylem ei wneud yn ein swyddogaeth dequeue yma, yn eich barn chi? 627 00:48:30,420 --> 00:48:33,860 [Saad] Os faint yn fwy na 0? >> Yeah. 628 00:48:33,860 --> 00:48:37,710 Yn yr achos hwn, rwyf wedi eu profi mewn gwirionedd dim ond i weld os yw'n 0. 629 00:48:37,710 --> 00:48:42,240 Os yw'n 0, gallwn ddychwelyd null. 630 00:48:42,240 --> 00:48:45,280 Ond rhesymeg union yr un. 631 00:48:45,280 --> 00:48:49,110 A gadewch i ni barhau gyda hyn. 632 00:48:49,110 --> 00:48:54,600 Os nad yw maint yw 0, ble mae'r elfen yr ydym am ei dequeue? 633 00:48:54,600 --> 00:48:58,550 [Saad] Yn y pen? >> Yn union. 634 00:48:58,550 --> 00:49:01,720 Gall Rydym yn unig dynnu allan yr elfen gyntaf yn ein ciw 635 00:49:01,720 --> 00:49:07,040 trwy fynd i'r elfen yn y pen. 636 00:49:07,040 --> 00:49:14,630 Dim byd crazy. 637 00:49:14,630 --> 00:49:19,620 Ar ôl hynny, beth ddylem ei wneud? Beth sy'n rhaid i hyn ddigwydd? 638 00:49:19,620 --> 00:49:23,740 Beth oedd y peth arall yr ydym yn sôn amdanynt yn dequeue? 639 00:49:23,740 --> 00:49:28,130 Mae dau yn rhaid i bethau ddigwydd, oherwydd ein ciw wedi newid. 640 00:49:28,130 --> 00:49:35,640 [Daniel] Lleihau maint. >> Mae'n rhaid i ni leihau faint, a chynyddu'r pen? Yn union. 641 00:49:35,640 --> 00:49:40,600 Cynyddu y pen, ni allwn yn unig yn cynyddu blindly y pen, cofiwch. 642 00:49:40,600 --> 00:49:45,080 Ni allwn wneud queue.head + +. 643 00:49:45,080 --> 00:49:51,630 Mae'n rhaid i ni hefyd yn cynnwys y mod gan y capasiti. 644 00:49:51,630 --> 00:49:54,740 A pham yr ydym yn mod gan y gallu, Stella? 645 00:49:54,740 --> 00:49:58,680 [Stella] Oherwydd ei fod wedi i lapio o gwmpas. >> Yn union. 646 00:49:58,680 --> 00:50:04,750 Rydym yn mod gan y gallu oherwydd ei fod wedi i lapio o gwmpas yn ôl i 0. 647 00:50:04,750 --> 00:50:07,400 Felly nawr, yn y fan hon, gallwn wneud yr hyn a ddywedodd Daniel. 648 00:50:07,400 --> 00:50:12,700 Gallwn lleihau a maint. 649 00:50:12,700 --> 00:50:29,170 Ac yna gallwn fynd yn ôl yr elfen a oedd ar frig y ciw. 650 00:50:29,170 --> 00:50:34,000 Mae'n edrych yn fath o gnarly ar y dechrau. Efallai y bydd gennych gwestiwn. Mae'n ddrwg gennym? 651 00:50:34,000 --> 00:50:37,260 >> [Sam] Pam yn gyntaf ar ben y ciw? Ble mae hynny'n mynd? 652 00:50:37,260 --> 00:50:42,480 [Hardison] Daw o'r bedwaredd linell o'r gwaelod. 653 00:50:42,480 --> 00:50:46,060 Ar ôl i ni profi i wneud yn siŵr nad yw ein ciw yn wag, 654 00:50:46,060 --> 00:50:54,100 rydym yn tynnu allan * torgoch yn gyntaf, rydym yn tynnu allan yr elfen sydd wedi eistedd ar y mynegai pen 655 00:50:54,100 --> 00:50:58,680 o'n amrywiaeth, ein llinynnau, >> amrywiaeth a galw yn gyntaf? 656 00:50:58,680 --> 00:51:04,500 [Hardison] Ac rydym yn galw yn gyntaf. Yeah. 657 00:51:04,500 --> 00:51:09,850 Dim ond i ddilyn i fyny ar hynny, pam ydych chi'n meddwl ein bod ni wedi gorfod gwneud hynny? 658 00:51:09,850 --> 00:51:18,270 [Sam] Mae pob cyntaf dim ond dychwelyd q.strings [q.head]? >> Yeah. 659 00:51:18,270 --> 00:51:23,830 >> Oherwydd ein bod yn gwneud hyn newid y q.head gyda'r swyddogaeth mod, 660 00:51:23,830 --> 00:51:27,810 ac nid oes ffordd o wneud hynny o fewn llinell dychwelyd hefyd. 661 00:51:27,810 --> 00:51:31,640 [Hardison] Yn union. Rydych yn fan a'r lle ar. Sam wedi llwyr gweld ar. 662 00:51:31,640 --> 00:51:36,800 Y rheswm rydym yn gorfod tynnu allan yr elfen gyntaf yn ein ciw ac yn ei storio mewn amrywiol 663 00:51:36,800 --> 00:51:43,030 oherwydd bod y llinell hon lle'r oeddem wedi q.head yn unig, 664 00:51:43,030 --> 00:51:47,030 does dim gweithredwr mod i mewn 'na mae hynny'n rhywbeth y gallwn ei wneud 665 00:51:47,030 --> 00:51:51,230 ac wedi dod i rym ar y pen heb - mewn un llinell. 666 00:51:51,230 --> 00:51:54,480 Felly, rydym mewn gwirionedd yn rhaid i ni dynnu allan yr elfen gyntaf, ac yna addasu y pen, 667 00:51:54,480 --> 00:52:00,430 addasu maint, ac yna dychwelyd yr elfen ein bod yn tynnu allan. 668 00:52:00,430 --> 00:52:02,680 Ac mae hyn yn rhywbeth y byddwn yn gweld yn dod i fyny yn ddiweddarach gyda 669 00:52:02,680 --> 00:52:04,920 rhestrau cysylltiedig, gan ein bod yn chwarae o gwmpas gyda nhw. 670 00:52:04,920 --> 00:52:08,410 Yn aml pan fyddwch chi'n rhyddhau neu waredu rhestrau cysylltiedig 671 00:52:08,410 --> 00:52:13,500 angen i chi gofio i'r elfen nesaf, y pwyntydd nesaf rhestr cysylltiedig 672 00:52:13,500 --> 00:52:16,330 cyn cael gwared o'r un bresennol. 673 00:52:16,330 --> 00:52:23,580 Oherwydd fel arall byddwch yn ei daflu y wybodaeth yr hyn sy'n weddill yn y rhestr. 674 00:52:23,580 --> 00:52:34,160 Yn awr, os byddwch yn mynd i eich offer, byddwch yn agor i fyny queue.c-x-allan o hyn. 675 00:52:34,160 --> 00:52:39,390 Felly, os wyf yn agor queue.c, gadewch i mi chwyddo i mewn yma, 676 00:52:39,390 --> 00:52:44,970 byddwch yn gweld bod gennych ffeil tebyg-edrych. 677 00:52:44,970 --> 00:52:49,200 Tebyg sy'n edrych ffeil i'r hyn oedd gennym yn gynharach gyda stack.c. 678 00:52:49,200 --> 00:52:54,690 Rydym wedi cael ein strwythur ar gyfer ciw a ddiffinnir yn union fel y gwelsom ar y sleidiau. 679 00:52:54,690 --> 00:52:59,870 >> Rydym wedi ein swyddogaeth enqueue sydd i chi ei wneud. 680 00:52:59,870 --> 00:53:04,340 Ac mae gennym y swyddogaeth dequeue yma. 681 00:53:04,340 --> 00:53:06,870 Mae'r swyddogaeth dequeue yn y ffeil yn cael ei heb ei weithredu, 682 00:53:06,870 --> 00:53:13,230 ond byddaf yn ei roi yn ôl i fyny ar y PowerPoint er mwyn i chi deipio i mewn, os hoffech. 683 00:53:13,230 --> 00:53:16,690 Felly, ar gyfer y 5 munud nesaf, neu felly, rydych guys gweithio ar enqueue 684 00:53:16,690 --> 00:53:22,570 sydd bron yn union y gwrthwyneb i dequeue. 685 00:53:22,570 --> 00:53:29,560 Nid oes rhaid i chi addasu pen pan fyddwch chi'n enqueueing, ond beth sydd gennych i'w addasu? 686 00:53:29,560 --> 00:53:38,920 Maint. Felly, pan fyddwch yn enqueue, mae'r pennaeth yn aros heb ei gyffwrdd, maint yn cael ei newid. 687 00:53:38,920 --> 00:53:46,920 Ond mae'n cymryd ychydig o - bydd yn rhaid i chi chwarae o gwmpas gyda'r mod 688 00:53:46,920 --> 00:53:57,560 i ffigur yn union beth mynegai dylai'r elfen newydd yn cael ei fewnosod yn. 689 00:53:57,560 --> 00:54:03,080 Felly, byddaf yn rhoi i chi guys ychydig, rhowch dequeue yn ôl i fyny ar y sleid, 690 00:54:03,080 --> 00:54:05,200 ac wrth i chi guys gennych gwestiynau, gweiddi nhw allan fel y gallwn 691 00:54:05,200 --> 00:54:09,220 i gyd yn siarad amdanynt fel grŵp. 692 00:54:09,220 --> 00:54:13,960 Hefyd, gyda maint rydych peidiwch - pan fyddwch yn newid y maint, gallwch bob amser yn unig - 693 00:54:13,960 --> 00:54:18,720 sydd gennych i mod maint erioed? [Daniel] Rhif >> Nid oes rhaid i mod maint, ar y dde. 694 00:54:18,720 --> 00:54:24,260 Gan y bydd y maint bob amser, os you're - gan dybio eich bod yn rheoli pethau yn briodol, 695 00:54:24,260 --> 00:54:30,840 bydd y maint bob amser fod rhwng 0 a 3. 696 00:54:30,840 --> 00:54:38,680 Ble mae'n rhaid i chi mod pan fyddwch yn gwneud enqueue? 697 00:54:38,680 --> 00:54:41,060 [Myfyrwyr] Dim ond ar gyfer y pennaeth. >> Dim ond ar gyfer y pennaeth, yn union. 698 00:54:41,060 --> 00:54:44,620 A pham yr ydych yn rhaid i mod o gwbl yn enqueue? 699 00:54:44,620 --> 00:54:48,830 Pryd mae sefyllfa lle byddai'n rhaid i chi mod? 700 00:54:48,830 --> 00:54:53,630 [Myfyrwyr] Os oes gennych pethau yn fannau, fel mewn mannau 1 a 2, 701 00:54:53,630 --> 00:54:55,950 ac yna roedd angen i chi ychwanegu rhywbeth ar 0. 702 00:54:55,950 --> 00:55:02,570 [Hardison] Yeah, yn union. Felly, os yw eich pwyntydd pen ar y diwedd un, 703 00:55:02,570 --> 00:55:14,210 neu os yw eich maint yn ogystal â'ch pen yn fwy, neu yn hytrach, yn mynd i lapio o amgylch y ciw. 704 00:55:14,210 --> 00:55:17,830 >> Felly, yn y sefyllfa yr ydym wedi mynd i fyny yma ar y sleid ar hyn o bryd, 705 00:55:17,830 --> 00:55:24,370 os ydw i eisiau enqueue rhywbeth yn iawn yn awr, 706 00:55:24,370 --> 00:55:31,110 rydym am i enqueue rhywbeth yn mynegai 0. 707 00:55:31,110 --> 00:55:35,450 Felly, os ydych yn edrych ar ble y 50 yn mynd, a galwaf enqueue 50, 708 00:55:35,450 --> 00:55:40,840 mae'n mynd i lawr yno ar y gwaelod. Mae'n mynd mewn 0 mynegai. 709 00:55:40,840 --> 00:55:44,160 Mae'n disodli'r 'hi' a dequeued eisoes. 710 00:55:44,160 --> 00:55:46,210 [Daniel] Peidiwch â ydych yn gofalu am hynny yn dequeue yn barod? 711 00:55:46,210 --> 00:55:50,550 Pam ei fod yn gwneud unrhyw beth gyda'r pennaeth enqueue? 712 00:55:50,550 --> 00:55:55,770 [Hardison] O, felly nid ydych yn addasu'r pennaeth, sori. 713 00:55:55,770 --> 00:56:02,310 Ond mae'n rhaid i chi ddefnyddio'r gweithredwr mod pan ydych yn cyrchu 714 00:56:02,310 --> 00:56:04,250 yr elfen eich bod am enqueue pan fyddwch yn cyrchu 715 00:56:04,250 --> 00:56:06,960 i'r elfen nesaf yn eich ciw. 716 00:56:06,960 --> 00:56:10,960 [Basil] Nid wyf yn gwneud hynny, ac fe ges i "llwyddiant" ar yno. 717 00:56:10,960 --> 00:56:13,370 [Daniel] O, yr wyf yn deall yr hyn rydych yn ei ddweud. 718 00:56:13,370 --> 00:56:16,240 [Hardison] Felly rydych didn't - rydych yn unig oedd yn q.size? 719 00:56:16,240 --> 00:56:20,670 [Basil] Yeah. Rwyf wedi newid dim ond ochr, doeddwn i ddim yn gwneud unrhyw beth gyda'r pennaeth. 720 00:56:20,670 --> 00:56:24,300 [Hardison] Nid oes mewn gwirionedd yn rhaid i chi ailosod y pen i fod yn unrhyw beth, 721 00:56:24,300 --> 00:56:31,650 ond pan fyddwch yn fynegai i'r casgliad llinynnau, 722 00:56:31,650 --> 00:56:39,500 chi mewn gwirionedd yn rhaid i chi fynd ymlaen a chyfrifo lle mae'r elfen nesaf, 723 00:56:39,500 --> 00:56:44,230 oherwydd withe y pentwr, yr elfen nesaf yn eich simnai oedd bob amser yn 724 00:56:44,230 --> 00:56:48,740 ar y mynegai sy'n cyfateb i'r maint. 725 00:56:48,740 --> 00:56:55,850 Os ydym yn edrych yn ôl i fyny ar ein gwthio pentwr swyddogaeth, 726 00:56:55,850 --> 00:57:03,100 gallem bob amser yn plunk yn ein elfen newydd i'r dde wrth maint mynegai. 727 00:57:03,100 --> 00:57:06,710 Er bod y ciw, ni allwn wneud hynny 728 00:57:06,710 --> 00:57:10,340 oherwydd os ydym yn y sefyllfa hon, 729 00:57:10,340 --> 00:57:18,130 os ydym enqueued byddai 50 ein llinyn newydd yn mynd i'r dde wrth dannau [1] 730 00:57:18,130 --> 00:57:20,540 nad ydym am ei wneud. 731 00:57:20,540 --> 00:57:41,200 Rydym yn awyddus i gael y llinyn newydd yn mynd yn mynegai 0. 732 00:57:41,200 --> 00:57:44,320 >> A oes gan unrhyw un - ie? [Myfyrwyr] Mae gen i gwestiwn, ond nid yw'n gysylltiedig mewn gwirionedd. 733 00:57:44,320 --> 00:57:48,160 Beth mae'n ei olygu pan fydd rhywun yn union yn galw rhywbeth fel pwyntydd pred? 734 00:57:48,160 --> 00:57:51,260 Beth yw enw byr ar gyfer? Rwy'n gwybod mai dim ond enw. 735 00:57:51,260 --> 00:57:59,110 [Hardison] pwyntydd Pred? Gadewch i ni weld. Ym mha gyd-destun? 736 00:57:59,110 --> 00:58:01,790 [Myfyrwyr] Roedd gyfer y mewnosodiad. Gallaf ofyn i chi yn nes ymlaen os ydych eisiau 737 00:58:01,790 --> 00:58:03,920 gan nad yw'n gysylltiedig mewn gwirionedd, ond yr wyf yn unig - 738 00:58:03,920 --> 00:58:07,300 [Hardison] O cod rhowch Dewi Sant o ddarlith? 739 00:58:07,300 --> 00:58:10,860 Gallwn dynnu bod i fyny a siarad am hynny. 740 00:58:10,860 --> 00:58:15,550 Byddwn yn siarad am hynny nesaf, pan gawn restrau cysylltiedig. 741 00:58:15,550 --> 00:58:21,440 >> Felly, gadewch i ni yn gyflym iawn yn edrych ar yr hyn y swyddogaeth enqueue yn edrych fel. 742 00:58:21,440 --> 00:58:26,530 Beth oedd y peth cyntaf y mae pobl yn ceisio ei wneud yn eich llinell enqueue? Into y ciw? 743 00:58:26,530 --> 00:58:29,960 Yn debyg i beth wnaethoch chi am pentwr gwthio. 744 00:58:29,960 --> 00:58:32,080 Beth wnaethoch chi ei wneud, Stella? 745 00:58:32,080 --> 00:58:35,050 [Stella, annealladwy] 746 00:58:35,050 --> 00:58:45,700 [Hardison] Yn union. Os (q.size == GALLU) - 747 00:58:45,700 --> 00:58:54,720 Angen i mi roi fy braces yn y lle cywir - dychwelyd ffug. 748 00:58:54,720 --> 00:59:01,370 Zoom mewn ychydig bach. Iawn. 749 00:59:01,370 --> 00:59:03,800 Nawr beth yw'r peth nesaf a oedd gennym i wneud? 750 00:59:03,800 --> 00:59:11,370 Union fel y pentwr, a'u gosod yn y lle iawn. 751 00:59:11,370 --> 00:59:16,010 Ac felly, beth oedd y lle iawn i fewnosod hynny? 752 00:59:16,010 --> 00:59:23,170 Gyda'r pentwr oedd maint y mynegai, gyda hyn nid yw'n hollol hynny. 753 00:59:23,170 --> 00:59:30,210 [Daniel] gennyf q.head--neu - q.strings >>? >> Yeah. 754 00:59:30,210 --> 00:59:40,470 q.strings [q.head + q.size mod GALLU]? 755 00:59:40,470 --> 00:59:42,740 [Hardison] Mae'n debyg eisiau rhoi cromfachau o gwmpas y 756 00:59:42,740 --> 00:59:48,830 fel ein bod ni'n cael y flaenoriaeth briodol ac felly dyna cleart i bawb. 757 00:59:48,830 --> 00:59:55,800 A gosod y gyfartal? >> I str? >> I str. Great. 758 00:59:55,800 --> 01:00:00,160 Ac yn awr beth yw'r peth olaf y mae'n rhaid i ni ei wneud? 759 01:00:00,160 --> 01:00:06,780 Yn union fel y gwnaethom yn y pentwr. >> Cynnyddu y maint? >> Cynnyddu y maint. 760 01:00:06,780 --> 01:00:13,830 Boom. Ac yna, gan fod y cod cychwynnol newydd ddychwelyd ffug yn ddiofyn, 761 01:00:13,830 --> 01:00:27,460 rydym am newid hyn yn wir os bydd popeth yn mynd drwyddo ac aiff popeth yn iawn. 762 01:00:27,460 --> 01:00:33,050 Mae pob hawl. Mae hynny'n llawer o wybodaeth ar gyfer adran. 763 01:00:33,050 --> 01:00:39,480 Nid ydym yn eithaf drosodd. Rydym eisiau siarad yn gyflym iawn am eu pennau eu hunain sy'n gysylltiedig â'r rhestrau. 764 01:00:39,480 --> 01:00:44,010 'N annhymerus' roi hyn i fyny fel y gallwn fynd yn ôl ato yn nes ymlaen. 765 01:00:44,010 --> 01:00:50,850 Ond gadewch i ni fynd yn ôl at ein cyflwyniad i rai yn unig yn fwy sleidiau. 766 01:00:50,850 --> 01:00:53,790 Felly enqueue yn TODO, yn awr rydym wedi eu cyflawni. 767 01:00:53,790 --> 01:00:57,430 >> Nawr gadewch i ni edrych ar eu pennau eu hunain sy'n gysylltiedig â'r rhestrau. 768 01:00:57,430 --> 01:01:00,040 Rydym yn sôn am y rhain yn fwy o ychydig mewn darlith. 769 01:01:00,040 --> 01:01:02,540 Faint ohonoch guys weld y demo lle cawsom bobl 770 01:01:02,540 --> 01:01:08,220 lletchwith pwyntio i bob rhifau eraill a daliad? >> Roeddwn yn hynny. 771 01:01:08,220 --> 01:01:16,620 >> Beth wnaethoch chi guys meddwl? Yn gwneud hynny, gobeithio egluro'r hyn dipyn ychydig? 772 01:01:16,620 --> 01:01:25,990 Gyda rhestr, mae'n troi allan ein bod yn ymdrin â'r math hwn ein bod ni'n mynd i alw nod. 773 01:01:25,990 --> 01:01:32,520 Tra gyda'r ciw ac i'r stac cawsom structs y byddem yn galw ciw yn simnai, 774 01:01:32,520 --> 01:01:34,860 rydym yn cael y rhain ciw newydd mewn mathau stac, 775 01:01:34,860 --> 01:01:39,240 dyma restr yn wir yn gwneud dim ond cynnwys criw o nodau. 776 01:01:39,240 --> 01:01:45,920 Yn yr un ffordd ag y llinynnau yn unig yw criw o chars holl drefnu nesaf at ei gilydd. 777 01:01:45,920 --> 01:01:50,650 Mae rhestr cysylltiedig yn unig yw nod ac un arall nod ac un arall ac un arall nod nod. 778 01:01:50,650 --> 01:01:55,080 Ac yn hytrach na malu holl nodau at ei gilydd a'u storio contiguously 779 01:01:55,080 --> 01:01:58,090 iawn nesaf at ei gilydd mewn cof, 780 01:01:58,090 --> 01:02:04,470 cael y pwyntydd nesaf yn ein galluogi i storio nodau lle bynnag y bo, ar hap. 781 01:02:04,470 --> 01:02:10,500 Ac yna fath o wifren i gyd gyda'i gilydd i bwynt o un i'r llall. 782 01:02:10,500 --> 01:02:15,850 >> A beth oedd y fantais fawr bod hyn yn cael dros arae? 783 01:02:15,850 --> 01:02:21,680 Dros bopeth storio contiguously yn sownd yn unig nesaf at ei gilydd? 784 01:02:21,680 --> 01:02:24,190 Byddwch yn cofio? Yeah? >> Dyrannu cof Dynamic? 785 01:02:24,190 --> 01:02:27,220 >> Dyrannu cof Dynamic ym mha ystyr? 786 01:02:27,220 --> 01:02:31,780 [Myfyrwyr] Yn y gallwch gadw ei gwneud yn fwy ac nid oes rhaid i chi symud eich casgliad cyfan? 787 01:02:31,780 --> 01:02:40,940 [Hardison] Yn union. Felly, gydag amrywiaeth, pan fyddwch eisiau rhoi elfen newydd i mewn i ganol ohono, 788 01:02:40,940 --> 01:02:45,320 rhaid i chi symud popeth i wneud lle. 789 01:02:45,320 --> 01:02:47,880 Ac fel yr ydym yn sôn am y ciw, 790 01:02:47,880 --> 01:02:50,080 dyna pam rydym yn cadw'r pwyntydd pen, 791 01:02:50,080 --> 01:02:52,050 fel nad ydym yn gyson yn symud pethau. 792 01:02:52,050 --> 01:02:54,520 Oherwydd bod yn cael ddrud os oes gennych amrywiaeth mawr 793 01:02:54,520 --> 01:02:57,130 ac rydych yn gyson yn gwneud y mewnosodiadau ar hap. 794 01:02:57,130 --> 01:03:00,820 Tra â rhestr, y cyfan mae'n rhaid i chi ei wneud yw ei daflu ar nod newydd, 795 01:03:00,820 --> 01:03:06,330 addasu'r awgrymiadau, ac rydych yn ei wneud. 796 01:03:06,330 --> 01:03:10,940 Beth sucks am hyn? 797 01:03:10,940 --> 01:03:16,830 Ar wahân i'r ffaith nad yw mor hawdd i weithio gyda fel arae? Yeah? 798 01:03:16,830 --> 01:03:22,980 [Daniel] Wel, yr wyf yn dyfalu ei fod yn llawer anoddach i gael gafael ar elfen benodol yn y rhestr sy'n gysylltiedig? 799 01:03:22,980 --> 01:03:30,470 [Hardison] Allwch chi ddim neidio i elfen mympwyol yng nghanol eich rhestr cysylltiedig. 800 01:03:30,470 --> 01:03:33,800 Sut ydych yn rhaid i chi wneud hyn yn lle? >> Mae'n rhaid i chi gamu trwy'r peth cyfan. 801 01:03:33,800 --> 01:03:35,660 [Hardison] Yeah. Mae'n rhaid i chi fynd drwy un ar y tro, un ar y tro. 802 01:03:35,660 --> 01:03:38,480 Mae'n enfawr - mae'n boen. 803 01:03:38,480 --> 01:03:41,550 Beth y llall - mae gwendid arall i hyn. 804 01:03:41,550 --> 01:03:45,340 [Basil] Ni allwch fynd ymlaen ac yn ôl? Mae'n rhaid i chi fynd un cyfeiriad? 805 01:03:45,340 --> 01:03:48,570 [Hardison] Yeah. Felly sut rydym yn datrys hynny, weithiau? 806 01:03:48,570 --> 01:03:53,370 [Basil] ddwbl-cysylltiedig rhestrau? >> Yn union. Mae rhestrau ddwbl-gysylltiedig. 807 01:03:53,370 --> 01:03:55,540 Mae yna hefyd - sori? 808 01:03:55,540 --> 01:03:57,620 >> [Sam] A yw bod yr un peth â defnyddio'r peth pred hynny - 809 01:03:57,620 --> 01:04:01,090 Fi jyst yn cofio, nid yw bod yr hyn y peth pred yw? 810 01:04:01,090 --> 01:04:05,850 Onid yw bod rhwng ddwbl ac yn unigol? 811 01:04:05,850 --> 01:04:10,020 [Hardison] Gadewch i ni edrych ar beth yn union oedd yn ei wneud. 812 01:04:10,020 --> 01:04:15,760 Felly, yma rydym yn mynd. Dyma'r cod rhestr. 813 01:04:15,760 --> 01:04:25,620 Yma, mae gennym predptr, yma. A yw hyn yn beth rydych yn sôn amdanynt? 814 01:04:25,620 --> 01:04:30,750 Felly roedd hyn - ei fod yn rhyddhau rhestr ac mae o'n ceisio i storio pwyntydd iddo. 815 01:04:30,750 --> 01:04:35,000 Nid yw hyn yn ddwbl, yn unigol cysylltiedig-rhestrau. 816 01:04:35,000 --> 01:04:40,090 Gallwn siarad mwy am hyn yn ddiweddarach gan fod hyn yn sôn am ryddhau'r rhestr 817 01:04:40,090 --> 01:04:42,900 ac yr wyf am ddangos rhai pethau eraill yn gyntaf. 818 01:04:42,900 --> 01:04:51,480 ond mae'r un - mae'n cofio gwerth PTR 819 01:04:51,480 --> 01:04:54,170 [Myfyrwyr] O, mae'n pwyntydd blaenorol? >> Yeah. 820 01:04:54,170 --> 01:05:04,070 Er mwyn i ni wedyn cynyddiad ptr ei hun cyn i ni wedyn yn rhad ac am ddim beth yw predptr. 821 01:05:04,070 --> 01:05:09,130 Oherwydd na allwn ptr rhad ac am ddim ac yna galw ptr = ptr nesaf, dde? 822 01:05:09,130 --> 01:05:11,260 Byddai hynny'n ddrwg. 823 01:05:11,260 --> 01:05:20,940 Felly, gadewch i ni weld, yn ôl i'r guy. 824 01:05:20,940 --> 01:05:23,900 >> Y peth drwg eraill am restrau yw bod ond gydag amrywiaeth 825 01:05:23,900 --> 01:05:26,520 rydym yn unig yn cael yr holl elfennau eu hunain yn pentyrru nesaf at ei gilydd, 826 01:05:26,520 --> 01:05:29,050 yma rydym hefyd wedi cyflwyno hyn pwyntydd. 827 01:05:29,050 --> 01:05:34,060 Felly mae 'na darn ychwanegol o gof ein bod yn gorfod defnyddio 828 01:05:34,060 --> 01:05:37,910 ar gyfer pob elfen ein bod yn cadw yn ein rhestr. 829 01:05:37,910 --> 01:05:40,030 Rydym yn cael hyblygrwydd, ond mae'n dod ar gost. 830 01:05:40,030 --> 01:05:42,230 Mae'n dod â'r cost amser, 831 01:05:42,230 --> 01:05:45,270 ac mae'n dod gyda gost hon lawer o gof. 832 01:05:45,270 --> 01:05:47,800 Amser yn yr ystyr bod gennym yn awr i fynd drwy bob elfen yn yr amrywiaeth 833 01:05:47,800 --> 01:05:58,670 i ddod o hyd i'r un ar fynegai 10, neu y byddai wedi bod mynegai 10 yn arae. 834 01:05:58,670 --> 01:06:01,230 >> Dim ond yn gyflym iawn, pan fyddwn diagram allan rhestrau hyn, 835 01:06:01,230 --> 01:06:05,980 fel arfer rydym yn dal gafael ar ben y rhestr neu y pwyntydd cyntaf y rhestr 836 01:06:05,980 --> 01:06:08,010 ac yn nodi bod hyn yn wir pwyntydd. 837 01:06:08,010 --> 01:06:11,100 Mae'n dim ond 4 bytes. Nid yw'n 'an nod ei hun. 838 01:06:11,100 --> 01:06:17,120 Felly byddwch yn gweld nad oes ganddo werth int ynddo, dim pwyntydd nesaf ynddo. 839 01:06:17,120 --> 01:06:20,790 Mae'n llythrennol dim ond pwyntydd. 840 01:06:20,790 --> 01:06:23,550 Mae'n mynd i gyfeirio at rywbeth sydd yn strwythur nod go iawn. 841 01:06:23,550 --> 01:06:28,480 [Sam] Mae pwyntydd a elwir yn nod? >> Mae hyn yn - dim. Mae hyn yn rhoi syniad inni am rywbeth y nod fath. 842 01:06:28,480 --> 01:06:32,540 Mae'n rhoi syniad i strwythur nod. >> O, iawn. 843 01:06:32,540 --> 01:06:36,870 Diagram ar y chwith, y cod ar y dde. 844 01:06:36,870 --> 01:06:42,190 Gallwn osod i null, sy'n ffordd dda i ddechrau. 845 01:06:42,190 --> 01:06:49,850 Pan fyddwch yn diagram, i chi naill ai ysgrifennu fel null neu gallwch ei roi llinell trwyddo yn hoffi hynny. 846 01:06:49,850 --> 01:06:53,910 >> Un o'r ffyrdd hawsaf i weithio gyda rhestrau, 847 01:06:53,910 --> 01:06:57,430 ac rydym yn gofyn i chi yn y ddau prepend ac atodi, i weld y gwahaniaethau rhwng y ddau, 848 01:06:57,430 --> 01:07:01,320 ond Hoffech chi barhau? yn bendant yn haws. 849 01:07:01,320 --> 01:07:05,790 Pan fyddwch yn prepend, dyma lle rydych - pan fyddwch yn prepend (7), 850 01:07:05,790 --> 01:07:10,050 byddwch yn mynd a chreu'r strwythur nod 851 01:07:10,050 --> 01:07:13,870 ac eich bod yn gosod cyntaf i bwyntio ato, oherwydd yn awr, ers i ni ei prepended, 852 01:07:13,870 --> 01:07:17,240 mae'n mynd i fod ar ddechrau'r y rhestr. 853 01:07:17,240 --> 01:07:22,540 Os ydym prepend (3), sy'n creu un arall nod, ond erbyn hyn 3 yn dod cyn 7. 854 01:07:22,540 --> 01:07:31,130 Felly rydym yn ei hanfod yn gwthio pethau ar ein rhestr. 855 01:07:31,130 --> 01:07:34,720 Nawr, gallwch weld bod prepend, weithiau mae pobl yn ei alw'n gwthio, 856 01:07:34,720 --> 01:07:39,600 oherwydd eich bod yn gwthio elfen newydd ar eich rhestr. 857 01:07:39,600 --> 01:07:43,270 Mae hefyd yn hawdd i'w dileu ar flaen rhestr. 858 01:07:43,270 --> 01:07:45,650 Felly, bydd pobl yn aml yn galw y pop. 859 01:07:45,650 --> 01:07:52,200 Ac yn y modd hwnnw, gallwch chi ei efelychu pentwr ddefnyddio rhestr cysylltiedig. 860 01:07:52,200 --> 01:07:57,880 Wps. Mae'n ddrwg gennym, yn awr rydym yn mynd i atodi. Felly dyma ni prepended (7), yn awr rydym prepend (3). 861 01:07:57,880 --> 01:08:02,600 Os ydym prepended rhywbeth arall ar y rhestr hon, os ydym prepended (4), 862 01:08:02,600 --> 01:08:06,540 yna byddem wedi 4 ac yna 3 ac yna 7. 863 01:08:06,540 --> 01:08:14,220 Felly, yna gallem pop a chael gwared 4, Dileu 3, tynnu 7. 864 01:08:14,220 --> 01:08:16,500 Yn aml, mae'r ffordd fwy greddfol i feddwl am hyn yw gyda Atodi. 865 01:08:16,500 --> 01:08:20,310 Felly, yr wyf wedi diagrammed beth y byddai'n edrych yn debyg gyda atodi yma. 866 01:08:20,310 --> 01:08:23,380 Yma, sydd ynghlwm (7) nad yw'n edrych yn wahanol 867 01:08:23,380 --> 01:08:25,160 oherwydd dim ond un elfen yn y rhestr. 868 01:08:25,160 --> 01:08:28,620 Ac Ynghlwm (3) yn rhoi hynny ar y diwedd. 869 01:08:28,620 --> 01:08:31,020 Efallai y gallwch chi weld ar hyn o bryd y gamp gyda Atodi 870 01:08:31,020 --> 01:08:36,600 yw bod ers i ni dim ond yn gwybod lle mae'r ddechrau'r rhestr yw, 871 01:08:36,600 --> 01:08:39,450 i atodi i restr rhaid i chi gerdded yr holl ffordd trwy'r rhestr 872 01:08:39,450 --> 01:08:46,500 i gyrraedd y diwedd, stopio, yna adeiladu eich nod a phopeth plunk i lawr. 873 01:08:46,500 --> 01:08:50,590 Gwifren holl bethau i fyny. 874 01:08:50,590 --> 01:08:55,170 Felly, gyda prepend, wrth i ni jyst rhwygo drwy hyn yn gyflym iawn, 875 01:08:55,170 --> 01:08:58,170 pan fyddwch yn prepend i restr, mae'n weddol syml. 876 01:08:58,170 --> 01:09:02,960 >> Byddwch yn gwneud eich nod newydd, yn cynnwys rhywfaint o ddyraniad cof deinamig. 877 01:09:02,960 --> 01:09:09,830 Felly dyma rydym yn gwneud strwythur nod ddefnyddio malloc. 878 01:09:09,830 --> 01:09:14,710 Felly malloc ein bod yn defnyddio oherwydd bydd hynny'n neilltuo cof i ni ar gyfer yn ddiweddarach 879 01:09:14,710 --> 01:09:20,350 oherwydd nid ydym am hyn - rydym am i'r cof i barhau am amser hir. 880 01:09:20,350 --> 01:09:25,350 Ac rydym yn cael pwyntydd i'r lle er cof am ein bod wedi dyrannu yn unig. 881 01:09:25,350 --> 01:09:29,260 Rydym yn defnyddio maint y nod, nid ydym yn swm y caeau. 882 01:09:29,260 --> 01:09:31,899 Nid ydym yn cynhyrchu â llaw y nifer o bytes, 883 01:09:31,899 --> 01:09:39,750 yn lle hynny rydym yn defnyddio sizeof fel ein bod yn gwybod ein bod yn cael y nifer priodol o bytes. 884 01:09:39,750 --> 01:09:43,660 Rydym yn gwneud yn siwr i brofi bod ein galwad malloc llwyddo. 885 01:09:43,660 --> 01:09:47,939 Mae hyn yn rhywbeth rydych am ei wneud yn gyffredinol. 886 01:09:47,939 --> 01:09:52,590 Ar beiriannau modern, nid yw rhedeg allan o gof yn rhywbeth sy'n hawdd 887 01:09:52,590 --> 01:09:56,610 oni bai eich bod dyrannu tunnell o bethau a gwneud rhestr enfawr, 888 01:09:56,610 --> 01:10:02,220 ond os ydych yn adeiladu pethau am, dyweder, fel iPhone neu Android, 889 01:10:02,220 --> 01:10:05,230 oes gennych adnoddau cof cyfyngedig, yn enwedig os ydych chi'n gwneud rhywbeth dwys. 890 01:10:05,230 --> 01:10:08,300 Felly, mae'n beth da i fynd i mewn i waith. 891 01:10:08,300 --> 01:10:10,510 >> Hysbysu fy mod wedi defnyddio swyddogaethau chwpl gwahanol yma 892 01:10:10,510 --> 01:10:12,880 eich bod wedi gweld bod yn fath o newydd. 893 01:10:12,880 --> 01:10:15,870 Felly fprintf yn union fel printf 894 01:10:15,870 --> 01:10:21,320 ac eithrio ei ddadl gyntaf yn y nant yr ydych eisiau argraffu. 895 01:10:21,320 --> 01:10:23,900 Yn yr achos hwn, rydym am i argraffu i'r llinyn gwall safonol 896 01:10:23,900 --> 01:10:29,410 sy'n wahanol i'r outstream safonol. 897 01:10:29,410 --> 01:10:31,620 Yn ddiofyn mae'n dangos i fyny yn yr un lle. 898 01:10:31,620 --> 01:10:34,600 Mae hefyd yn argraffu allan i'r derfynfa, ond gallwch - 899 01:10:34,600 --> 01:10:38,790 defnyddio rhai gorchmynion i chi ddysgu am, y technegau ailgyfeirio 900 01:10:38,790 --> 01:10:42,290 rydych wedi dysgu amdanynt yn Tommy fideo am 4 set problem, gallwch gyfeirio ei 901 01:10:42,290 --> 01:10:47,900 i ardaloedd gwahanol, yna adael, dde yma, allanfeydd eich rhaglen. 902 01:10:47,900 --> 01:10:50,440 Ydyw yn y bôn yn hoffi dychwelyd o brif 903 01:10:50,440 --> 01:10:53,600 ac eithrio yn defnyddio allanfa oherwydd ni fydd yma dychwelyd yn gwneud unrhyw beth. 904 01:10:53,600 --> 01:10:57,140 Nid ydym yn yn y brif, felly dychwelyd yn gadael y rhaglen fel yr ydym ei eisiau. 905 01:10:57,140 --> 01:11:03,020 Felly, rydym yn defnyddio'r swyddogaeth ymadael a rhoi cod gwall. 906 01:11:03,020 --> 01:11:11,890 Yna dyma rydym yn gosod gwerth faes y nod newydd, ei maes i fod yn gyfartal i i, ac yna rydym yn gwifren i fyny. 907 01:11:11,890 --> 01:11:15,530 Rydym yn gosod pwyntydd y nod newydd nesaf i bwynt yn gyntaf, 908 01:11:15,530 --> 01:11:20,460 ac yna bydd cyntaf yn awr yn cyfeirio at y nod newydd. 909 01:11:20,460 --> 01:11:25,120 Mae'r llinellau cyntaf y cod, rydym yn adeiladu mewn gwirionedd yn y nod newydd. 910 01:11:25,120 --> 01:11:27,280 Nid y ddwy linell olaf o'r swyddogaeth hon, ond y rhai cyntaf. 911 01:11:27,280 --> 01:11:30,290 Gallwch dynnu allan mewn gwirionedd i mewn i swyddogaeth, i mewn i swyddogaeth cynorthwy-ydd. 912 01:11:30,290 --> 01:11:32,560 Dyna yn aml yn yr hyn rwy'n ei wneud yw, yr wyf dynnu allan i swyddogaeth, 913 01:11:32,560 --> 01:11:36,040 Wyf yn ei alw rhywbeth fel adeiladu nod, 914 01:11:36,040 --> 01:11:40,410 ac sy'n cadw'r swyddogaeth prepend eithaf bach, dim ond 3 llinell hynny. 915 01:11:40,410 --> 01:11:48,710 I wneud galwad i fy swyddogaeth nod adeiladu, ac yna popeth gwifren I fyny. 916 01:11:48,710 --> 01:11:51,970 >> Y peth olaf rwyf am i ddangos i chi, 917 01:11:51,970 --> 01:11:54,030 a byddaf yn gadael i chi wneud atodi a hynny i gyd ar eich pen eich hun, 918 01:11:54,030 --> 01:11:57,500 yw sut i ailadrodd dros rhestr. 919 01:11:57,500 --> 01:12:00,780 Mae criw o ffyrdd gwahanol i ailadrodd dros rhestr. 920 01:12:00,780 --> 01:12:03,140 Yn yr achos hwn, rydym yn mynd i ddod o hyd i hyd y rhestr. 921 01:12:03,140 --> 01:12:06,570 Felly, rydym yn dechrau gyda hyd = 0. 922 01:12:06,570 --> 01:12:11,580 Mae hyn yn debyg iawn i ysgrifennu strlen am llinyn. 923 01:12:11,580 --> 01:12:17,780 Dyma beth rwyf am i ddangos i chi, hyn ar gyfer dolen i'r dde yma. 924 01:12:17,780 --> 01:12:23,530 Mae'n edrych kinda ffynci, nid yw'n arferol i int = 0, i 01:12:34,920 Yn hytrach, mae'n ein ymgychwyn n amrywiol i fod yn dechrau'r rhestr. 926 01:12:34,920 --> 01:12:40,620 Ac yna er nad yw ein amrywiol iterator yn null, byddwn yn cadw i fynd. 927 01:12:40,620 --> 01:12:46,340 Mae hyn oherwydd, yn ôl confensiwn, bydd y diwedd ein rhestr null. 928 01:12:46,340 --> 01:12:48,770 Ac yna i gynnydd, yn hytrach na gwneud + +, 929 01:12:48,770 --> 01:12:57,010 yr hyn sy'n cyfateb rhestr cysylltiedig o + + yw n = n-> nesaf. 930 01:12:57,010 --> 01:13:00,410 >> Byddaf yn gadael i chi lenwi'r bylchau yma oherwydd ein bod allan o amser. 931 01:13:00,410 --> 01:13:09,300 Ond yn cadw hyn mewn cof wrth i chi weithio ar eich psets spellr. 932 01:13:09,300 --> 01:13:11,650 Rhestrau cysylltiedig, os ydych yn gweithredu tabl hash, 933 01:13:11,650 --> 01:13:14,010 Bydd yn bendant yn dod yn handi iawn. 934 01:13:14,010 --> 01:13:21,780 A bydd cael y idiom gyfer dolennu dros bethau yn gwneud bywyd yn llawer haws, gobeithio. 935 01:13:21,780 --> 01:13:25,910 Unrhyw gwestiynau, yn gyflym? 936 01:13:25,910 --> 01:13:28,920 [Sam] A fyddwch yn anfon y SLL gwblhau ac sc? 937 01:13:28,920 --> 01:13:38,360 [Hardison] Yeah. 'N annhymerus' anfon sleidiau cwblhau a chorn SLL gwblhau a queue.cs. 938 01:13:38,360 --> 01:13:41,360 [CS50.TV]