1 00:00:00,000 --> 00:00:02,832 >> [CHWARAE CERDDORIAETH] 2 00:00:02,832 --> 00:00:05,670 3 00:00:05,670 --> 00:00:08,560 >> DOUG LLOYD: OK, hynny ar y pwynt hwn yn y cwrs, 4 00:00:08,560 --> 00:00:15,300 rydym wedi cynnwys llawer o elfennau sylfaenol o C. Rydym yn gwybod llawer am newidynnau, araeau, 5 00:00:15,300 --> 00:00:17,610 awgrymiadau, holl bethau da. 6 00:00:17,610 --> 00:00:21,610 Mae'r rhai yn cael eu pob math o adeiladu i mewn i weld wrth i'r hanfodion, 7 00:00:21,610 --> 00:00:23,880 ond gallwn wneud mwy, dde? 8 00:00:23,880 --> 00:00:27,930 Gallwn gyfuno pethau at ei gilydd mewn ffyrdd diddorol. 9 00:00:27,930 --> 00:00:31,010 >> Ac felly gadewch i ni wneud hynny, gadewch i ni ddechrau i gangen y tu allan yr hyn y C yn rhoi i ni, 10 00:00:31,010 --> 00:00:35,270 a dechrau creu ein data eu hunain strwythurau ddefnyddio'r rhain adeilad 11 00:00:35,270 --> 00:00:40,590 blociau at ei gilydd i wneud rhywbeth wirioneddol werthfawr, yn ddefnyddiol. 12 00:00:40,590 --> 00:00:43,420 Un ffordd y gallwn wneud hyn yw i siarad am gasgliadau. 13 00:00:43,420 --> 00:00:48,360 Hyd yn hyd yn hyn rydym wedi cael un math o ddata strwythur ar gyfer gynrychioli casgliadau 14 00:00:48,360 --> 00:00:51,030 o hoffi werthoedd, gwerthoedd tebyg. 15 00:00:51,030 --> 00:00:52,350 Byddai hynny yn arae. 16 00:00:52,350 --> 00:00:57,020 Mae gennym gasgliadau o gyfanrifau, neu casgliadau o gymeriadau ac yn y blaen. 17 00:00:57,020 --> 00:01:00,890 >> Strwythurau hefyd yn didoli o ddata strwythur ar gyfer casglu gwybodaeth, 18 00:01:00,890 --> 00:01:03,220 ond nid yw'n ar gyfer casglu fel werthoedd. 19 00:01:03,220 --> 00:01:08,090 Mae fel arfer yn cymysgu gwahanol fathau o ddata ynghyd tu mewn blwch sengl. 20 00:01:08,090 --> 00:01:10,750 Ond nid yw ei hun a ddefnyddir i gadwyn gyda'i gilydd 21 00:01:10,750 --> 00:01:16,920 neu gysylltu gyda'i gilydd tebyg eitemau, fel arae. 22 00:01:16,920 --> 00:01:20,960 Araeau yn wych ar gyfer Elfen edrych i fyny, ond dwyn i gof 23 00:01:20,960 --> 00:01:24,262 ei bod yn anodd iawn i fewnosod i mewn i amrywiaeth, 24 00:01:24,262 --> 00:01:26,470 oni bai ein bod yn gosod ar yr union diwedd y rhesi. 25 00:01:26,470 --> 00:01:29,730 >> Ac yr enghraifft orau gen i am hynny yw math fewnosod. 26 00:01:29,730 --> 00:01:31,650 Os cofiwch ein fideo ar y math mewnosod, 27 00:01:31,650 --> 00:01:34,110 roedd llawer o cost olygu yn 28 00:01:34,110 --> 00:01:37,970 i godi elfennau, ac yn eu symud allan o'r ffordd i ffitio rhywbeth 29 00:01:37,970 --> 00:01:41,290 i ganol eich arae. 30 00:01:41,290 --> 00:01:44,690 Araeau hefyd yn dioddef o un arall broblem, sef anhyblygrwydd. 31 00:01:44,690 --> 00:01:47,150 Pan fyddwn yn datgan arae, rydym yn cael un ergyd yn ei. 32 00:01:47,150 --> 00:01:49,790 Rydym yn cael i ddweud, yr wyf am hyn yn llawer o elfennau. 33 00:01:49,790 --> 00:01:51,940 A allai fod yn 100, y gallai fod yn 1,000, y gallai 34 00:01:51,940 --> 00:01:55,930 fod x lle mae x yn rhif bod y defnyddiwr rhoi i ni mewn brydlon neu yn y gorchymyn 35 00:01:55,930 --> 00:01:56,630 llinell. 36 00:01:56,630 --> 00:01:59,905 >> Ond rydym yn unig yn cael un ergyd ar y sefyllfa, rydym yn peidiwch â mynd i wedyn yn dweud oh, mewn gwirionedd yr wyf yn 37 00:01:59,905 --> 00:02:04,360 angen 101, neu yr wyf yn ei angen x plws 20. 38 00:02:04,360 --> 00:02:07,910 Yn rhy hwyr, rydym eisoes wedi datgan y array, ac os ydym am gael 101 neu x 39 00:02:07,910 --> 00:02:12,050 ynghyd â 20, mae'n rhaid i ni ddatgan amrywiaeth hollol wahanol, 40 00:02:12,050 --> 00:02:15,540 gopïo'r holl elfennau y rhesi drosodd, ac yna mae gennym ddigon. 41 00:02:15,540 --> 00:02:19,880 A beth os ydym yn anghywir eto, beth os ydym ei angen mewn gwirionedd 102, neu x ynghyd â 40, 42 00:02:19,880 --> 00:02:21,970 mae'n rhaid i ni wneud hyn eto. 43 00:02:21,970 --> 00:02:26,250 Fel eu bod yn anhyblyg iawn am newid maint ein data, 44 00:02:26,250 --> 00:02:29,360 ond os ydym yn cyfuno ynghyd rai o'r elfennau sylfaenol yr ydym i wedi eisoes 45 00:02:29,360 --> 00:02:33,230 dysgu am awgrymiadau a strwythurau, yn enwedig gan ddefnyddio cof deinamig 46 00:02:33,230 --> 00:02:36,180 dyrannu â malloc, rydym yn Gall roi'r darnau hyn at ei gilydd 47 00:02:36,180 --> 00:02:40,960 i greu data newydd structure-- a Rhestr gallem say-- cysylltu'n unigol 48 00:02:40,960 --> 00:02:45,400 sy'n ein galluogi i dyfu a crebachu casgliad o werthoedd 49 00:02:45,400 --> 00:02:48,800 ac ni fydd gennym unrhyw le gwastraffu. 50 00:02:48,800 --> 00:02:53,320 >> Felly unwaith eto, rydym yn galw y syniad hwn, syniad hwn, rhestr cysylltiedig. 51 00:02:53,320 --> 00:02:56,320 Yn benodol, yn y fideo hwn rydym yn siarad am rhestr gysylltiedig yn unigol, 52 00:02:56,320 --> 00:02:59,185 ac yna fideo arall byddwn yn siarad rhestrau am cysylltu'n ddwbl, a oedd yn 53 00:02:59,185 --> 00:03:01,560 yn unig yw amrywiad ar thema yma. 54 00:03:01,560 --> 00:03:05,200 Ond mae rhestr cysylltiedig yn unigol yn cynnwys nodau, 55 00:03:05,200 --> 00:03:08,559 nodau dim ond bod yn term-- haniaethol 'i' jyst yn rhywbeth rwy'n galw 56 00:03:08,559 --> 00:03:10,350 mae hynny'n rhyw fath o strwythur, yn y bôn, rwy'n? 57 00:03:10,350 --> 00:03:16,190 Jyst yn mynd i alw ei fod yn node-- ac mae hyn Mae nod dau aelod, neu ddau gae. 58 00:03:16,190 --> 00:03:20,300 Mae ganddo data, fel arfer cyfanrif, fflôt cymeriad, 59 00:03:20,300 --> 00:03:23,790 neu a allai fod rhyw fath ddata arall eich bod wedi diffiniedig gydag def fath. 60 00:03:23,790 --> 00:03:29,290 Ac mae'n cynnwys pwyntydd i nod arall o'r un math. 61 00:03:29,290 --> 00:03:34,710 >> Felly mae gennym ddau beth tu mewn nod hwn, data a pwyntydd 62 00:03:34,710 --> 00:03:36,380 i nod arall. 63 00:03:36,380 --> 00:03:39,370 Ac os byddwch yn dechrau i ddychmygu hyn, gallwch chi feddwl am y peth 64 00:03:39,370 --> 00:03:42,280 fel cadwyn o nodau sy'n yn cael eu cysylltu gyda'i gilydd. 65 00:03:42,280 --> 00:03:45,070 Mae gennym y nod cyntaf, mae'n yn cynnwys data, ac pwyntydd 66 00:03:45,070 --> 00:03:49,110 i'r ail nod, sy'n cynnwys data, ac mae pwyntydd i'r trydydd nod. 67 00:03:49,110 --> 00:03:52,940 Ac felly dyna pam yr ydym yn galw ei fod yn rhestr gysylltiedig, maent yn gysylltiedig â'i gilydd. 68 00:03:52,940 --> 00:03:56,070 >> Beth mae hyn yn arbennig Strwythur nôd yn edrych? 69 00:03:56,070 --> 00:04:01,120 Wel, os ydych yn cofio oddi wrth ein fideo ar diffinio mathau arfer, gyda'r math def, 70 00:04:01,120 --> 00:04:05,400 gallwn ddiffinio structure-- a teipiwch diffinio strwythur fel hyn. 71 00:04:05,400 --> 00:04:11,240 tyepdef sllist struct, ac yna rwy'n ddefnyddio gwerth gair yma fympwyol 72 00:04:11,240 --> 00:04:13,891 i nodi unrhyw fath ddata mewn gwirionedd. 73 00:04:13,891 --> 00:04:16,890 Gallech drosglwyddo cyfanrif neu fflôt, gallech gael beth bynnag y dymunwch. 74 00:04:16,890 --> 00:04:19,389 Dyw hi ddim yn gyfyngedig i ddim ond cyfanrifau, neu unrhyw beth fel 'na. 75 00:04:19,389 --> 00:04:22,790 Felly gwerth yn unig yw mympwyol math data, ac yna pwyntydd 76 00:04:22,790 --> 00:04:26,310 i nod arall o'r un math. 77 00:04:26,310 --> 00:04:29,690 >> Yn awr, mae ychydig o dal yma gyda diffinio strwythur 78 00:04:29,690 --> 00:04:33,030 pan mae'n strwythur hunan cyfeiriadol. 79 00:04:33,030 --> 00:04:35,340 Mae'n rhaid i mi gael dros dro enw ar gyfer fy strwythur. 80 00:04:35,340 --> 00:04:37,640 Ar ddiwedd y dydd yr wyf yn yn glir am ei alw 81 00:04:37,640 --> 00:04:43,030 nod SLL, dyna yn y pen draw y newydd enwi rhan o fy diffiniad math o, 82 00:04:43,030 --> 00:04:47,450 ond ni allaf ddefnyddio nod SLL yng nghanol hyn. 83 00:04:47,450 --> 00:04:51,430 Y rheswm fodolaeth, nid wyf wedi creu math a elwir yn nod SLL 84 00:04:51,430 --> 00:04:55,200 nes i mi gyrraedd y pwynt olaf yma. 85 00:04:55,200 --> 00:04:59,720 Hyd at y pwynt hwnnw, rhaid i mi gael ffordd arall i gyfeirio at y math hwn o ddata. 86 00:04:59,720 --> 00:05:02,440 >> Ac mae hyn yn hunan Math data cyfeiriadol. 87 00:05:02,440 --> 00:05:06,314 Mae'n; s math data o strwythur sy'n cynnwys data, 88 00:05:06,314 --> 00:05:08,480 ac pwyntydd i un arall strwythur o'r un math. 89 00:05:08,480 --> 00:05:11,750 Felly mae angen i mi fod yn gallu cyfeirio at math hwn o ddata o leiaf dros dro, 90 00:05:11,750 --> 00:05:14,910 felly gan roi dros dro enw'r sllist struct 91 00:05:14,910 --> 00:05:18,540 yn caniatáu i mi wedyn dweud fy mod eisiau pwyntydd i'r sllist struct arall, 92 00:05:18,540 --> 00:05:24,690 seren sllist struct, ac yna ar ôl i mi gwblhau y diffiniad, 93 00:05:24,690 --> 00:05:27,220 Gall Galwaf yn awr y math hwn yn nod SLL. 94 00:05:27,220 --> 00:05:30,520 >> Felly dyna pam yr ydych yn gweld yna enw dros dro yma, 95 00:05:30,520 --> 00:05:31,879 ond enw parhaol yma. 96 00:05:31,879 --> 00:05:33,920 Weithiau, efallai y byddwch yn gweld diffiniadau o strwythur, 97 00:05:33,920 --> 00:05:36,570 er enghraifft, nad ydynt yn hunan cyfeiriadol, bod 98 00:05:36,570 --> 00:05:39,390 Nid oes rhaid i enw rhagnodwr yma. 99 00:05:39,390 --> 00:05:43,040 Byddai 'I jyst yn dweud struct typedef, agor Brace cyrliog ac yna'n ei ddiffinio. 100 00:05:43,040 --> 00:05:45,620 Ond os ydych chi'n struct yw hunan cyfeiriadol, gan fod hyn yn un yw, 101 00:05:45,620 --> 00:05:49,010 mae angen i chi benodi Enw'r math dros dro. 102 00:05:49,010 --> 00:05:51,310 Ond yn y pen draw, yn awr ein bod wedi gwneud hyn, 103 00:05:51,310 --> 00:05:53,620 gallwn jyst gyfeirio at nodau hyn, yr unedau hyn, 104 00:05:53,620 --> 00:05:57,900 fel nodau SLL at ddibenion o weddill y fideo. 105 00:05:57,900 --> 00:06:00,900 >> Mae pob hawl, felly rydym yn gwybod sut i greu rhestr nôd cysylltiedig. 106 00:06:00,900 --> 00:06:03,240 Rydym yn gwybod sut i ddiffinio cainc rhestr gysylltiedig. 107 00:06:03,240 --> 00:06:06,670 Yn awr, os ydym yn mynd i ddechrau eu defnyddio i gasglu gwybodaeth, 108 00:06:06,670 --> 00:06:10,360 mae yna un neu ddau o weithrediadau yr ydym yn Mae angen i ddeall a gweithio gyda hwy. 109 00:06:10,360 --> 00:06:12,860 Mae angen inni wybod sut i greu rhestr cysylltiedig allan o awyr denau. 110 00:06:12,860 --> 00:06:14,901 Os nad oes rhestr yn barod, rydym eisiau dechrau un. 111 00:06:14,901 --> 00:06:16,960 Felly, mae angen i ni fod yn gallu i greu rhestr cysylltiedig, 112 00:06:16,960 --> 00:06:19,130 mae angen yn ôl pob tebyg i chwilio drwy'r rhestr gyswllt 113 00:06:19,130 --> 00:06:21,830 i ddod o hyd elfen rydym yn chwilio am. 114 00:06:21,830 --> 00:06:24,430 Mae angen i ni fod yn gallu mewnosod pethau newydd i mewn i'r rhestr, 115 00:06:24,430 --> 00:06:25,930 rydym am ein rhestr i allu tyfu. 116 00:06:25,930 --> 00:06:28,638 Ac yn yr un modd, rydym am fod yn gallu i ddileu pethau oddi ar ein rhestr, 117 00:06:28,638 --> 00:06:30,250 rydym am ein rhestr i allu grebachu. 118 00:06:30,250 --> 00:06:32,160 Ac ar ddiwedd ein rhaglenni, yn enwedig 119 00:06:32,160 --> 00:06:34,550 os ydych yn cofio ein bod dyrannu cof ddeinamig 120 00:06:34,550 --> 00:06:38,337 i adeiladu rhestrau hyn yn nodweddiadol, rydym am i ryddhau hynny i gyd gof 121 00:06:38,337 --> 00:06:39,670 pan fyddwn ni'n ei wneud yn gweithio ag ef. 122 00:06:39,670 --> 00:06:44,627 Ac felly mae angen i ni fod yn gallu ddileu rhestr gysylltiedig cyfan mewn un yn methu plymio. 123 00:06:44,627 --> 00:06:46,460 Felly gadewch i ni fynd drwy'r mae rhai o'r gweithrediadau hyn 124 00:06:46,460 --> 00:06:51,192 a sut y byddwn yn eu delweddu, siarad mewn cod pseudocode benodol. 125 00:06:51,192 --> 00:06:53,150 Felly rydym eisiau creu rhestr gysylltiedig, felly efallai yr ydym 126 00:06:53,150 --> 00:06:56,480 eisiau i ddiffinio swyddogaeth gyda prototeip hwn. 127 00:06:56,480 --> 00:07:01,690 SLL seren nôd, creu, a dwi'n pasio mewn un ddadl, rhywfaint o ddata mympwyol 128 00:07:01,690 --> 00:07:05,530 deipio eto, o ryw fath data mympwyol. 129 00:07:05,530 --> 00:07:10,482 Ond dw i'n returning-- swyddogaeth hon dylai dychwelyd i mi pwyntydd, i yn unigol 130 00:07:10,482 --> 00:07:11,190 nod rhestr gysylltiedig. 131 00:07:11,190 --> 00:07:14,050 Unwaith eto, rydym yn ceisio creu rhestr cysylltiedig allan o awyr denau, 132 00:07:14,050 --> 00:07:17,900 felly mae angen pwyntydd i I y rhestr honno pan dwi'n ei wneud. 133 00:07:17,900 --> 00:07:19,420 >> Felly beth yw'r camau dan sylw yma? 134 00:07:19,420 --> 00:07:20,960 Wel, peth cyntaf dwi'n mynd i'w wneud yn ddynamig 135 00:07:20,960 --> 00:07:22,550 neilltuo lle ar gyfer nod newydd. 136 00:07:22,550 --> 00:07:26,689 Unwaith eto, rydym yn ei greu allan o denau aer, felly mae angen i ni lle malloc ar ei gyfer. 137 00:07:26,689 --> 00:07:28,480 Ac wrth gwrs, yn union ar ôl i ni malloc, 138 00:07:28,480 --> 00:07:31,692 rydym bob amser yn gwirio i wneud yn siŵr bod ein pointer-- doedden ni ddim yn mynd yn ôl null. 139 00:07:31,692 --> 00:07:33,650 Oherwydd os ydym yn ceisio deference pwyntydd nwl, 140 00:07:33,650 --> 00:07:36,190 rydyn ni'n mynd i ddioddef segfault ac nid ydym am hynny. 141 00:07:36,190 --> 00:07:39,510 >> Yna, rydym yn awyddus i lenwi'r yn y maes, rydym am ymgychwyn y cae gwerth 142 00:07:39,510 --> 00:07:41,690 ac ymgychwyn y cae nesaf. 143 00:07:41,690 --> 00:07:45,450 Ac yna rydym am i'r canlynol-- yn y pen draw wrth i'r prototeip swyddogaeth indicates-- rydym am 144 00:07:45,450 --> 00:07:49,940 i ddychwelyd pwyntydd at nod SLL. 145 00:07:49,940 --> 00:07:51,710 Felly beth yn gwneud hyn yn edrych fel eu golwg? 146 00:07:51,710 --> 00:07:55,230 Wel, yn gyntaf rydym yn mynd i ddeinamig neilltuo lle ar gyfer nod SLL newydd, 147 00:07:55,230 --> 00:07:58,320 felly rydym malloc-- dyna cynrychiolaeth weledol 148 00:07:58,320 --> 00:08:00,020 y nôd yr ydym newydd ei greu. 149 00:08:00,020 --> 00:08:02,757 Ac rydym yn gwirio i wneud yn siŵr nid yw'n null-- yn yr achos hwn, 150 00:08:02,757 --> 00:08:04,840 ni fyddai'r darlun yn cael Dangosir fyny os oedd null, 151 00:08:04,840 --> 00:08:07,298 byddem wedi rhedeg allan o gof, felly rydym yn dda i fynd yno. 152 00:08:07,298 --> 00:08:10,200 Felly nawr ein bod ar gamu C, ymgychwyn y maes nodau gwerth. 153 00:08:10,200 --> 00:08:12,280 Wel, yn seiliedig ar swyddogaeth hon ffoniwch Im 'yn arfer fan hyn, 154 00:08:12,280 --> 00:08:16,700 edrych fel yr wyf am eu trosglwyddo mewn 6, felly byddaf 6 yn y maes gwerth. 155 00:08:16,700 --> 00:08:18,865 Yn awr, ymgychwyn y cae nesaf. 156 00:08:18,865 --> 00:08:21,640 Wel, beth ydw i'n mynd i wneud yno, nid oes unrhyw beth nesaf, ar y dde, 157 00:08:21,640 --> 00:08:23,600 dyma'r unig beth yn y rhestr. 158 00:08:23,600 --> 00:08:27,206 Felly beth yw'r peth nesaf yn y rhestr? 159 00:08:27,206 --> 00:08:29,660 >> Ni ddylai fod bwyntio at unrhyw beth, ar y dde. 160 00:08:29,660 --> 00:08:33,600 Does dim byd arall yno, felly beth yw'r y cysyniad rydym yn gwybod am hynny'n nothing-- 161 00:08:33,600 --> 00:08:35,638 awgrymiadau i ddim? 162 00:08:35,638 --> 00:08:37,929 Dylai fod yn efallai rydym eisiau i roi pwyntydd null yno, 163 00:08:37,929 --> 00:08:40,178 a byddaf yn cynrychioli'r null pwyntydd fel dim ond blwch coch, 164 00:08:40,178 --> 00:08:41,559 Ni allwn fynd ymhellach. 165 00:08:41,559 --> 00:08:44,430 Fel y byddwn yn gweld ychydig yn nes ymlaen, bydd gennym yn y pen draw cadwyni 166 00:08:44,430 --> 00:08:46,330 o saethau cysylltu nodau hyn at ei gilydd, 167 00:08:46,330 --> 00:08:48,480 ond pan fyddwch yn cyrraedd y bocs coch, dyna null, 168 00:08:48,480 --> 00:08:51,150 Ni allwn fynd ymhellach, dyna ddiwedd y rhestr. 169 00:08:51,150 --> 00:08:53,960 >> Ac yn olaf, rydym yn unig eisiau dychwelyd pwyntydd i'r nod hwn. 170 00:08:53,960 --> 00:08:56,160 Felly byddwn yn ei alw'n newydd, a bydd yn dychwelyd newydd 171 00:08:56,160 --> 00:08:59,370 fel y gellir ei ddefnyddio mewn pa bynnag swyddogaeth greu. 172 00:08:59,370 --> 00:09:03,100 Felly dyna ni, Rydym wedi creu yn unigol rhestr gysylltiedig nod allan o awyr denau, 173 00:09:03,100 --> 00:09:05,920 ac erbyn hyn mae gennym restr y gallwn weithio gyda. 174 00:09:05,920 --> 00:09:08,260 >> Yn awr, gadewch i ni ddweud ein bod eisoes cael cadwyn mawr, 175 00:09:08,260 --> 00:09:09,800 ac rydym yn awyddus i ddod o hyd i rywbeth ynddo. 176 00:09:09,800 --> 00:09:12,716 Ac rydym am swyddogaeth sy'n mynd i ddychwelyd yn wir neu'n anwir, yn dibynnu 177 00:09:12,716 --> 00:09:15,840 ar p'un mae gwerth bodoli yn y rhestr honno. 178 00:09:15,840 --> 00:09:18,160 Mae prototeip swyddogaeth, neu datganiad am y swyddogaeth honno, 179 00:09:18,160 --> 00:09:23,320 Gallai edrych fel this-- Bool yn dod o hyd, a yna rydym am eu trosglwyddo mewn dau dadleuon. 180 00:09:23,320 --> 00:09:26,996 >> Y cyntaf, yn pwyntydd i'r Elfen gyntaf y rhestr cysylltiedig. 181 00:09:26,996 --> 00:09:29,620 Mae hyn mewn gwirionedd yn rhywbeth wnewch chi helpu bob amser yn awyddus i gadw golwg ar, 182 00:09:29,620 --> 00:09:33,110 ac mewn gwirionedd gallai fod yn rhywbeth y chi hyd yn oed rhoi mewn newidyn byd-eang. 183 00:09:33,110 --> 00:09:35,360 Ar ôl i chi greu rhestr, chi bob amser, bob amser yn 184 00:09:35,360 --> 00:09:38,990 am gadw golwg ar yr union Elfen gyntaf y rhestr. 185 00:09:38,990 --> 00:09:43,690 Os gwnewch hyn gallwch gyfeirio at yr holl arall elfennau at jyst yn dilyn y gadwyn, 186 00:09:43,690 --> 00:09:47,300 heb orfod cadw awgrymiadau yn gyfan i bob elfen unigol. 187 00:09:47,300 --> 00:09:50,920 Dim ond angen i chi gadw golwg ar y cyntaf un os maen nhw i gyd gadwyn gyda'i gilydd. 188 00:09:50,920 --> 00:09:52,460 >> Ac yna yr ail beth rydym yn pasio i mewn eto 189 00:09:52,460 --> 00:09:54,376 yn fympwyol some-- pa bynnag ddata Math rydym yn 190 00:09:54,376 --> 00:09:59,640 chwilio am ceir tu mewn gobeithio, yn un o'r nodau yn y rhestr. 191 00:09:59,640 --> 00:10:00,980 Felly beth yw'r camau? 192 00:10:00,980 --> 00:10:04,250 Wel, y peth cyntaf yr ydym yn ei wneud yw rydym yn creu pwyntydd ardrawslin 193 00:10:04,250 --> 00:10:06,015 pwyntio at y pen rhestrau. 194 00:10:06,015 --> 00:10:08,890 Wel, pam yr ydym yn gwneud hynny, yr ydym eisoes fod â pwyntydd yn y pen rhestrau, 195 00:10:08,890 --> 00:10:10,974 pam nad ydym yn dim ond symud bod un o gwmpas? 196 00:10:10,974 --> 00:10:13,140 Wel, fel yr wyf newydd ei ddweud, mae'n bwysig iawn i ni 197 00:10:13,140 --> 00:10:17,580 i bob amser yn cadw golwg ar y Elfen gyntaf yn y rhestr. 198 00:10:17,580 --> 00:10:21,270 Ac felly mae'n mewn gwirionedd yn well i greu dyblyg o hynny, 199 00:10:21,270 --> 00:10:25,350 ac yn defnyddio hynny i symud o gwmpas, felly ni fyddwn byth ddamweiniol yn symud i ffwrdd, neu byddwn bob amser yn 200 00:10:25,350 --> 00:10:30,430 cael pwyntydd ar ryw adeg sy'n i'r dde ar elfen gyntaf y rhestr. 201 00:10:30,430 --> 00:10:33,290 Felly mae'n well i greu ail un yr ydym yn eu defnyddio i symud. 202 00:10:33,290 --> 00:10:35,877 >> Yna, rydym yn unig yn cymharu a yw maes gwerth ar y nod 203 00:10:35,877 --> 00:10:38,960 yw'r hyn rydym yn chwilio am, ac os yw'n nid, rydym yn unig yn symud at y nod nesaf. 204 00:10:38,960 --> 00:10:41,040 Ac rydym yn cadw gwneud hynny drosodd, a thros, a throsodd, 205 00:10:41,040 --> 00:10:44,811 nes i ni naill ai yn dod o hyd yr elfen, neu yr ydym taro 206 00:10:44,811 --> 00:10:47,310 null-- rydym wedi cyrraedd diwedd o'r rhestr ac nid yw yno. 207 00:10:47,310 --> 00:10:50,540 Dylai hyn, gobeithio, ffonio gloch i chi chwilio llinellol fel dim ond, 208 00:10:50,540 --> 00:10:54,430 rydym yn unig ddyblygu mewn strwythur rhestr gysylltiedig yn unigol 209 00:10:54,430 --> 00:10:56,280 yn hytrach na defnyddio amrywiaeth i wneud hynny. 210 00:10:56,280 --> 00:10:58,210 >> Felly dyma enghraifft o rhestr cysylltiedig yn unigol. 211 00:10:58,210 --> 00:11:00,043 Mae hyn yn un yn cynnwys pum nodau, ac mae gennym 212 00:11:00,043 --> 00:11:04,330 pwyntydd i ben y rhestr, a elwir yn rhestr. 213 00:11:04,330 --> 00:11:07,385 Y peth cyntaf yr ydym am ei wneud yw unwaith eto, yn creu y pwyntydd llwybro. 214 00:11:07,385 --> 00:11:09,760 Felly, mae gennym bellach ddau awgrymiadau y pwynt hwnnw at yr un peth. 215 00:11:09,760 --> 00:11:15,025 >> Yn awr, yn sylwi yma hefyd, doeddwn i ddim rhaid i malloc unrhyw le ar gyfer Trav. 216 00:11:15,025 --> 00:11:18,970 Doeddwn i ddim yn dweud Trav hafal malloc rhywbeth, y nod yn bodoli eisoes, 217 00:11:18,970 --> 00:11:21,160 bod lle yn y cof sydd eisoes yn bodoli. 218 00:11:21,160 --> 00:11:24,290 Felly, i gyd fy mod yn gwneud yn union yw creu pwyntydd arall iddo. 219 00:11:24,290 --> 00:11:28,210 Dydw i ddim yn mallocing ychwanegol gofod, dim ond yn awr dau awgrymiadau 220 00:11:28,210 --> 00:11:31,370 gan dynnu sylw at yr un peth. 221 00:11:31,370 --> 00:11:33,710 >> Felly, mae 2 beth rwy'n chwilio amdano? 222 00:11:33,710 --> 00:11:37,220 Wel, na, felly yn lle rwy'n mynd i symud i'r un nesaf. 223 00:11:37,220 --> 00:11:41,740 Felly y bôn byddwn yn dweud, Trav hafal Trav nesaf. 224 00:11:41,740 --> 00:11:43,630 Yw 3 yr hyn dwi'n chwilio am, dim. 225 00:11:43,630 --> 00:11:45,780 Felly, yr wyf yn parhau i fynd trwy, tan yn y pen draw 226 00:11:45,780 --> 00:11:48,690 cyrraedd 6 sef yr hyn yr wyf i'n edrych am yn seiliedig ar y swyddogaeth alwad 227 00:11:48,690 --> 00:11:51,600 Mae gen i ar y brig yno, ac felly rwy'n ei wneud. 228 00:11:51,600 --> 00:11:54,150 >> Yn awr, beth os yr elfen dwi'n Nid yw chwilio amdano yn y rhestr, 229 00:11:54,150 --> 00:11:55,510 a yw'n dal i fynd i'r gwaith? 230 00:11:55,510 --> 00:11:57,120 Wel, yn sylwi fod y rhestr dyma ychydig yn wahanol, 231 00:11:57,120 --> 00:11:59,410 ac mae hyn yn beth arall sy'n bwysig gyda rhestrau cysylltiedig, 232 00:11:59,410 --> 00:12:01,780 Nid oes rhaid i chi gadw hwy mewn unrhyw drefn benodol. 233 00:12:01,780 --> 00:12:05,390 Gallwch os ydych yn dymuno, ond Efallai eich bod eisoes wedi sylwi 234 00:12:05,390 --> 00:12:09,310 nad ydym yn cadw golwg ar pa elfen rhif yr ydym ar. 235 00:12:09,310 --> 00:12:13,150 >> A dyna fath o un masnach yr ydym wedi gyda rhestr gysylltiedig penillion araeau, 236 00:12:13,150 --> 00:12:15,300 a yw'n nad oes gennym hapgyrch anymore. 237 00:12:15,300 --> 00:12:18,150 Ni allwn ond dweud, yr wyf am i fynd i'r elfen 0fed, 238 00:12:18,150 --> 00:12:21,410 neu elfen 6ed fy array, yr wyf yn gallu ei wneud mewn arae. 239 00:12:21,410 --> 00:12:25,080 Ni allaf ddweud fy mod i eisiau mynd i'r Elfen 0fed, neu'r 6ed elfen, 240 00:12:25,080 --> 00:12:30,360 neu elfen 25ain o fy rhestr cysylltiedig, does dim mynegai gysylltiedig â hwy. 241 00:12:30,360 --> 00:12:33,660 Ac felly nid yw'n wir bwys os ydym yn cadw ein rhestr mewn trefn. 242 00:12:33,660 --> 00:12:36,080 Os ydych am i chi yn sicr yn gallu, ond mae 243 00:12:36,080 --> 00:12:38,567 unrhyw reswm pam y mae angen iddynt yn cael eu cadw mewn unrhyw drefn. 244 00:12:38,567 --> 00:12:40,400 Felly unwaith eto, gadewch i ni geisio a dod o hyd i 6 yn y rhestr hon. 245 00:12:40,400 --> 00:12:43,200 Wel, rydym yn dechrau ar y dechrau, nid ydym yn dod o hyd i 6, 246 00:12:43,200 --> 00:12:47,690 ac yna nid ydym yn parhau dod o hyd i 6, tan i ni yn y pen draw gyrraedd fan hyn. 247 00:12:47,690 --> 00:12:52,790 Pwyntiau bellach Trav mor gywir i y nôd nad ydynt yn cynnwys 8, a chwech yw mewn 'na. 248 00:12:52,790 --> 00:12:55,250 >> Felly byddai'r cam nesaf fydd i fynd i'r pwyntydd nesaf, 249 00:12:55,250 --> 00:12:57,440 felly yn dweud Trav hafal Trav nesaf. 250 00:12:57,440 --> 00:13:00,750 Wel, Trav nesaf, a ddangosir gan y blwch coch yno, yn null. 251 00:13:00,750 --> 00:13:03,020 Felly does unman arall i fynd, ac yn y blaen ar hyn o bryd 252 00:13:03,020 --> 00:13:06,120 gallwn ddod i'r casgliad ein bod ni wedi cyrraedd diwedd y rhestr cysylltiedig, 253 00:13:06,120 --> 00:13:07,190 ac nid oedd 6 yw mewn 'na. 254 00:13:07,190 --> 00:13:10,980 A byddai'n cael ei ddychwelyd ffug yn yr achos hwn. 255 00:13:10,980 --> 00:13:14,540 >> OK, sut ydyn ni'n mewnosod newydd nod i mewn i'r rhestr gysylltiedig? 256 00:13:14,540 --> 00:13:17,310 Felly, rydym wedi llwyddo i greu rhestr cysylltiedig tu allan i unman, 257 00:13:17,310 --> 00:13:19,370 ond mae'n debyg ein bod yn awyddus i adeiladu cadwyn ac nid 258 00:13:19,370 --> 00:13:22,620 creu criw o restrau gwahanol. 259 00:13:22,620 --> 00:13:25,700 Rydym yn awyddus i gael un rhestr sy'n Mae criw o nodau ynddo, 260 00:13:25,700 --> 00:13:28,040 Nid yw criw o restrau gyda nod sengl. 261 00:13:28,040 --> 00:13:31,260 Felly, ni allwn jyst cadw defnyddio'r Creu swyddogaeth yr ydym diffinnir yn gynharach, yn awr rydym 262 00:13:31,260 --> 00:13:33,860 eisiau i fewnosod i mewn i rhestr sydd eisoes yn bodoli. 263 00:13:33,860 --> 00:13:36,499 >> Felly yr achos hwn, rydym yn mynd i basio mewn dwy ddadl, 264 00:13:36,499 --> 00:13:39,290 pwyntydd i bennaeth y Rhestr yr ydym am ychwanegu at cysylltiedig. 265 00:13:39,290 --> 00:13:40,910 Unwaith eto, dyna pam ei bod mor bwysig ein bod yn bob amser 266 00:13:40,910 --> 00:13:43,400 cadw golwg ar hynny, oherwydd dyma'r unig ffordd yr ydym mewn gwirionedd 267 00:13:43,400 --> 00:13:46,690 rhaid i gyfeirio at y rhestr gyfan yn dim ond gan pwyntydd i'r elfen gyntaf. 268 00:13:46,690 --> 00:13:49,360 Felly rydym am eu trosglwyddo mewn pwyntydd i'r elfen gyntaf, 269 00:13:49,360 --> 00:13:52,226 a beth bynnag gwerth yr ydym eisiau ychwanegu at y rhestr. 270 00:13:52,226 --> 00:13:54,600 Ac yn y diwedd swyddogaeth hon yn mynd i ddychwelyd pwyntydd 271 00:13:54,600 --> 00:13:57,980 i'r pennaeth newydd o restr cysylltiedig. 272 00:13:57,980 --> 00:13:59,700 >> Beth yw'r camau dan sylw yma? 273 00:13:59,700 --> 00:14:02,249 Wel, yn union fel gyda chreu, mae angen i ni ddyrannu ddeinamig 274 00:14:02,249 --> 00:14:05,540 lle ar gyfer nod newydd, a gwirio i wneud yn sicr nid ydym yn rhedeg allan o gof, unwaith eto, 275 00:14:05,540 --> 00:14:07,150 oherwydd ein bod yn defnyddio malloc. 276 00:14:07,150 --> 00:14:09,080 Yna, rydym am i boblogi a rhowch y nod, 277 00:14:09,080 --> 00:14:12,730 felly rhowch y rhif, beth bynnag Val yw, i mewn i'r nod. 278 00:14:12,730 --> 00:14:17,310 Rydym am i fewnosod y nôd ar cychwyn y rhestr cysylltiedig. 279 00:14:17,310 --> 00:14:19,619 >> Mae 'na reswm yr wyf yn am wneud hyn, ac mae'n 280 00:14:19,619 --> 00:14:21,910 allai fod yn werth cymryd eiliad i oedi y fideo yma, 281 00:14:21,910 --> 00:14:25,860 ac yn ystyried pam fyddwn i eisiau mewnosoder ar y dechrau o cysylltiedig 282 00:14:25,860 --> 00:14:26,589 rhestr. 283 00:14:26,589 --> 00:14:28,630 Unwaith eto, soniais yn gynharach nad yw'n wir 284 00:14:28,630 --> 00:14:33,020 ots os ydym yn ei gadw mewn unrhyw gorchymyn, felly efallai dyna cliw. 285 00:14:33,020 --> 00:14:36,040 A welsoch yr hyn a fyddai'n digwydd os byddwn yn eisiau canlynol-- neu o ddim ond ail 286 00:14:36,040 --> 00:14:37,360 yn ôl pan oeddem yn mynd trwy chwilio yr ydych 287 00:14:37,360 --> 00:14:39,235 Gallai weld beth allai yn digwydd os oeddem yn ceisio 288 00:14:39,235 --> 00:14:41,330 i fewnosod ar ddiwedd y rhestr. 289 00:14:41,330 --> 00:14:44,750 Oherwydd nad oes gennym Pointer at ddiwedd y rhestr. 290 00:14:44,750 --> 00:14:47,490 >> Felly y rheswm y byddwn am i mewnosoder ar y dechrau, 291 00:14:47,490 --> 00:14:49,380 yw oherwydd fy mod yn gallu ei wneud ar unwaith. 292 00:14:49,380 --> 00:14:52,730 Mae gen i pwyntydd ar y dechrau, ac byddwn yn gweld hyn mewn golwg mewn eiliad. 293 00:14:52,730 --> 00:14:55,605 Ond os ydw i am mewnosoder ar y diwedd, Mae'n rhaid i mi ddechrau ar y dechrau, 294 00:14:55,605 --> 00:14:58,760 croesi yr holl ffordd at y diwedd, ac yna tac ymlaen. 295 00:14:58,760 --> 00:15:01,420 Felly byddai hynny'n golygu y mewnosod ar ddiwedd y rhestr 296 00:15:01,420 --> 00:15:04,140 Byddai dod yn o o n gweithredu, yn mynd yn ôl 297 00:15:04,140 --> 00:15:06,720 at ein trafodaeth ar cymhlethdod cyfrifiadurol. 298 00:15:06,720 --> 00:15:10,140 Byddai'n dod yn o o n llawdriniaeth, lle fel y rhestr mynd yn fwy, ac yn fwy, 299 00:15:10,140 --> 00:15:13,310 a mwy, bydd yn dod yn fwy a fwy anodd i'w tac rhywbeth 300 00:15:13,310 --> 00:15:14,661 ar ar y diwedd. 301 00:15:14,661 --> 00:15:17,410 Ond mae'n hawdd iawn i bob amser tac rhywbeth ar ar y dechrau, 302 00:15:17,410 --> 00:15:19,060 eich bod bob amser ar y dechrau. 303 00:15:19,060 --> 00:15:21,620 >> A byddwn yn gweld gweledol o hyn eto. 304 00:15:21,620 --> 00:15:24,100 Ac yna ar ôl i ni yn ei wneud, unwaith rydym wedi mewnosod y nôd newydd, 305 00:15:24,100 --> 00:15:26,880 rydym am ddychwelyd i'n pwyntydd i y pennaeth newydd o restr cysylltiedig, a oedd yn 306 00:15:26,880 --> 00:15:29,213 ers i ni yn mewnosod yn y dechrau, bydd mewn gwirionedd yn 307 00:15:29,213 --> 00:15:31,060 pwyntydd i'r nod yr ydym newydd ei greu. 308 00:15:31,060 --> 00:15:33,280 Gadewch i ddychmygu hyn, gan fy mod yn meddwl y bydd yn helpu. 309 00:15:33,280 --> 00:15:36,661 >> Felly dyma ein rhestr, mae'n cynnwys pedair elfen, mae cainc sy'n cynnwys 15, 310 00:15:36,661 --> 00:15:38,410 sy'n pwyntio at nod sy'n cynnwys 9, a oedd yn 311 00:15:38,410 --> 00:15:41,370 yn pwyntio at nod sy'n cynnwys 13, sy'n pwyntio at nod sy'n cynnwys 312 00:15:41,370 --> 00:15:44,840 10, sydd â'r null pwyntydd fel ei pwyntydd nesaf 313 00:15:44,840 --> 00:15:47,010 felly dyna ddiwedd y rhestr. 314 00:15:47,010 --> 00:15:50,200 Felly rydym am i fewnosod nod newydd gyda gwerth 12 315 00:15:50,200 --> 00:15:52,720 ar ddechrau'r hwn rhestr, beth ydym yn ei wneud? 316 00:15:52,720 --> 00:15:58,770 Wel, yn gyntaf rydym yn malloc lle ar gyfer y nod, ac yna rydym yn rhoi 12 i mewn 'na. 317 00:15:58,770 --> 00:16:02,211 >> Felly nawr rydym wedi cyrraedd pwynt penderfyniad, dde? 318 00:16:02,211 --> 00:16:03,960 Mae gennym un neu ddau o awgrymiadau y gallem 319 00:16:03,960 --> 00:16:06,770 symud, pa un dylem symud yn gyntaf? 320 00:16:06,770 --> 00:16:09,250 Dylem wneud 12 pwynt i y pennaeth newydd y list-- 321 00:16:09,250 --> 00:16:13,020 neu esgus i mi, dylem wneud 12 tynnu sylw at yr hen bennaeth y rhestr? 322 00:16:13,020 --> 00:16:15,319 Neu a ddylem ddweud bod y rhestr yn awr yn dechrau am 12. 323 00:16:15,319 --> 00:16:17,110 Mae 'na gwahaniaeth yno, a byddwn yn edrych 324 00:16:17,110 --> 00:16:19,870 ar yr hyn sy'n digwydd gyda'r ddau mewn eiliad. 325 00:16:19,870 --> 00:16:23,350 >> Ond mae hyn yn arwain at bwnc gwych ar gyfer sidebar, 326 00:16:23,350 --> 00:16:26,280 sef bod un o'r pethau dyrys gyda rhestrau cysylltiedig 327 00:16:26,280 --> 00:16:30,980 yw i drefnu'r awgrymiadau yn y drefn gywir. 328 00:16:30,980 --> 00:16:34,520 Os byddwch yn symud pethau allan o drefn, gallwch yn y pen draw yn ddamweiniol 329 00:16:34,520 --> 00:16:36,050 orphaning gweddill y rhestr. 330 00:16:36,050 --> 00:16:37,300 A dyma enghraifft o hynny. 331 00:16:37,300 --> 00:16:40,540 Felly gadewch i ni fynd â'r syniad o- yn dda, rydym newydd ei greu 12. 332 00:16:40,540 --> 00:16:43,180 Rydym yn gwybod 12 yn mynd i fod y pennaeth newydd y rhestr, 333 00:16:43,180 --> 00:16:47,660 ac felly pam nad ydym yn unig yn symud y rhestr pwyntydd i bwynt yno. 334 00:16:47,660 --> 00:16:49,070 >> Iawn, felly dyna dda. 335 00:16:49,070 --> 00:16:51,560 Felly nawr lle mae 12 pwynt nesaf? 336 00:16:51,560 --> 00:16:54,580 Yr wyf yn golygu, yn weledol gallwn weld y bydd yn pwyntio i 15, 337 00:16:54,580 --> 00:16:57,250 fel bodau dynol mae'n wirioneddol amlwg i ni. 338 00:16:57,250 --> 00:17:00,300 Sut mae'r cyfrifiadur yn ei wybod? 339 00:17:00,300 --> 00:17:02,720 Nid oes gennym unrhyw beth pwyntio at 15 anymore, dde? 340 00:17:02,720 --> 00:17:05,869 >> Rydyn ni wedi colli unrhyw allu i gyfeirio at 15. 341 00:17:05,869 --> 00:17:11,460 Ni allwn ddweud saeth newydd hafal nesaf rhywbeth, does dim byd yno. 342 00:17:11,460 --> 00:17:13,510 Yn wir, rydym wedi amddifad gweddill y rhestr 343 00:17:13,510 --> 00:17:16,465 trwy wneud hynny, rydym wedi ddamweiniol torri y gadwyn. 344 00:17:16,465 --> 00:17:18,089 Ac rydym yn sicr ddim eisiau gwneud hynny. 345 00:17:18,089 --> 00:17:20,000 >> Felly gadewch i ni fynd yn ôl a rhowch gynnig ar hyn eto. 346 00:17:20,000 --> 00:17:24,060 Efallai y peth iawn i'w wneud yw gosod 12 oed pwyntydd nesaf 347 00:17:24,060 --> 00:17:28,290 i'r hen bennaeth y rhestr yn gyntaf, Yna, gallwn symud y rhestr drosodd. 348 00:17:28,290 --> 00:17:30,420 Ac yn wir, dyna'r drefn gywir ein bod yn 349 00:17:30,420 --> 00:17:32,836 angen eu dilyn pan fyddwn ni'n gan weithio gyda rhestr cysylltiedig yn unigol. 350 00:17:32,836 --> 00:17:36,460 Rydym bob amser yn awyddus i gysylltu'r Elfen newydd i mewn i'r rhestr, 351 00:17:36,460 --> 00:17:41,010 cyn i ni gymryd y math hwnnw o gam pwysig o newid 352 00:17:41,010 --> 00:17:43,360 lle mae'r pennaeth y rhestr cysylltiedig yn. 353 00:17:43,360 --> 00:17:46,740 Unwaith eto, mae hynny'n beth mor sylfaenol, nid ydym am golli golwg ar ei. 354 00:17:46,740 --> 00:17:49,310 >> Felly, rydym am wneud yn siŵr bod popeth yn cael ei gadwyn gyda'i gilydd, 355 00:17:49,310 --> 00:17:52,040 cyn i ni symud y pwyntydd. 356 00:17:52,040 --> 00:17:55,300 Ac felly byddai hyn yn y drefn gywir, sef er mwyn cysylltu 12 at y rhestr, 357 00:17:55,300 --> 00:17:57,630 Yna, yn dweud bod y rhestr yn dechrau 12. 358 00:17:57,630 --> 00:18:00,860 Os byddwn dywedodd y rhestr yn dechrau am 12 a Yna ceisiodd cysylltu 12 at y rhestr, 359 00:18:00,860 --> 00:18:02,193 rydym wedi gweld yn barod beth sy'n digwydd. 360 00:18:02,193 --> 00:18:04,920 Rydym yn colli y rhestr drwy gamgymeriad. 361 00:18:04,920 --> 00:18:06,740 >> Iawn, felly un peth arall i siarad am. 362 00:18:06,740 --> 00:18:09,750 Beth os ydym am gael gwared ar yn gyfan rhestr gysylltiedig ar unwaith? 363 00:18:09,750 --> 00:18:11,750 Unwaith eto, rydym yn mallocing i gyd y gofod hwn, ac felly rydym yn 364 00:18:11,750 --> 00:18:13,351 Mae angen i ryddhau pan fyddwn yn ei wneud. 365 00:18:13,351 --> 00:18:15,350 Felly nawr rydym am ddileu'r y rhestr cysylltiedig cyfan. 366 00:18:15,350 --> 00:18:16,850 Wel, beth ydym ni eisiau ei wneud? 367 00:18:16,850 --> 00:18:20,460 >> Os byddwn wedi cyrraedd y pwyntydd null, rydym yn am roi'r gorau i, fel arall, jyst ddilea 368 00:18:20,460 --> 00:18:23,420 gweddill y rhestr ac yna rhyddhau i mi. 369 00:18:23,420 --> 00:18:28,890 Dileu gweddill y rhestr, ac yna rhyddhau'r nod ar hyn o bryd. 370 00:18:28,890 --> 00:18:32,850 Beth mae hynny'n swnio fel, pa dechneg wedi buom yn siarad 371 00:18:32,850 --> 00:18:35,440 am y gorffennol mae hynny'n swnio fel? 372 00:18:35,440 --> 00:18:39,560 Dileu pawb arall, yna dod yn ôl a dileu mi. 373 00:18:39,560 --> 00:18:42,380 >> Dyna recursion, rydym wedi gwneud y problem ychydig yn llai, 374 00:18:42,380 --> 00:18:46,910 rydyn ni'n ei ddweud dileu pawb arall, yna gallwch ddileu mi. 375 00:18:46,910 --> 00:18:50,940 Ac ymhellach i lawr y ffordd, y nod Bydd dweud, dileu pawb arall. 376 00:18:50,940 --> 00:18:53,940 Ond yn y pen draw byddwn yn mynd i'r pwynt lle mae'r rhestr yn null, 377 00:18:53,940 --> 00:18:55,310 a dyna ein achos sylfaenol. 378 00:18:55,310 --> 00:18:57,010 >> Felly, gadewch i ni edrych ar hyn, a sut y gallai hyn weithio. 379 00:18:57,010 --> 00:18:59,759 Felly dyma ein rhestr, 'i' yr un fath Rhestrwch yr oeddem yn unig yn siarad am, 380 00:18:59,759 --> 00:19:00,980 ac mae y grisiau. 381 00:19:00,980 --> 00:19:04,200 Mae llawer o destun yma, ond Gobeithio y bydd y delweddu helpu. 382 00:19:04,200 --> 00:19:08,557 >> Felly rydym have-- ac rwyf hefyd yn tynnu ein darluniad fframiau stac 383 00:19:08,557 --> 00:19:10,890 oddi wrth ein fideo ar staciau galwadau, a gobeithio hyn oll 384 00:19:10,890 --> 00:19:13,260 at ei gilydd, bydd yn dangos i chi beth sy'n digwydd. 385 00:19:13,260 --> 00:19:14,510 Felly dyma ein cod pseudocode. 386 00:19:14,510 --> 00:19:17,830 Os byddwn yn cyrraedd null pwyntydd, stopio, fel arall, 387 00:19:17,830 --> 00:19:21,320 dileu gweddill y rhestr, Yna, rhad ac am ddim y nod ar hyn o bryd. 388 00:19:21,320 --> 00:19:25,700 Felly ar hyn o bryd, list-- pwyntydd ein bod 389 00:19:25,700 --> 00:19:28,410 pasio mewn i ddinistrio pwynt i 12. 390 00:19:28,410 --> 00:19:33,340 12 Nid yw pwyntydd null, felly rydym yn mynd i ddileu gweddill y rhestr. 391 00:19:33,340 --> 00:19:35,450 >> Beth yw dileu'r gweddill ohonom gymryd rhan? 392 00:19:35,450 --> 00:19:37,950 Wel, mae'n golygu gwneud galw i ddinistrio, gan ddweud 393 00:19:37,950 --> 00:19:42,060 bod 15 yn cychwyn y gweddill y rhestr yr ydym am ei ddinistrio. 394 00:19:42,060 --> 00:19:47,480 Ac felly yr alwad i ddinistrio 12 yn fath o am y tro. 395 00:19:47,480 --> 00:19:52,690 Mae wedi rhewi yno, yn aros am y galw i ddinistrio 15, i orffen ei waith. 396 00:19:52,690 --> 00:19:56,280 >> Wel, nid yw 15 yn pwyntydd nwl, ac felly mae'n mynd i ddweud, yn iawn, 397 00:19:56,280 --> 00:19:58,450 yn dda, dileu gweddill y rhestr. 398 00:19:58,450 --> 00:20:00,760 Mae gweddill y rhestr yn dechrau yn 9, ac felly rydym annhymerus unig 399 00:20:00,760 --> 00:20:04,514 aros nes i chi ddileu bob un sy'n stwff, ac yna dod yn ôl a dileu mi. 400 00:20:04,514 --> 00:20:06,680 Wel 9 yn mynd i ddweud, wel, Dydw i ddim yn pwyntydd null, 401 00:20:06,680 --> 00:20:09,020 felly dileu'r gweddill y rhestr o fan hyn. 402 00:20:09,020 --> 00:20:11,805 Ac felly ceisiwch a dinistrio 13. 403 00:20:11,805 --> 00:20:15,550 13 yn dweud, dydw i ddim pwyntydd null, un peth, mae'n mynd y bwch. 404 00:20:15,550 --> 00:20:17,930 10 Nid yw pwyntydd null, 10 yn cynnwys pwyntydd nwl, 405 00:20:17,930 --> 00:20:20,200 ond nid ei hun yn 10 yw null pwyntydd ar hyn o bryd, 406 00:20:20,200 --> 00:20:22,470 ac felly mae'n pasio y bwch hefyd. 407 00:20:22,470 --> 00:20:25,560 >> Ac yn awr rhestru pwyntiau yno, mae'n Byddai 'n sylweddol pwynt i some-- 408 00:20:25,560 --> 00:20:28,710 os wyf wedi mwy o le yn y llun, byddai'n tynnu sylw at ychydig o le ar hap 409 00:20:28,710 --> 00:20:29,960 nad ydym yn gwybod beth ydyw. 410 00:20:29,960 --> 00:20:34,680 Mae'n y pwyntydd null fodd bynnag, mae'r rhestr yn llythrennol osod nawr mae'n gwerthoedd null. 411 00:20:34,680 --> 00:20:36,820 Mae'n pwyntio i'r dde y tu mewn i'r bocs coch. 412 00:20:36,820 --> 00:20:39,960 Rydym yn cyrraedd pwyntydd null, felly gallwn atal, ac rydym yn ei wneud. 413 00:20:39,960 --> 00:20:46,230 >> Ac felly bod ffrâm porffor yn now-- yn y ben stack-- dyna'r ffrâm weithredol, 414 00:20:46,230 --> 00:20:47,017 ond mae'n ei wneud. 415 00:20:47,017 --> 00:20:48,600 Os ydym wedi cyrraedd pwyntydd null, rhoi'r gorau. 416 00:20:48,600 --> 00:20:51,290 Nid ydym yn gwneud unrhyw beth, rydym yn Ni all ryddhau pwyntydd nwl, 417 00:20:51,290 --> 00:20:55,070 doedden ni ddim yn malloc unrhyw gofod, ac felly rydym yn ei wneud. 418 00:20:55,070 --> 00:20:57,590 Er mwyn i ffrâm swyddogaeth yn cael ei ddinistrio, ac yr ydym yn 419 00:20:57,590 --> 00:21:00,930 resume-- rydym yn codi lle rydym yn gadael i ffwrdd gyda'r un uchaf nesaf, sy'n 420 00:21:00,930 --> 00:21:02,807 a yw hyn yn ffrâm glas tywyll yma. 421 00:21:02,807 --> 00:21:04,390 Felly, rydym yn codi yn iawn lle'r ydym yn gadael i ffwrdd. 422 00:21:04,390 --> 00:21:06,598 Rydym yn dileu gweddill y rhestr yn barod, felly erbyn hyn rydym yn 423 00:21:06,598 --> 00:21:08,000 mynd i ryddhau y nodau cyfredol. 424 00:21:08,000 --> 00:21:12,920 Felly, erbyn hyn gallwn ryddhau nod hwn, ac yn awr rydym wedi cyrraedd diwedd y swyddogaeth. 425 00:21:12,920 --> 00:21:16,810 Ac felly bod ffrâm swyddogaeth yn cael ei ddinistrio, ac yr ydym yn casglu yn yr un glas golau. 426 00:21:16,810 --> 00:21:20,650 >> Felly mae'n says-- Rwyf eisoes wedi done-- dileu gweddill y rhestr, felly 427 00:21:20,650 --> 00:21:23,140 rhad ac am ddim y nôd ar hyn o bryd. 428 00:21:23,140 --> 00:21:26,520 Ac yn awr y ffrâm melyn yn yn ôl ar ben y pentwr. 429 00:21:26,520 --> 00:21:29,655 Ac felly fel y gwelwch, rydym yn awr yn dinistrio'r rhestr o'r dde i'r chwith. 430 00:21:29,655 --> 00:21:33,710 431 00:21:33,710 --> 00:21:37,280 >> Beth fyddai wedi digwydd, fodd bynnag, os ydym wedi gwneud pethau y ffordd anghywir? 432 00:21:37,280 --> 00:21:39,410 Yn union fel pan fyddwn yn ceisio i ychwanegu elfen. 433 00:21:39,410 --> 00:21:41,909 Os byddwn yn cyboledig i fyny y gadwyn, os doedden ni ddim yn cysylltu'r awgrymiadau 434 00:21:41,909 --> 00:21:44,690 yn y drefn gywir, os ydym dim ond rhyddhau yr elfen gyntaf, 435 00:21:44,690 --> 00:21:47,420 os ydym yn unig rhyddhau y pennaeth y rhestr, yn awr rydym 436 00:21:47,420 --> 00:21:49,642 yn cael unrhyw ffordd i gyfeirio at gweddill y rhestr. 437 00:21:49,642 --> 00:21:51,350 Ac felly byddem wedi popeth amddifad, 438 00:21:51,350 --> 00:21:53,880 byddem wedi cael yr hyn sydd Gelwir yn gollwng cof. 439 00:21:53,880 --> 00:21:56,800 Os cofiwch oddi wrth ein fideo ar ddyraniad cof deinamig, 440 00:21:56,800 --> 00:21:58,650 nid yw hynny'n beth da iawn. 441 00:21:58,650 --> 00:22:00,810 >> Felly, fel y dywedais, mae sawl weithrediadau 442 00:22:00,810 --> 00:22:04,010 bod angen i ni ei ddefnyddio i weithio gyda rhestr chysylltu'n effeithiol. 443 00:22:04,010 --> 00:22:08,430 Ac efallai eich bod wedi sylwi fy mod hepgor un, dileu un elfen o cysylltiedig 444 00:22:08,430 --> 00:22:09,064 rhestr. 445 00:22:09,064 --> 00:22:10,980 Y rheswm yr wyf yn gwneud hynny a yw'n mewn gwirionedd fath o 446 00:22:10,980 --> 00:22:14,360 anodd i feddwl am sut i ddileu elfen unigol o unigol 447 00:22:14,360 --> 00:22:15,600 rhestr gysylltiedig. 448 00:22:15,600 --> 00:22:19,950 Mae angen i ni fod yn gallu sgip dros rhywbeth yn y rhestr, a oedd yn 449 00:22:19,950 --> 00:22:22,975 yn golygu ein bod yn cael i ni'n point-- am ddileu node-- hwn 450 00:22:22,975 --> 00:22:25,350 ond er mwyn ei gwneud yn felly rydym peidiwch â cholli unrhyw wybodaeth, 451 00:22:25,350 --> 00:22:30,530 mae angen i ni gysylltu hyn nod dros yma, yma. 452 00:22:30,530 --> 00:22:33,390 >> Felly yr wyf yn ôl pob tebyg yn gwneud hynny yn anghywir o safbwynt gweledol. 453 00:22:33,390 --> 00:22:36,830 Felly, rydym yn ar ddechrau ein rhestr, rydym yn bwrw ymlaen drwy, 454 00:22:36,830 --> 00:22:40,510 rydym eisiau dileu nod hwn. 455 00:22:40,510 --> 00:22:43,440 Os ydym yn unig ddileu, rydym wedi torri'r gadwyn. 456 00:22:43,440 --> 00:22:45,950 Mae'r nôd yma yn cyfeirio at bopeth arall, 457 00:22:45,950 --> 00:22:48,260 ei fod yn cynnwys y gadwyn o hyn ymlaen y tu allan. 458 00:22:48,260 --> 00:22:51,190 >> Felly beth sydd angen i wneud mewn gwirionedd ar ôl i ni gyrraedd y pwynt, 459 00:22:51,190 --> 00:22:56,670 yn rhaid i ni gymryd cam yn ôl un, a cysylltu nod hwn drosodd i nod hwn, 460 00:22:56,670 --> 00:22:58,590 fel y gallwn ni wedyn ddileu yr un yn y canol. 461 00:22:58,590 --> 00:23:02,120 Ond nid yw rhestrau cysylltiedig yn unigol yn ei wneud rhoi ffordd i fynd yn ôl. 462 00:23:02,120 --> 00:23:05,160 Felly mae angen i naill ai cadw dau awgrymiadau, a'u symud 463 00:23:05,160 --> 00:23:09,527 math o oddi ar gam, un y tu ôl i'r eraill wrth i ni fynd, neu gael hyd at bwynt 464 00:23:09,527 --> 00:23:11,110 ac wedyn anfon pwyntydd arall drwodd. 465 00:23:11,110 --> 00:23:13,150 Ac fel y gwelwch, mae'n yn gallu cael ychydig o anniben. 466 00:23:13,150 --> 00:23:15,360 Yn ffodus, mae gennym ffordd arall i ddatrys hynny, 467 00:23:15,360 --> 00:23:17,810 pan fyddwn yn sôn am restrau cysylltiedig ddwbl. 468 00:23:17,810 --> 00:23:20,720 >> Rwy'n Doug Lloyd, mae hyn yn CS50. 469 00:23:20,720 --> 00:23:22,298