1 00:00:00,000 --> 00:00:01,000 [Powered by Google Translate] [Adran 6] [Mwy cyfforddus] 2 00:00:01,000 --> 00:00:04,000 [Rob Bowden] [Harvard University] 3 00:00:04,000 --> 00:00:09,000 [Mae hyn yn CS50.] [CS50.TV] 4 00:00:09,000 --> 00:00:11,000 >> Gallwn pennaeth i'n hadran o gwestiynau. 5 00:00:11,000 --> 00:00:17,000 Yr wyf yn anfon y URL ar gyfer y gofod o'r blaen. 6 00:00:17,000 --> 00:00:22,000 Mae'r ddechrau'r adran o'r cwestiynau yn dweud- 7 00:00:22,000 --> 00:00:26,000 ymddengys nad wyf ddim yn hollol unsick-yn gwestiwn hawdd iawn 8 00:00:26,000 --> 00:00:28,000 dim ond hyn a valgrind? 9 00:00:28,000 --> 00:00:30,000 Beth mae valgrind ei wneud? 10 00:00:30,000 --> 00:00:34,000 Dylai unrhyw un sydd eisiau i ddweud beth valgrind ei wneud? 11 00:00:34,000 --> 00:00:36,000 [Myfyrwyr] Gwiriadau cof gollwng. 12 00:00:36,000 --> 00:00:41,000 Yeah, valgrind yn gwiriwr cof cyffredinol. 13 00:00:41,000 --> 00:00:44,000 It, yn y pen draw, yn dweud wrthych os oes gennych unrhyw ollyngiadau cof, 14 00:00:44,000 --> 00:00:49,000 sydd yn bennaf yr hyn rydym yn ei ddefnyddio ar gyfer oherwydd os ydych am i 15 00:00:49,000 --> 00:00:54,000 gwneud yn dda yn y set broblem neu os ydych eisiau 16 00:00:54,000 --> 00:00:59,000 mynd ar y bwrdd mawr, mae angen i chi gael unrhyw ollyngiadau cof o gwbl, 17 00:00:59,000 --> 00:01:01,000 a rhag ofn bod gennych ollyngiad cof na allwch ddod o hyd, 18 00:01:01,000 --> 00:01:04,000 hefyd yn cadw mewn cof bod pryd bynnag y byddwch yn agor ffeil 19 00:01:04,000 --> 00:01:07,000 ac os nad ydych yn cau, dyna yn gollwng cof. 20 00:01:07,000 --> 00:01:10,000 >> Mae llawer o bobl yn chwilio am rai nod nad ydynt yn rhyddhau 21 00:01:10,000 --> 00:01:15,000 pan mewn gwirionedd, nid oeddent yn cau'r geiriadur yn y cam cyntaf. 22 00:01:15,000 --> 00:01:19,000 Mae hefyd yn dweud wrthych os oes gennych unrhyw annilys darllen neu ysgrifennu, 23 00:01:19,000 --> 00:01:22,000 sy'n golygu os byddwch yn ceisio gosod gwerth 24 00:01:22,000 --> 00:01:26,000 dyna y tu hwnt i ddiwedd y domen ac nid yw'n digwydd i fai seg 25 00:01:26,000 --> 00:01:30,000 ond valgrind dal, fel na ddylech yn ysgrifennu mewn gwirionedd yno, 26 00:01:30,000 --> 00:01:33,000 ac felly nad ydych yn sicr ddylai gael unrhyw un o'r rheini chwaith. 27 00:01:33,000 --> 00:01:38,000 Sut ydych chi'n ei ddefnyddio valgrind? 28 00:01:38,000 --> 00:01:42,000 Sut ydych chi'n ei ddefnyddio valgrind? 29 00:01:42,000 --> 00:01:45,000 >> Mae'n gwestiwn cyffredinol o 30 00:01:45,000 --> 00:01:49,000 fath o redeg ac yn edrych ar yr allbwn. 31 00:01:49,000 --> 00:01:51,000 Mae'r allbwn yn llethol llawer o weithiau. 32 00:01:51,000 --> 00:01:54,000 Mae hefyd gwallau hwyl lle os oes gennych rhywbeth mawr o'i le 33 00:01:54,000 --> 00:01:59,000 digwydd mewn cylch, yna bydd yn y pen draw yn dweud, "wallau Way gormod. 34 00:01:59,000 --> 00:02:03,000 Rydw i'n mynd i roi'r gorau i gyfrif yn awr. " 35 00:02:03,000 --> 00:02:08,000 Mae'n bôn allbwn testunol bod rhaid i chi dosrannu. 36 00:02:08,000 --> 00:02:13,000 Yn y pen draw, bydd yn dweud wrthych unrhyw ollyngiadau cof sydd gennych, 37 00:02:13,000 --> 00:02:16,000 faint o flociau, a all fod yn ddefnyddiol oherwydd 38 00:02:16,000 --> 00:02:20,000 os yw'n un unfreed bloc, yna fel arfer mae'n haws i ddod o hyd i 39 00:02:20,000 --> 00:02:23,000 na 1,000 o flociau unfreed. 40 00:02:23,000 --> 00:02:26,000 1000 blociau unfreed yn ôl pob tebyg yn golygu nad ydych yn rhyddhau 41 00:02:26,000 --> 00:02:30,000 eich rhestrau cysylltu'n briodol neu rywbeth. 42 00:02:30,000 --> 00:02:32,000 Dyna valgrind. 43 00:02:32,000 --> 00:02:35,000 >> Nawr rydym wedi ein adran o gwestiynau, 44 00:02:35,000 --> 00:02:38,000 nad oes angen i chi lawrlwytho. 45 00:02:38,000 --> 00:02:41,000 Gallwch glicio ar fy enw a'u tynnu i fyny yn y gofod. 46 00:02:41,000 --> 00:02:44,000 Nawr cliciwch ar mi. 47 00:02:44,000 --> 00:02:46,000 Bydd Revision 1 yn stac, yr ydym yn ei wneud yn gyntaf. 48 00:02:46,000 --> 00:02:55,000 Bydd Diwygiad 2 yn ciw, a bydd Revision 3 yn y rhestr yn unigol cysylltiedig. 49 00:02:55,000 --> 00:02:58,000 Dechrau off gyda'n simnai. 50 00:02:58,000 --> 00:03:02,000 Fel y mae'n dweud yma, pentwr yn un o'r rhai mwyaf sylfaenol, 51 00:03:02,000 --> 00:03:07,000 strwythurau data sylfaenol o wyddoniaeth gyfrifiadurol. 52 00:03:07,000 --> 00:03:11,000 Mae'r enghraifft iawn prototypical yn 53 00:03:11,000 --> 00:03:13,000 y pentwr o hambyrddau yn y neuadd fwyta. 54 00:03:13,000 --> 00:03:16,000 Mae'n bôn pryd bynnag y byddwch yn cael eu cyflwyno i stac, 55 00:03:16,000 --> 00:03:20,000 rhywun yn mynd i ddweud, "O, fel pentwr o hambyrddau." 56 00:03:20,000 --> 00:03:22,000 Stacio yr hambyrddau i fyny. 57 00:03:22,000 --> 00:03:24,000 Yna, pan fyddwch yn mynd i dynnu hambwrdd, 58 00:03:24,000 --> 00:03:31,000 yr hambwrdd cyntaf sy'n cael ei dynnu yw'r un olaf a gafodd ei roi ar y corn. 59 00:03:31,000 --> 00:03:34,000 Mae'r stac hefyd-fel ei fod yn dweud yma- 60 00:03:34,000 --> 00:03:37,000 gennym y segment o gof a elwir yn y pentwr. 61 00:03:37,000 --> 00:03:40,000 A pham mae'n cael ei alw y pentwr? 62 00:03:40,000 --> 00:03:42,000 >> Oherwydd fel data pentwr strwythur, 63 00:03:42,000 --> 00:03:46,000 mae'n gwthio a pops fframiau stac ar y simnai, 64 00:03:46,000 --> 00:03:53,000 lle mae fframiau stac sydd fel galwad benodol o swyddogaeth. 65 00:03:53,000 --> 00:03:57,000 Ac fel pentwr, bydd gennych bob amser i ddychwelyd 66 00:03:57,000 --> 00:04:03,000 o alwad swyddogaeth cyn y gallwch fynd i lawr i mewn i fframiau stac yn is eto. 67 00:04:03,000 --> 00:04:08,000 Ni allwch gael bar galwadau galwadau prif foo a dychwelyd bar yn uniongyrchol brif. 68 00:04:08,000 --> 00:04:14,000 Mae bob amser yn rhaid i ddilyn y pentwr cywir gwthio a popping. 69 00:04:14,000 --> 00:04:18,000 Mae'r ddau gweithrediadau, fel y dywedais, yn gwthio a pop. 70 00:04:18,000 --> 00:04:20,000 Mae'r rhain yn dermau cyffredinol. 71 00:04:20,000 --> 00:04:26,000 Dylech wybod gwthio a pop o ran y pentyrrau ni waeth beth. 72 00:04:26,000 --> 00:04:28,000 Byddwn yn gweld ciwiau yn fath o wahanol. 73 00:04:28,000 --> 00:04:32,000 Nid oes mewn gwirionedd yn cael tymor cyffredinol, ond mae gwthio a pop yn gyffredinol ar gyfer pentyrrau. 74 00:04:32,000 --> 00:04:34,000 Push yn cael ei roi yn unig ar y pentwr. 75 00:04:34,000 --> 00:04:37,000 Pop yn cymryd oddi ar y pentwr. 76 00:04:37,000 --> 00:04:43,000 Ac rydym yn gweld yma, rydym wedi ein corn strwythur typedef, 77 00:04:43,000 --> 00:04:46,000 felly mae gennym llinynnau ** torgoch. 78 00:04:46,000 --> 00:04:51,000 Peidiwch â chael ofn gan unrhyw **. 79 00:04:51,000 --> 00:04:54,000 Mae hyn yn mynd i roi diwedd ar i fyny fod yn amrywiaeth o dannau 80 00:04:54,000 --> 00:04:58,000 neu amrywiaeth o awgrymiadau i gymeriadau, lle 81 00:04:58,000 --> 00:05:00,000 awgrymiadau i gymeriadau yn tueddu i fod llinynnau. 82 00:05:00,000 --> 00:05:05,000 Nid oes raid iddo fod llinynnau, ond yma, maen nhw'n mynd i fod yn llinynnau. 83 00:05:05,000 --> 00:05:08,000 >> Mae gennym amrywiaeth o linynnau. 84 00:05:08,000 --> 00:05:14,000 Mae gennym faint, sy'n cynrychioli faint o elfennau hyn o bryd ar y simnai, 85 00:05:14,000 --> 00:05:19,000 ac yna mae gennym y capasiti, a dyna sut y gall llawer o elfennau ar y pentwr. 86 00:05:19,000 --> 00:05:22,000 Dylai'r gallu dechrau fel rhywbeth mwy nag 1, 87 00:05:22,000 --> 00:05:27,000 ond mae maint yn mynd i ddechrau fel 0. 88 00:05:27,000 --> 00:05:36,000 Yn awr, mae yn y bôn tair ffordd wahanol y gallwch chi feddwl am pentwr. 89 00:05:36,000 --> 00:05:39,000 Wel, mae yna fwy na thebyg, ond y ddau brif ffordd yn 90 00:05:39,000 --> 00:05:43,000 gallwch ei rhoi ar waith drwy ddefnyddio amrywiaeth eang, neu gallwch ei weithredu gan ddefnyddio rhestr cysylltiedig. 91 00:05:43,000 --> 00:05:48,000 Rhestrau cysylltiedig yn fath o ddibwys i wneud pentyrrau o. 92 00:05:48,000 --> 00:05:51,000 Mae'n hawdd iawn i wneud pentwr defnyddio rhestrau cysylltiedig, 93 00:05:51,000 --> 00:05:55,000 felly yma, rydym yn mynd i wneud pentwr defnyddio araeau, 94 00:05:55,000 --> 00:05:59,000 ac yna defnyddio araeau, mae hefyd dwy ffordd y gallwch chi feddwl am y peth. 95 00:05:59,000 --> 00:06:01,000 Cyn, pan ddywedais mae gennym gapasiti ar gyfer y simnai, 96 00:06:01,000 --> 00:06:04,000 fel y gallwn gynnwys elfen ar y pentwr. 97 00:06:04,000 --> 00:06:09,000 >> Mae'r un ffordd y gallai ddigwydd yw cyn gynted ag y byddwch yn taro 10 elfen, yna rydych chi'n ei wneud. 98 00:06:09,000 --> 00:06:13,000 Efallai y byddwch yn gwybod bod yna uchaf rhwymo o 10 pethau yn y byd 99 00:06:13,000 --> 00:06:16,000 na fydd gennych fwy na 10 peth ar eich simnai, 100 00:06:16,000 --> 00:06:20,000 ac os felly gallwch gael uchaf rhwymo ar faint eich pentwr. 101 00:06:20,000 --> 00:06:23,000 Neu fe allech chi gael eich pentwr yn cael ei ddirfawr, 102 00:06:23,000 --> 00:06:27,000 ond os ydych yn gwneud amrywiaeth, mae hynny'n golygu bod bob tro byddwch yn taro 10 elfen, 103 00:06:27,000 --> 00:06:29,000 yna rydych chi'n mynd i gael i dyfu i 20 elfen, a phan fyddwch yn cyflawni 20 elfen, 104 00:06:29,000 --> 00:06:33,000 ydych chi'n mynd i gael i dyfu eich amrywiaeth i 30 elfen neu 40 elfen. 105 00:06:33,000 --> 00:06:37,000 Rydych yn mynd i angen i gynyddu capasiti, a dyna beth ydym yn mynd i'w wneud yma. 106 00:06:37,000 --> 00:06:40,000 Bob tro sengl rydym yn cyrraedd y maint mwyaf o'n simnai, 107 00:06:40,000 --> 00:06:46,000 pan fyddwn yn gwthio rhywbeth arall ymlaen, rydym yn mynd i angen i gynyddu capasiti. 108 00:06:46,000 --> 00:06:50,000 Yma, rydym wedi datgan gwthio fel gwthio bool (torgoch * str). 109 00:06:50,000 --> 00:06:54,000 Str * Torgoch yn y llinyn yr ydym yn eu gwthio ar y pentwr, 110 00:06:54,000 --> 00:06:58,000 a dim ond yn dweud bool a ydym yn llwyddo neu wedi methu. 111 00:06:58,000 --> 00:07:00,000 >> Sut y byddwn yn methu? 112 00:07:00,000 --> 00:07:04,000 Beth yw'r unig amgylchiad y gallwch chi feddwl am 113 00:07:04,000 --> 00:07:07,000 lle y byddai angen i ni ddychwelyd ffug? 114 00:07:07,000 --> 00:07:09,000 Yeah. 115 00:07:09,000 --> 00:07:12,000 [Myfyrwyr] Os yw'n llawn ac rydym yn defnyddio weithredu ffinio. 116 00:07:12,000 --> 00:07:17,000 Yeah, felly sut ydym yn diffinio-efe a atebodd 117 00:07:17,000 --> 00:07:23,000 os yw'n llawn ac rydym yn defnyddio gweithredu ffinio. 118 00:07:23,000 --> 00:07:26,000 Yna byddwn yn bendant yn dychwelyd ffug. 119 00:07:26,000 --> 00:07:31,000 Cyn gynted ag y byddwn yn cyrraedd 10 peth yn yr amrywiaeth, ni allwn ffitio 11, felly rydym yn dychwelyd ffug. 120 00:07:31,000 --> 00:07:32,000 Beth os caiff ei ddirfawr? Yeah. 121 00:07:32,000 --> 00:07:38,000 Os nad ydych yn gallu ehangu yr amrywiaeth am ryw reswm. 122 00:07:38,000 --> 00:07:43,000 Yeah, felly cof yn adnodd cyfyngedig, 123 00:07:43,000 --> 00:07:51,000 ac yn y pen draw, os byddwn yn cadw pethau'n wthio ar y pentwr drosodd a throsodd, 124 00:07:51,000 --> 00:07:54,000 rydym yn mynd i geisio dyrannu amrywiaeth mwy i gyd-fynd 125 00:07:54,000 --> 00:07:59,000 y gallu mwy o faint, a malloc neu beth bynnag rydym yn ei ddefnyddio yn mynd i ddychwelyd ffug. 126 00:07:59,000 --> 00:08:02,000 Wel, bydd malloc dychwelyd null. 127 00:08:02,000 --> 00:08:05,000 >> Cofiwch, bob tro chi erioed wedi galw malloc, dylech fod yn edrych i weld a yw'n 128 00:08:05,000 --> 00:08:12,000 dychwelyd null neu arall sy'n didyniad cywirdeb. 129 00:08:12,000 --> 00:08:17,000 Gan ein bod am gael stac diderfyn, 130 00:08:17,000 --> 00:08:21,000 yr achos yn unig yr ydym yn mynd i gael ei dychwelyd ffug yw os ydym yn ceisio 131 00:08:21,000 --> 00:08:26,000 cynyddu gallu a malloc neu beth bynnag yn dychwelyd ffug. 132 00:08:26,000 --> 00:08:30,000 Yna pop yn cymryd unrhyw ddadleuon, 133 00:08:30,000 --> 00:08:37,000 ac yn dychwelyd y llinyn sydd ar ben y pentwr. 134 00:08:37,000 --> 00:08:41,000 Beth bynnag oedd fwyaf diweddar gwthio ar y pentwr yw'r hyn pop yn dychwelyd, 135 00:08:41,000 --> 00:08:44,000 ac mae hefyd yn tynnu oddi wrth y pentwr. 136 00:08:44,000 --> 00:08:50,000 Ac yn sylwi ei fod yn dychwelyd null os nad oes dim ar y pentwr. 137 00:08:50,000 --> 00:08:53,000 Mae bob amser yn bosibl bod y pentwr yn wag. 138 00:08:53,000 --> 00:08:55,000 Yn Java, os ydych chi'n arfer â hynny, neu ieithoedd eraill, 139 00:08:55,000 --> 00:09:01,000 Gallai ceisio pop o stac gwag yn achosi eithriad neu rywbeth. 140 00:09:01,000 --> 00:09:09,000 >> Ond yn C, null yn fath o lawer o'r achosion sut rydym yn trin y problemau hyn. 141 00:09:09,000 --> 00:09:13,000 Dychwelyd null yw sut yr ydym yn mynd i ddangos bod y pentwr yn wag. 142 00:09:13,000 --> 00:09:16,000 Rydym wedi darparu cod a fydd yn profi ymarferoldeb eich pentwr, yn 143 00:09:16,000 --> 00:09:19,000 gweithredu gwthio a pop. 144 00:09:19,000 --> 00:09:23,000 Ni fydd hyn yn llawer o god. 145 00:09:23,000 --> 00:09:40,000 Byddaf-mewn gwirionedd, cyn i ni wneud hynny, awgrym, awgrym- 146 00:09:40,000 --> 00:09:44,000 os nad ydych wedi ei weld, nid malloc yw'r unig swyddogaeth 147 00:09:44,000 --> 00:09:47,000 sy'n dyrannu cof ar y domen i chi. 148 00:09:47,000 --> 00:09:51,000 Mae yna deulu o swyddogaethau Dyraniad. 149 00:09:51,000 --> 00:09:53,000 Y cyntaf yw malloc, yr ydych yn ei ddefnyddio i. 150 00:09:53,000 --> 00:09:56,000 Yna mae calloc, sy'n gwneud yr un peth â malloc, 151 00:09:56,000 --> 00:09:59,000 ond bydd yn sero popeth allan i chi. 152 00:09:59,000 --> 00:10:04,000 Os ydych chi wedi bod eisiau erioed i osod popeth i null ôl mallocing rhywbeth 153 00:10:04,000 --> 00:10:06,000 dylech fod wedi defnyddio dim ond calloc yn y lle cyntaf yn hytrach nag ysgrifennu 154 00:10:06,000 --> 00:10:09,000 a ar gyfer dolen i sero y bloc cyfan o gof. 155 00:10:09,000 --> 00:10:15,000 >> Realloc yn debyg malloc ac mae ganddo lawer o achosion arbennig, 156 00:10:15,000 --> 00:10:19,000 ond yn y bôn yr hyn y realloc yn ei wneud yn 157 00:10:19,000 --> 00:10:24,000 mae'n cymryd pwyntydd a oedd eisoes wedi'i ddyrannu. 158 00:10:24,000 --> 00:10:27,000 Realloc yw'r swyddogaeth rydych am ei fod yn talu sylw i yma. 159 00:10:27,000 --> 00:10:31,000 Mae'n cymryd pwyntydd oedd eisoes wedi'i dychwelyd o'r malloc. 160 00:10:31,000 --> 00:10:35,000 Lets 'ddeud ydych yn gofyn malloc pwyntydd o 10 bytes. 161 00:10:35,000 --> 00:10:38,000 Yna, yn ddiweddarach rydych yn sylweddoli eich bod am 20 bytes, 162 00:10:38,000 --> 00:10:42,000 felly byddwch yn ffonio realloc ar y pwyntydd gyda 20 bytes, 163 00:10:42,000 --> 00:10:47,000 a bydd realloc yn awtomatig gopïo dros bopeth i chi. 164 00:10:47,000 --> 00:10:51,000 Os ydych yn Dim ond galw malloc eto, fel yr wyf yn cael bloc o 10 bytes. 165 00:10:51,000 --> 00:10:53,000 Nawr mae angen bloc o 20 bytes, 166 00:10:53,000 --> 00:10:58,000 felly os wyf malloc 20 bytes, yna rhaid i mi llaw gopïo dros y 10 bytes o'r peth cyntaf 167 00:10:58,000 --> 00:11:01,000 i mewn i'r ail beth, ac yna rhad ac am ddim y peth cyntaf. 168 00:11:01,000 --> 00:11:04,000 Bydd Realloc trin hynny i chi. 169 00:11:04,000 --> 00:11:11,000 >> Sylwch ar y llofnod yn mynd i fod yn ddi-rym *, 170 00:11:11,000 --> 00:11:15,000 sydd yn unig yw dychwelyd pwyntydd i'r bloc o cof, 171 00:11:15,000 --> 00:11:17,000 yna ddi-rym * ptr. 172 00:11:17,000 --> 00:11:22,000 Gallwch feddwl am * ddi-rym fel pwyntydd generig. 173 00:11:22,000 --> 00:11:27,000 Yn gyffredinol, ni fyddwch yn delio â * ddi-rym, 174 00:11:27,000 --> 00:11:30,000 ond malloc yn dychwelyd * ddi-rym, ac yna mae'n cael ei ddefnyddio yn union fel 175 00:11:30,000 --> 00:11:34,000 hyn mewn gwirionedd yn mynd i fod yn * torgoch. 176 00:11:34,000 --> 00:11:37,000 * Yn ddi-rym blaenorol a oedd wedi ei ddychwelyd gan malloc 177 00:11:37,000 --> 00:11:41,000 yn awr yn mynd i gael ei drosglwyddo i'r realloc, ac yna maint 178 00:11:41,000 --> 00:11:49,000 yw nifer newydd o bytes ydych am ddyrannu, fel bod eich capasiti newydd. 179 00:11:49,000 --> 00:11:57,000 'N annhymerus' yn rhoi i chi munudau, ac yn ei wneud yn ein gofod. 180 00:11:57,000 --> 00:12:02,000 Dechrau gyda Adolygu 1. 181 00:12:16,000 --> 00:12:21,000 'N annhymerus' rhoi'r gorau i chi ar ôl gobeithio am digon o amser i weithredu gwthio, 182 00:12:21,000 --> 00:12:24,000 ac yna byddaf yn rhoi egwyl arall i wneud pop. 183 00:12:24,000 --> 00:12:27,000 Ond mae'n wir nad yw y cod llawer o gwbl. 184 00:12:27,000 --> 00:12:35,000 Mae'r cod y rhan fwyaf, mae'n debyg y pethau ehangu, ymestyn y capasiti. 185 00:12:35,000 --> 00:12:39,000 Iawn, dim pwysau i gael ei wneud yn gyfan gwbl, 186 00:12:39,000 --> 00:12:47,000 ond cyn belled ag y byddwch yn teimlo fel eich bod ar y llwybr cywir, sy'n dda. 187 00:12:47,000 --> 00:12:53,000 >> Oes gan unrhyw un unrhyw god maent yn teimlo'n gyfforddus gyda mi dynnu i fyny? 188 00:12:53,000 --> 00:12:59,000 Yeah, byddaf, ond nid unrhyw un gael unrhyw god gallaf dynnu i fyny? 189 00:12:59,000 --> 00:13:05,000 Iawn, a allwch chi ddechrau, ei gadw, beth bynnag ydyw? 190 00:13:05,000 --> 00:13:09,000 Rwyf bob amser yn anghofio y cam hwnnw. 191 00:13:09,000 --> 00:13:15,000 Iawn, gan edrych ar gwthio, 192 00:13:15,000 --> 00:13:18,000 ydych chi eisiau i egluro eich cod? 193 00:13:18,000 --> 00:13:24,000 [Myfyrwyr] Yn gyntaf oll, yr wyf cynyddu maint. 194 00:13:24,000 --> 00:13:28,000 Amcana efallai y dylwn gael y-beth bynnag, yr wyf cynyddu maint, 195 00:13:28,000 --> 00:13:31,000 ac rwy'n gweld os yw'n llai na'r gallu. 196 00:13:31,000 --> 00:13:36,000 Ac os yw'n llai na'r gallu, yr wyf yn ychwanegu at yr amrywiaeth sydd gennym eisoes. 197 00:13:36,000 --> 00:13:42,000 Ac os na, rwy'n lluosi y gallu gan 2, 198 00:13:42,000 --> 00:13:50,000 ac yr wyf ailddyrannu'r amrywiaeth llinynnau i rywbeth gyda maint allu fwy yn awr. 199 00:13:50,000 --> 00:13:55,000 Ac yna os yw hynny'n methu, mi ddweud wrth y defnyddiwr ac yn dychwelyd ffug, 200 00:13:55,000 --> 00:14:04,000 ac os ei fod yn iawn, yna yr wyf yn rhoi y llinyn yn y fan a'r lle newydd. 201 00:14:04,000 --> 00:14:07,000 >> [Rob B.] Hefyd yn sylwi ein bod yn defnyddio gweithredwr bitwise 'n glws yma 202 00:14:07,000 --> 00:14:09,000 er mwyn lluosi â 2. 203 00:14:09,000 --> 00:14:11,000 Cofiwch, newid y chwith bob amser yn mynd i gael ei lluosi â 2. 204 00:14:11,000 --> 00:14:15,000 Symudiad cywir yn cael ei rhannu â 2 cyn belled ag y byddwch yn cofio ei fod yn golygu 205 00:14:15,000 --> 00:14:18,000 rannu â 2 fel mewn cyfanrif wedi'i rannu â 2. 206 00:14:18,000 --> 00:14:20,000 Gallai fod gwtogi'r amser o 1 yma ac acw. 207 00:14:20,000 --> 00:14:26,000 Ond mae newid a adawyd gan 1 yn cael ei bob amser yn mynd i gael ei lluosi â 2, 208 00:14:26,000 --> 00:14:32,000 oni bai eich bod gorlifo i ffiniau'r cyfanrif, ac yna ni bydd. 209 00:14:32,000 --> 00:14:34,000 Mae sylw ochr. 210 00:14:34,000 --> 00:14:39,000 Rwy'n hoffi ei wneud-hyn, nid yn mynd i newid y codio unrhyw ffordd o gwbl, 211 00:14:39,000 --> 00:14:48,000 ond yr wyf yn hoffi i wneud rhywbeth fel hyn. 212 00:14:48,000 --> 00:14:51,000 Mae'n mewn gwirionedd yn mynd i'w wneud yn ychydig yn hirach. 213 00:15:04,000 --> 00:15:08,000 Efallai nad yw hyn yn wir perffaith i ddangos hyn, 214 00:15:08,000 --> 00:15:14,000 ond yr wyf yn hoffi ei rhannu i mewn i'r blociau o- 215 00:15:14,000 --> 00:15:17,000 iawn, os yw hyn os digwydd, yna yr wyf i'n mynd i wneud rhywbeth, 216 00:15:17,000 --> 00:15:19,000 ac yna y swyddogaeth yn cael ei wneud. 217 00:15:19,000 --> 00:15:22,000 Nid oes angen i mi yna sgroliwch fy llygaid yr holl ffordd i lawr y swyddogaeth 218 00:15:22,000 --> 00:15:25,000 i weld beth sy'n digwydd ar ôl y arall. 219 00:15:25,000 --> 00:15:27,000 Mae'n os bydd hyn os digwydd, yna Fi jyst dychwelyd. 220 00:15:27,000 --> 00:15:30,000 Mae ganddo hefyd y fantais ychwanegol o 'n glws bopeth y tu hwnt i'r 221 00:15:30,000 --> 00:15:33,000 yn awr yn symud i'r chwith unwaith. 222 00:15:33,000 --> 00:15:40,000 Rwyf bellach yn rhaid i-os ydych chi erioed yn agos chwerthinllyd llinellau hir, 223 00:15:40,000 --> 00:15:45,000 yna gall y 4 bytes helpu, a hefyd y rhywbeth mwy chwith yw, 224 00:15:45,000 --> 00:15:48,000 y lleiaf llethu chi'n teimlo os hoffech-iawn, rhaid i mi gofio 225 00:15:48,000 --> 00:15:53,000 Hyn o bryd rwy'n mewn cylch tra tu mewn y tu mewn arall o am ddolen. 226 00:15:53,000 --> 00:15:58,000 Unrhyw le y gallwch wneud ffurflen hon ar unwaith, yr wyf yn fath o fel. 227 00:15:58,000 --> 00:16:05,000 Mae'n hollol ddewisol ac ni ddisgwylir mewn unrhyw ffordd. 228 00:16:05,000 --> 00:16:12,000 >> [Myfyrwyr] ddylid fod o faint - yn y cyflwr yn methu? 229 00:16:12,000 --> 00:16:19,000 Mae'r cyflwr yn methu yma yn ein methu â realloc, felly ydy. 230 00:16:19,000 --> 00:16:22,000 Sylwch sut yn y cyflwr yn methu, yn ôl pob tebyg, 231 00:16:22,000 --> 00:16:26,000 oni bai ein bod pethau ddim yn ddiweddarach, rydym bob amser yn mynd i fethu 232 00:16:26,000 --> 00:16:29,000 ni waeth faint o weithiau rydym yn ceisio gwthio rhywbeth. 233 00:16:29,000 --> 00:16:32,000 Os byddwn yn cadw gwthio, rydym yn cadw maint incrementing, 234 00:16:32,000 --> 00:16:36,000 er nad ydym yn rhoi unrhyw beth ar y pentwr. 235 00:16:36,000 --> 00:16:39,000 Fel arfer nid ydym yn hicyn maint hyd nes y 236 00:16:39,000 --> 00:16:43,000 ar ôl i ni wedi llwyddo i roi ar y corn. 237 00:16:43,000 --> 00:16:50,000 Byddem yn gwneud hyn, dyweder, naill ai yma ac yma. 238 00:16:50,000 --> 00:16:56,000 Ac yna yn hytrach na dweud s.size ≤ gallu, mae'n llai na gallu, 239 00:16:56,000 --> 00:17:01,000 dim ond oherwydd ein bod wedi symud lle mae popeth yn. 240 00:17:01,000 --> 00:17:07,000 >> A chofiwch, yr unig le y gallem o bosibl dychwelyd ffug 241 00:17:07,000 --> 00:17:14,000 yma, lle mae realloc dychwelyd null, 242 00:17:14,000 --> 00:17:19,000 ac os ydych yn digwydd i gofio gwall safonol, 243 00:17:19,000 --> 00:17:22,000 efallai gallech ystyried yr achos hwn a lle rydych eisiau argraffu gwall safonol, 244 00:17:22,000 --> 00:17:26,000 stderr felly fprintf hytrach na dim ond argraffu yn uniongyrchol i allan safonol. 245 00:17:26,000 --> 00:17:31,000 Unwaith eto, nid yw hynny'n ddisgwyliad, ond os yw'n camgymeriad, 246 00:17:31,000 --> 00:17:41,000 printf deipio, yna efallai y byddwch am ei gwneud yn argraffu i wall safonol yn lle y tu allan safonol. 247 00:17:41,000 --> 00:17:44,000 >> Dylai unrhyw un gennych unrhyw beth arall i nodi? Ydw. 248 00:17:44,000 --> 00:17:47,000 [Myfyrwyr] Allwch chi fynd dros y [Anghlywadwy]? 249 00:17:47,000 --> 00:17:55,000 [Rob B.] Ydy, mae'r binariness gwirioneddol ohono neu beth ydyw? 250 00:17:55,000 --> 00:17:57,000 [Myfyrwyr] Felly rydych yn ei luosi â 2? 251 00:17:57,000 --> 00:17:59,000 [Rob B.] Yeah, yn y bôn. 252 00:17:59,000 --> 00:18:11,000 Mewn tir deuaidd, rydym bob amser yn cael ein set o ddigidau. 253 00:18:11,000 --> 00:18:22,000 Symud y chwith erbyn 1 yn y bôn yn mewnosod yma ar yr ochr dde. 254 00:18:22,000 --> 00:18:25,000 Yn ôl i hyn, dim ond gofio bod popeth yn deuaidd 255 00:18:25,000 --> 00:18:28,000 yn rym 2, felly mae hyn yn cynrychioli 2 i'r 0, 256 00:18:28,000 --> 00:18:30,000 y 2 i 1, mae hyn yn 2 i 2. 257 00:18:30,000 --> 00:18:33,000 Drwy fewnosod 0 i ochr dde yn awr, rydym yn unig newid popeth drosodd. 258 00:18:33,000 --> 00:18:38,000 Hyn a arferai fod 2 i 0 yw bellach yn 2 i 1, wedi'i 2 i 2. 259 00:18:38,000 --> 00:18:41,000 Mae'r ochr iawn ein bod fewnosod 260 00:18:41,000 --> 00:18:44,000 o reidrwydd yn mynd i fod yn 0, 261 00:18:44,000 --> 00:18:46,000 sy'n gwneud synnwyr. 262 00:18:46,000 --> 00:18:49,000 Os ydych chi erioed lluoswch nifer gyda 2, nid yw'n mynd i roi diwedd ar i fyny rhyfedd, 263 00:18:49,000 --> 00:18:54,000 felly dylai'r 2 i'r lle 0 yn 0, 264 00:18:54,000 --> 00:18:59,000 a dyma'r hyn wyf yn hanner rhybuddio amdano cyn yw os ydych yn digwydd i symud 265 00:18:59,000 --> 00:19:01,000 tu hwnt i'r nifer o ddarnau mewn cyfanrif, 266 00:19:01,000 --> 00:19:04,000 yna mae hyn 1 yn mynd i roi diwedd ar i fyny yn mynd i ffwrdd. 267 00:19:04,000 --> 00:19:10,000 Dyna yr unig bryder os digwydd i chi yn delio â galluoedd fawr iawn. 268 00:19:10,000 --> 00:19:15,000 Ond ar y pwynt hwnnw, yna rydych chi'n delio gydag amrywiaeth o filiynau o bethau, 269 00:19:15,000 --> 00:19:25,000 Ni allai ffitio i mewn cof beth bynnag. 270 00:19:25,000 --> 00:19:31,000 >> Nawr gallwn gyrraedd pop, sydd hyd yn oed yn haws. 271 00:19:31,000 --> 00:19:36,000 Gallech yn ei wneud yn hoffi os ydych yn digwydd i pop criw cyfan, 272 00:19:36,000 --> 00:19:38,000 ac yn awr rydych yn hanner gallu unwaith eto. 273 00:19:38,000 --> 00:19:42,000 Gallech realloc i grebachu y swm o gof sydd gennych, 274 00:19:42,000 --> 00:19:47,000 ond nid oes rhaid i chi boeni am hynny, felly yr achos realloc yn unig yn mynd i fod 275 00:19:47,000 --> 00:19:50,000 tyfu cof, byth yn crebachu cof, 276 00:19:50,000 --> 00:19:59,000 sydd yn mynd i wneud super pop hawdd. 277 00:19:59,000 --> 00:20:02,000 Nawr ciwiau, sydd yn mynd i fod fel pentyrrau, 278 00:20:02,000 --> 00:20:06,000 ond y drefn y byddwch yn cymryd pethau allan yn cael ei wrthdroi. 279 00:20:06,000 --> 00:20:10,000 Mae'r enghraifft prototypical o ciw yn llinell, 280 00:20:10,000 --> 00:20:12,000 felly rwy'n dyfalu os oeddech yn Saesneg, byddwn wedi dweud 281 00:20:12,000 --> 00:20:17,000 enghraifft prototypical o ciw yn ciw. 282 00:20:17,000 --> 00:20:22,000 Felly, fel llinell, os ydych yn y person cyntaf yn unol, 283 00:20:22,000 --> 00:20:24,000 ydych yn disgwyl i fod y person cyntaf allan o'r llinell. 284 00:20:24,000 --> 00:20:31,000 Os mai chi yw'r person olaf yn ddiweddarach, yr ydych yn mynd i fod y person gwasanaethu diwethaf. 285 00:20:31,000 --> 00:20:35,000 Rydym yn galw y patrwm hwnnw FIFO, tra stac oedd LIFO patrwm. 286 00:20:35,000 --> 00:20:40,000 Mae'r rhai geiriau yn eithaf cyffredinol. 287 00:20:40,000 --> 00:20:46,000 >> Fel staciau ac yn wahanol i arrays, ciwiau nad ydynt fel arfer yn caniatáu mynediad i elfennau yn y canol. 288 00:20:46,000 --> 00:20:50,000 Yma, mae stac, rydym wedi gwthio a pop. 289 00:20:50,000 --> 00:20:54,000 Yma, rydym yn digwydd bod, wedi galw nhw enqueue a dequeue. 290 00:20:54,000 --> 00:20:58,000 Rwyf hefyd wedi clywed arnynt sef newid a unshift. 291 00:20:58,000 --> 00:21:02,000 Rydw i wedi clywed pobl yn dweud gwthio a pop i hefyd yn berthnasol i ciwiau. 292 00:21:02,000 --> 00:21:05,000 Rwyf wedi clywed mewnosod, dileu, 293 00:21:05,000 --> 00:21:11,000 felly gwthio a pop, os ydych yn sôn am staciau, rydych yn gwthio a popping. 294 00:21:11,000 --> 00:21:16,000 Os ydych chi'n sôn am ciwiau, gallwch ddewis geiriau yr ydych am ei ddefnyddio 295 00:21:16,000 --> 00:21:23,000 ar gyfer gosod a thynnu, ac nid oes consensws ar yr hyn y dylid ei alw. 296 00:21:23,000 --> 00:21:27,000 Ond yma, mae gennym enqueue a dequeue. 297 00:21:27,000 --> 00:21:37,000 Yn awr, mae'r strwythur yn edrych bron yn union yr un fath i'r strwythur pentwr. 298 00:21:37,000 --> 00:21:40,000 Ond mae'n rhaid i ni gadw golwg ar y pen. 299 00:21:40,000 --> 00:21:44,000 Amcana ei fod yn dweud i lawr yma, ond pam mae angen y pen? 300 00:21:53,000 --> 00:21:57,000 Mae'r prototeipiau yn y bôn union yr un fath i wthio a pop. 301 00:21:57,000 --> 00:21:59,000 Gallwch feddwl amdano fel gwthio a pop. 302 00:21:59,000 --> 00:22:08,000 Yr unig wahaniaeth yw pop yn dychwelyd-yn hytrach na'r olaf, mae'n dychwelyd y cyntaf. 303 00:22:08,000 --> 00:22:12,000 2, 1, 3, 4, neu rywbeth. 304 00:22:12,000 --> 00:22:14,000 A dyma y dechrau. 305 00:22:14,000 --> 00:22:17,000 Mae ein ciw yn hollol llawn, felly mae pedair elfen ynddo. 306 00:22:17,000 --> 00:22:21,000 Ddiwedd ein ciw ar hyn o bryd 2, 307 00:22:21,000 --> 00:22:24,000 ac yn awr rydym yn mynd i fewnosod rhywbeth arall. 308 00:22:24,000 --> 00:22:29,000 >> Pan ydym am i fewnosod bod rhywbeth arall, yr hyn a wnaethom ar gyfer y fersiwn pentwr 309 00:22:29,000 --> 00:22:36,000 yn cael ei rydym yn ymestyn ein bloc o cof. 310 00:22:36,000 --> 00:22:40,000 Beth yw'r broblem gyda hyn? 311 00:22:40,000 --> 00:22:45,000 [Myfyrwyr] chi symud y 2. 312 00:22:45,000 --> 00:22:51,000 Yr hyn a ddywedais o'r blaen am y diwedd y ciw, 313 00:22:51,000 --> 00:22:57,000 nid yw hyn yn gwneud synnwyr ein bod yn dechrau am 1, 314 00:22:57,000 --> 00:23:01,000 yna rydym eisiau dequeue 1, yna dequeue 3, yna dequeue 4, 315 00:23:01,000 --> 00:23:05,000 yna dequeue 2, yna dequeue hwn. 316 00:23:05,000 --> 00:23:08,000 Ni allwn ddefnyddio realloc yn awr, 317 00:23:08,000 --> 00:23:11,000 neu o leiaf iawn, rhaid i chi ddefnyddio realloc mewn ffordd wahanol. 318 00:23:11,000 --> 00:23:15,000 Ond byddwch yn debyg na ddylai dim ond yn defnyddio realloc. 319 00:23:15,000 --> 00:23:18,000 Rydych yn mynd i gael i manually gopi o'ch cof. 320 00:23:18,000 --> 00:23:21,000 >> Mae yna ddwy swyddogaeth i gopïo cof. 321 00:23:21,000 --> 00:23:25,000 Mae memcopy a memmove. 322 00:23:25,000 --> 00:23:29,000 Hyn o bryd rwy'n darllen y tudalennau dyn i weld pa un yr ydych yn mynd i eisiau ei ddefnyddio. 323 00:23:29,000 --> 00:23:35,000 Iawn, memcopy, mae'r gwahaniaeth yn 324 00:23:35,000 --> 00:23:38,000 bod memcopy a memmove, un yn ymdrin â'r achos yn gywir 325 00:23:38,000 --> 00:23:41,000 lle rydych chi'n copïo i mewn i ranbarth sy'n digwydd i orgyffwrdd y rhanbarth 326 00:23:41,000 --> 00:23:46,000 ydych yn copïo oddi wrth. 327 00:23:46,000 --> 00:23:50,000 Nid Memcopy yn ei drin. Memmove yn ei wneud. 328 00:23:50,000 --> 00:23:59,000 Gallwch feddwl am y broblem fel- 329 00:23:59,000 --> 00:24:09,000 gadewch i ni ddweud yr wyf am ei gopïo y boi, 330 00:24:09,000 --> 00:24:13,000 y pedwar i hyn guy drosodd. 331 00:24:13,000 --> 00:24:16,000 Yn y diwedd, yr hyn y dylai'r casgliad edrych fel 332 00:24:16,000 --> 00:24:26,000 ar ôl y copi yw 2, 1, 2, 1, 3, 4, ac yna rhai pethau ar y diwedd. 333 00:24:26,000 --> 00:24:29,000 Ond mae hyn yn dibynnu ar y gorchymyn yr ydym mewn gwirionedd gopïo, 334 00:24:29,000 --> 00:24:32,000 oherwydd os nad ydym yn ystyried y ffaith bod y rhanbarth rydym yn copïo i mewn i 335 00:24:32,000 --> 00:24:35,000 yn gorgyffwrdd â'r un yr ydym yn yn copïo, 336 00:24:35,000 --> 00:24:46,000 yna efallai y gwnawn fel cychwyn yma, copïwch y 2 yn y lle yr ydym am fynd, 337 00:24:46,000 --> 00:24:52,000 yna symud ein awgrymiadau ymlaen. 338 00:24:52,000 --> 00:24:56,000 >> Nawr rydym yn mynd i fod yma ac yma, ac yn awr rydym am ei gopïo 339 00:24:56,000 --> 00:25:04,000 y boi dros y guy a symud ein awgrymiadau ymlaen. 340 00:25:04,000 --> 00:25:07,000 Beth ydym ni'n mynd i roi diwedd ar i fyny gael yw 2, 1, 2, 1, 2, 1 341 00:25:07,000 --> 00:25:10,000 yn hytrach na'r briodol 2, 1, 2, 1, 3, 4 oherwydd 342 00:25:10,000 --> 00:25:15,000 2, 1 overrode y 3 gwreiddiol, 4. 343 00:25:15,000 --> 00:25:19,000 Memmove ymdrin bod yn gywir. 344 00:25:19,000 --> 00:25:23,000 Yn yr achos hwn, yn y bôn dim ond bob amser yn defnyddio memmove 345 00:25:23,000 --> 00:25:26,000 oherwydd ei fod yn ei drin yn gywir. 346 00:25:26,000 --> 00:25:29,000 Mae'n gyffredinol, nid yw'n perfformio yn waeth. 347 00:25:29,000 --> 00:25:32,000 Y syniad yw yn hytrach na dechrau o'r dechrau ac anfon copi o'r ffordd 348 00:25:32,000 --> 00:25:35,000 fel yr ydym yn unig oedd yma, mae'n dechrau o'r diwedd a gopïau i mewn, 349 00:25:35,000 --> 00:25:38,000 ac yn yr achos hwnnw, ni allwch chi gael problem. 350 00:25:38,000 --> 00:25:40,000 Nid oes unrhyw berfformiad golli. 351 00:25:40,000 --> 00:25:47,000 Bob amser yn defnyddio memmove. Peidiwch byth â phoeni am memcopy. 352 00:25:47,000 --> 00:25:51,000 A dyna lle rydych chi'n mynd i gael i ar wahân memmove 353 00:25:51,000 --> 00:26:01,000 y gyfran lapio o gwmpas eich ciw. 354 00:26:01,000 --> 00:26:04,000 Dim pryderon, os na wnaed yn gyfan gwbl. 355 00:26:04,000 --> 00:26:10,000 Mae hyn yn fwy anodd na gwthio stac,, a pop. 356 00:26:10,000 --> 00:26:15,000 >> Dylai unrhyw un yn cael unrhyw god gallem weithio â nhw? 357 00:26:15,000 --> 00:26:21,000 Hyd yn oed os hollol anghyflawn? 358 00:26:21,000 --> 00:26:23,000 [Myfyrwyr] Yeah, mae'n hollol anghyflawn, er. 359 00:26:23,000 --> 00:26:27,000 Hollol anghyflawn yn iawn cyn belled ag y gallwch chi arbed-y diwygiad? 360 00:26:27,000 --> 00:26:32,000 Yr wyf yn anghofio bod bob tro. 361 00:26:32,000 --> 00:26:39,000 Iawn, anwybyddu beth sy'n digwydd pan mae angen i ni newid maint pethau. 362 00:26:39,000 --> 00:26:42,000 Hollol anwybyddu resize. 363 00:26:42,000 --> 00:26:49,000 Eglurwch y cod hwn. 364 00:26:49,000 --> 00:26:54,000 Rwy'n gwirio yn gyntaf oll os yw'r maint yn llai na'r copi cyntaf o'r holl 365 00:26:54,000 --> 00:27:01,000 ac yna ar ôl hynny, yr wyf mewnosoder-I gymryd pen + maint, 366 00:27:01,000 --> 00:27:05,000 ac rwy'n gwneud yn siŵr ei lapio o amgylch y gallu y rhesi, 367 00:27:05,000 --> 00:27:08,000 ac yr wyf mewnosoder y llinyn newydd yn y sefyllfa honno. 368 00:27:08,000 --> 00:27:12,000 Yna mi gynyddu maint ac yn dychwelyd yn wir. 369 00:27:12,000 --> 00:27:22,000 >> [Rob B.] Mae hyn yn bendant yn un o'r achosion hynny lle rydych yn mynd i eisiau bod yn defnyddio mod. 370 00:27:22,000 --> 00:27:25,000 Unrhyw fath o achos lle rydych wedi lapio o gwmpas, os ydych yn meddwl lapio o gwmpas, 371 00:27:25,000 --> 00:27:29,000 dylai'r meddwl ar unwaith fod yn mod. 372 00:27:29,000 --> 00:27:36,000 Fel optimization gyflym / gwneud un eich cod llinell byrrach, 373 00:27:36,000 --> 00:27:42,000 byddwch yn sylwi bod y llinell yn union ar ôl yr un yma 374 00:27:42,000 --> 00:27:53,000 yn unig yw maint + +, er mwyn i chi gyfuno hynny i mewn i'r llinell, maint + +. 375 00:27:53,000 --> 00:27:58,000 Nawr i lawr yma, mae gennym yr achos 376 00:27:58,000 --> 00:28:01,000 lle nad oes gennym ddigon o gof, 377 00:28:01,000 --> 00:28:05,000 felly rydym yn cynyddu ein gallu gan 2. 378 00:28:05,000 --> 00:28:09,000 Amcana gallech gael yr un broblem yma, ond gallwn ei anwybyddu yn awr, 379 00:28:09,000 --> 00:28:13,000 lle os ydych yn methu i gynyddu eich gallu, 380 00:28:13,000 --> 00:28:18,000 yna rydych chi'n mynd i eisiau i leihau eich gallu gan 2 eto. 381 00:28:18,000 --> 00:28:24,000 Nodyn arall byr yn union fel y gallwch ei wneud + =, 382 00:28:24,000 --> 00:28:30,000 gallwch hefyd wneud << =. 383 00:28:30,000 --> 00:28:43,000 Gall bron unrhyw beth yn mynd cyn hafal, + =, | =, & =, << =. 384 00:28:43,000 --> 00:28:52,000 Torgoch * newydd yw ein bloc newydd o gof. 385 00:28:52,000 --> 00:28:55,000 O, dros yma. 386 00:28:55,000 --> 00:29:02,000 >> Beth yw barn pobl am y math o ein bloc newydd o gof? 387 00:29:02,000 --> 00:29:06,000 [Myfyrwyr] Dylai fod yn ** torgoch. 388 00:29:06,000 --> 00:29:12,000 Gan feddwl yn ôl at ein strwythur i fyny yma, 389 00:29:12,000 --> 00:29:14,000 llinynnau hyn yr ydym yn ailddyrannu. 390 00:29:14,000 --> 00:29:21,000 Rydym yn gwneud storio deinamig gyfan newydd ar gyfer yr elfennau yn y ciw. 391 00:29:21,000 --> 00:29:25,000 Beth ydym ni'n mynd i gael ei neilltuo ar eich llinynnau hyn yr ydym ni'n mallocing ar hyn o bryd, 392 00:29:25,000 --> 00:29:30,000 ac felly newydd yn mynd i fod yn ** torgoch. 393 00:29:30,000 --> 00:29:34,000 Mae'n mynd i fod yn amrywiaeth o linynnau. 394 00:29:34,000 --> 00:29:38,000 Yna, beth yw'r achos o dan yr ydym yn mynd i ddychwelyd ffug? 395 00:29:38,000 --> 00:29:41,000 [Myfyrwyr] A ddylem ni fod yn gwneud y * torgoch? 396 00:29:41,000 --> 00:29:44,000 [Rob B.] Ie, ffoniwch da. 397 00:29:44,000 --> 00:29:46,000 [Myfyrwyr] Beth oedd hynny? 398 00:29:46,000 --> 00:29:49,000 [Rob B.] Rydym yn awyddus i wneud faint o * torgoch oherwydd nad ydym bellach yn- 399 00:29:49,000 --> 00:29:53,000 byddai hyn mewn gwirionedd fod yn broblem fawr iawn oherwydd y byddai sizeof (torgoch) fydd 1. 400 00:29:53,000 --> 00:29:55,000 Sizeof cols * yn mynd i fod yn 4, 401 00:29:55,000 --> 00:29:58,000 felly mae llawer o adegau pan fyddwch yn delio â ints, 402 00:29:58,000 --> 00:30:01,000 rydych yn tueddu i fynd i ffwrdd ag ef oherwydd maint int a maint o * int 403 00:30:01,000 --> 00:30:04,000 ar system 32-bit yn mynd i fod yr un peth. 404 00:30:04,000 --> 00:30:09,000 Ond yma, sizeof (golosg) a sizeof (char *) yn awr yn mynd i fod yr un peth. 405 00:30:09,000 --> 00:30:15,000 >> Beth yw'r amgylchiadau lle byddwn yn dychwelyd ffug? 406 00:30:15,000 --> 00:30:17,000 [Myfyrwyr] Newydd yn null. 407 00:30:17,000 --> 00:30:23,000 Yeah, os yn newydd yn null, byddwn yn dychwelyd ffug, 408 00:30:23,000 --> 00:30:34,000 ac rydw i'n mynd i daflu i lawr yma- 409 00:30:34,000 --> 00:30:37,000 [Myfyrwyr] [Anghlywadwy] 410 00:30:37,000 --> 00:30:39,000 [Rob B.] Yeah, mae hyn yn iawn. 411 00:30:39,000 --> 00:30:46,000 Gallech naill ai wneud 2 waith gallu neu 1 sifft gallu ac wedyn dim ond gosod i lawr yma neu beth bynnag. 412 00:30:46,000 --> 00:30:52,000 Byddwn yn gwneud hynny wrth i ni wedi hynny. 413 00:30:52,000 --> 00:30:56,000 Gallu >> = 1. 414 00:30:56,000 --> 00:31:08,000 Ac nad ydych yn mynd i gael i chi boeni am golli yr 1 lle 415 00:31:08,000 --> 00:31:12,000 oherwydd i chi adael symud erbyn 1, felly mae'r 1 lle o reidrwydd yn 0, 416 00:31:12,000 --> 00:31:16,000 ac felly, symud erbyn 1, rydych yn dal yn mynd i fod yn iawn. 417 00:31:16,000 --> 00:31:19,000 [Myfyrwyr] Oes angen i chi wneud hynny cyn dychwelyd? 418 00:31:19,000 --> 00:31:29,000 [Rob B.] Ydy, mae hyn yn gwneud unrhyw synnwyr o gwbl. 419 00:31:29,000 --> 00:31:36,000 >> Nawr cymryd yn ganiataol ein bod yn mynd i roi diwedd ar i fyny dychwelyd wir hyd y diwedd. 420 00:31:36,000 --> 00:31:39,000 Mae'r ffordd yr ydym yn mynd i wneud y memmoves, 421 00:31:39,000 --> 00:31:45,000 mae angen i ni fod yn ofalus sut yr ydym yn eu gwneud. 422 00:31:45,000 --> 00:31:50,000 Oes gan unrhyw un unrhyw awgrymiadau ar gyfer sut yr ydym yn eu gwneud? 423 00:32:17,000 --> 00:32:21,000 Dyma ein dechrau. 424 00:32:21,000 --> 00:32:28,000 Yn anochel, yn awyddus i ddechrau ar y dechrau unwaith eto 425 00:32:28,000 --> 00:32:35,000 pethau copi ac i mewn o yno, 1, 3, 4, 2. 426 00:32:35,000 --> 00:32:41,000 Sut ydych chi'n gwneud hynny? 427 00:32:41,000 --> 00:32:52,000 Yn gyntaf, rhaid i mi edrych ar y dudalen dyn am memmove eto. 428 00:32:52,000 --> 00:32:57,000 Memmove, trefn dadleuon bob amser yn bwysig. 429 00:32:57,000 --> 00:33:01,000 Rydym am i'n cyrchfan gyntaf,, ail drydedd ffynhonnell maint. 430 00:33:01,000 --> 00:33:06,000 Mae yna lawer o swyddogaethau sy'n gwrthdroi ffynhonnell a chyrchfan. 431 00:33:06,000 --> 00:33:11,000 Cyrchfan, ffynhonnell yn tueddu i fod yn gyson braidd. 432 00:33:17,000 --> 00:33:21,000 Move, beth y mae'n ei dychwelyd? 433 00:33:21,000 --> 00:33:27,000 Yn dychwelyd pwyntydd i gyrchfan, am ba bynnag reswm efallai y byddwch am hynny. 434 00:33:27,000 --> 00:33:32,000 Gallaf llun ei ddarllen, ond rydym yn awyddus i symud i mewn ein cyrchfan. 435 00:33:32,000 --> 00:33:35,000 >> Beth yw ein cyrchfan yn mynd i fod? 436 00:33:35,000 --> 00:33:37,000 [Myfyrwyr] Newydd. 437 00:33:37,000 --> 00:33:39,000 [Rob B.] Ie, a lle yr ydym yn copïo o? 438 00:33:39,000 --> 00:33:43,000 Y peth cyntaf, rydym yn copïo mae'r 1, 3, 4. 439 00:33:43,000 --> 00:33:50,000 Beth yw hyn-1, 3, 4. 440 00:33:50,000 --> 00:33:55,000 Beth yw cyfeiriad y 1? 441 00:33:55,000 --> 00:33:58,000 Beth yw cyfeiriad y bod 1? 442 00:33:58,000 --> 00:34:01,000 [Myfyrwyr] [Anghlywadwy] 443 00:34:01,000 --> 00:34:03,000 [Rob B.] + Pennaeth y cyfeiriad yr elfen gyntaf. 444 00:34:03,000 --> 00:34:05,000 Sut ydym yn cael yr elfen gyntaf yn yr amrywiaeth? 445 00:34:05,000 --> 00:34:10,000 [Myfyrwyr] Ciw. 446 00:34:10,000 --> 00:34:15,000 [Rob B.] Ydy, q.strings. 447 00:34:15,000 --> 00:34:20,000 Cofiwch, yma, ein pen yw 1. 448 00:34:20,000 --> 00:34:24,000 Asio hynny. Fi jyst yn meddwl ei fod yn hudol- 449 00:34:24,000 --> 00:34:29,000 Yma, mae ein pen yw 1. Rydw i'n mynd i newid fy lliw hefyd. 450 00:34:29,000 --> 00:34:36,000 A dyma yw llinynnau. 451 00:34:36,000 --> 00:34:41,000 Mae hyn, gallwn naill ai ysgrifennu fel y gwnaethom dros yma 452 00:34:41,000 --> 00:34:43,000 gyda phenaethiaid + q.strings. 453 00:34:43,000 --> 00:34:51,000 Mae llawer o bobl hefyd yn ysgrifennu ac q.strings [pen]. 454 00:34:51,000 --> 00:34:55,000 Nid yw hyn yn wir yn llai effeithlon. 455 00:34:55,000 --> 00:34:58,000 Efallai y byddwch yn meddwl am y peth gan eich bod yn dereferencing ac yna cael y cyfeiriad, 456 00:34:58,000 --> 00:35:04,000 ond y compiler yn mynd i ei gyfieithu i'r hyn oedd gennym o'r blaen beth bynnag, q.strings + pen. 457 00:35:04,000 --> 00:35:06,000 Naill ffordd neu'r llall ydych am i feddwl am y peth. 458 00:35:06,000 --> 00:35:11,000 >> A faint o bytes ydym am ei gopïo? 459 00:35:11,000 --> 00:35:15,000 [Myfyrwyr] Gallu - pen. 460 00:35:15,000 --> 00:35:18,000 Gallu - pen. 461 00:35:18,000 --> 00:35:21,000 Ac yna gallech bob amser yn ysgrifennu nodi enghraifft 462 00:35:21,000 --> 00:35:23,000 i chyfrif i maes os sy'n iawn. 463 00:35:23,000 --> 00:35:26,000 [Myfyrwyr] Mae angen i gael ei rannu 2 yna. 464 00:35:26,000 --> 00:35:30,000 Yeah, felly mae'n debyg y gallem eu defnyddio maint. 465 00:35:30,000 --> 00:35:35,000 Rydym yn dal i gael faint yw- 466 00:35:35,000 --> 00:35:39,000 ddefnyddio maint, mae gennym un maint i 4. 467 00:35:39,000 --> 00:35:42,000 Mae ein maint yw 4. Mae ein pen yn 1. 468 00:35:42,000 --> 00:35:46,000 Rydym eisiau copïo'r rhain 3 elfen. 469 00:35:46,000 --> 00:35:54,000 Dyna'r bwyll gwirio bod maint - pen yn gywir 3. 470 00:35:54,000 --> 00:35:58,000 A dod yn ôl yma, fel y dywedasom o'r blaen, 471 00:35:58,000 --> 00:36:00,000 os ydym yn defnyddio capasiti, yna byddai'n rhaid i ni rannu â 2 472 00:36:00,000 --> 00:36:04,000 oherwydd ein bod wedi tyfu yn barod ein gallu, felly yn lle, rydym yn mynd i ddefnyddio maint. 473 00:36:11,000 --> 00:36:13,000 Bod copïau gyfran honno. 474 00:36:13,000 --> 00:36:18,000 Nawr, rydym angen i chi gopïo y rhan arall, mae'r gyfran sy'n weddill o'r dechrau. 475 00:36:18,000 --> 00:36:28,000 >> Mae hynny'n mynd i mewn i'r hyn memmove sefyllfa? 476 00:36:28,000 --> 00:36:32,000 [Myfyrwyr] maint Plus - pen. 477 00:36:32,000 --> 00:36:38,000 Ie, felly rydym wedi copïo eisoes o ran maint - bytes pen, 478 00:36:38,000 --> 00:36:43,000 ac felly os ydym am gopïo'r bytes gweddill yn newydd 479 00:36:43,000 --> 00:36:48,000 ac yna faint minws-yn dda, y nifer o bytes rydym wedi copïo eisoes mewn 480 00:36:48,000 --> 00:36:52,000 Ac yna pan rydym yn copïo o? 481 00:36:52,000 --> 00:36:54,000 [Myfyrwyr] Q.strings [0]. 482 00:36:54,000 --> 00:36:56,000 [Rob B.] Ydy, q.strings. 483 00:36:56,000 --> 00:37:02,000 Gallem naill ai wneud a q.strings [0]. 484 00:37:02,000 --> 00:37:05,000 Mae hyn yn sylweddol llai cyffredin na hyn. 485 00:37:05,000 --> 00:37:14,000 Os mai dim ond yn mynd i fod yn 0, yna byddwch yn tueddu i weld q.strings. 486 00:37:14,000 --> 00:37:16,000 Dyna lle'r ydym yn copïo o. 487 00:37:16,000 --> 00:37:18,000 Faint o bytes ydym wedi gadael i gopïo? >> [Myfyrwyr] 10. 488 00:37:18,000 --> 00:37:20,000 Hawl. 489 00:37:20,000 --> 00:37:25,000 [Myfyrwyr] A oes rhaid i luosi 5-10 gwaith yn fwy na maint y bytes neu rywbeth? 490 00:37:25,000 --> 00:37:30,000 Yeah, felly mae hwn yn lle-beth yn union yr ydym yn copïo? 491 00:37:30,000 --> 00:37:32,000 [Myfyrwyr] [Anghlywadwy] 492 00:37:32,000 --> 00:37:34,000 Beth yw y math o beth rydym yn copïo? 493 00:37:34,000 --> 00:37:36,000 [Myfyrwyr] [Anghlywadwy] 494 00:37:36,000 --> 00:37:41,000 Yeah, felly mae'r torgoch * s ein bod yn copïo, nid ydym yn gwybod lle y rhai yn dod. 495 00:37:41,000 --> 00:37:47,000 Wel, lle maent yn cyfeirio at, fel y llinynnau, rydym yn y pen draw gwthio ar y ciw 496 00:37:47,000 --> 00:37:49,000 neu enqueuing ar y ciw. 497 00:37:49,000 --> 00:37:51,000 Pan fydd y rhai yn dod o, nid oes gennym unrhyw syniad. 498 00:37:51,000 --> 00:37:56,000 Rydym yn unig Mae angen i gadw golwg ar * torgoch s eu hunain. 499 00:37:56,000 --> 00:38:00,000 Nid ydym am i gopïo faint - bytes pen. 500 00:38:00,000 --> 00:38:03,000 Rydym yn awyddus i gopïo faint - pen * s torgoch, 501 00:38:03,000 --> 00:38:11,000 felly rydym yn mynd i luosi hyn drwy sizeof (torgoch *). 502 00:38:11,000 --> 00:38:17,000 Yr un i lawr yma, pen * sizeof (torgoch *). 503 00:38:17,000 --> 00:38:24,000 >> [Myfyrwyr] Beth am [Anghlywadwy]? 504 00:38:24,000 --> 00:38:26,000 Mae'r hawl yma? 505 00:38:26,000 --> 00:38:28,000 [Myfyrwyr] Na, isod, ar y maint - pen. 506 00:38:28,000 --> 00:38:30,000 [Rob B.] Mae'r hawl yma? 507 00:38:30,000 --> 00:38:32,000 Rhifyddeg Pointer. 508 00:38:32,000 --> 00:38:35,000 Sut y rhifyddeg pwyntydd yn mynd i'r gwaith yn 509 00:38:35,000 --> 00:38:40,000 'n awtomatig lluosi gan faint y math ein bod yn delio â hwy. 510 00:38:40,000 --> 00:38:46,000 Yn union fel dros yma, newydd + (maint - pen) 511 00:38:46,000 --> 00:38:56,000 yn union gyfwerth â & [size - pennaeth] newydd 512 00:38:56,000 --> 00:39:00,000 hyd nes y byddwn yn disgwyl i hynny weithio yn gywir, 513 00:39:00,000 --> 00:39:04,000 oherwydd os ydym yn delio gydag amrywiaeth int, yna nid ydym yn ei wneud mynegai int- 514 00:39:04,000 --> 00:39:07,000 neu os yw'n maint o 5 a ydych am i'r elfen 4ydd, yna rydym mynegai i mewn i'r 515 00:39:07,000 --> 00:39:10,000 int array [4]. 516 00:39:10,000 --> 00:39:14,000 Rydych peidiwch-[4] * faint o int. 517 00:39:14,000 --> 00:39:21,000 Sy'n delio â'r gwaith yn awtomatig, ac mae'r achos hwn 518 00:39:21,000 --> 00:39:29,000 yn llythrennol cyfatebol, felly y gystrawen braced 519 00:39:29,000 --> 00:39:34,000 yn unig yn mynd i gael eu trosi i hyn cyn gynted ag y byddwch yn llunio. 520 00:39:34,000 --> 00:39:38,000 Mae hynny'n rhywbeth mae angen i chi fod yn ofalus o hynny 521 00:39:38,000 --> 00:39:42,000 pan fyddwch yn ychwanegu maint - pen 522 00:39:42,000 --> 00:39:45,000 ydych yn ei ychwanegu nad yw un beit. 523 00:39:45,000 --> 00:39:53,000 Rydych yn ychwanegu un * torgoch, a all fod yn un bytes neu beth bynnag. 524 00:39:53,000 --> 00:39:56,000 >> Cwestiynau eraill? 525 00:39:56,000 --> 00:40:04,000 Iawn, dequeue yn mynd i fod yn haws. 526 00:40:04,000 --> 00:40:11,000 Byddaf yn rhoi munud i weithredu. 527 00:40:11,000 --> 00:40:18,000 O, ac yr wyf yn dyfalu mai dyma'r un sefyllfa lle mae 528 00:40:18,000 --> 00:40:21,000 hyn y mae'r achos enqueue, os ydym yn enqueuing null, 529 00:40:21,000 --> 00:40:24,000 efallai yr ydym am ei ymdrin ag ef, efallai nad ydym yn ei wneud. 530 00:40:24,000 --> 00:40:27,000 Ni fyddwn yn gwneud hynny eto yma, ond un ein hachos stac. 531 00:40:27,000 --> 00:40:34,000 Os byddwn yn enqueue null, efallai y byddwn am ei diystyru. 532 00:40:34,000 --> 00:40:40,000 Dylai unrhyw un gael rhywfaint o god gallaf dynnu i fyny? 533 00:40:40,000 --> 00:40:45,000 [Myfyrwyr] Fi jyst wedi dequeue. 534 00:40:45,000 --> 00:40:56,000 Fersiwn 2 yw bod-iawn. 535 00:40:56,000 --> 00:40:59,000 Ydych am esbonio? 536 00:40:59,000 --> 00:41:01,000 [Myfyrwyr] Yn gyntaf, byddwch yn gwneud yn siŵr bod rhywbeth yn y ciw 537 00:41:01,000 --> 00:41:07,000 a bod y maint yn mynd i lawr 1. 538 00:41:07,000 --> 00:41:11,000 Mae angen i chi wneud hynny, ac yna byddwch yn dychwelyd y pen 539 00:41:11,000 --> 00:41:13,000 ac yna symud y pen i fyny 1. 540 00:41:13,000 --> 00:41:19,000 Iawn, felly mae achos cornel rhaid i ni ystyried. Yeah. 541 00:41:19,000 --> 00:41:24,000 [Myfyrwyr] Os yw eich pen ar yr elfen olaf, 542 00:41:24,000 --> 00:41:26,000 yna nad ydych am pen i bwynt y tu allan y rhesi. 543 00:41:26,000 --> 00:41:29,000 >> Yeah, hynny cyn gynted fel pennaeth yn taro'r diwedd ein amrywiaeth, 544 00:41:29,000 --> 00:41:35,000 pan fyddwn yn dequeue, dylai ein pen yn cael ei modded yn ôl i 0. 545 00:41:35,000 --> 00:41:40,000 Yn anffodus, ni allwn wneud hynny mewn un cam. 546 00:41:40,000 --> 00:41:44,000 Amcana y ffordd y byddwn yn ôl pob tebyg atgyweiria ei fod yn 547 00:41:44,000 --> 00:41:52,000 mae hyn yn mynd i fod yn * torgoch, yr hyn rydym yn dychwelyd, 548 00:41:52,000 --> 00:41:55,000 beth bynnag yw eich enw amrywiol am fod. 549 00:41:55,000 --> 00:42:02,000 Yna, rydym yn awyddus i mod pen gan ein gallu 550 00:42:02,000 --> 00:42:10,000 ac yna dychwelyd RET. 551 00:42:10,000 --> 00:42:14,000 Mae llawer o bobl yma y gallent ei wneud- 552 00:42:14,000 --> 00:42:19,000 hyn yn wir o-you'll gweld pobl ei wneud os pen 553 00:42:19,000 --> 00:42:29,000 yn fwy na gallu, yn gwneud pen - gallu. 554 00:42:29,000 --> 00:42:36,000 A dyna 'jyst yn gweithio ar yr hyn mod yn. 555 00:42:36,000 --> 00:42:41,000 Cynhwysedd Pennaeth = mod yn llawer glanach 556 00:42:41,000 --> 00:42:51,000 o lapio o gwmpas na phe pen yn fwy na pen gallu - allu. 557 00:42:51,000 --> 00:42:56,000 >> Cwestiynau? 558 00:42:56,000 --> 00:43:02,000 Iawn, y peth olaf yr ydym wedi gadael yw ein rhestr cysylltiedig. 559 00:43:02,000 --> 00:43:07,000 Efallai y byddwch yn ei ddefnyddio i rai o'r ymddygiad rhestr gysylltu pe baech yn gwneud 560 00:43:07,000 --> 00:43:11,000 cysylltiedig rhestrau yn eich tablau hash, pe baech yn gwneud tabl hash. 561 00:43:11,000 --> 00:43:15,000 Rwyf yn argymell yn gryf gwneud hash tabl. 562 00:43:15,000 --> 00:43:17,000 Efallai eich bod eisoes wedi gwneud trie, 563 00:43:17,000 --> 00:43:23,000 ond mae cais yn fwy anodd. 564 00:43:23,000 --> 00:43:27,000 Mewn theori, maen nhw'n asymptotically well. 565 00:43:27,000 --> 00:43:30,000 Ond dim ond yn edrych ar y bwrdd mawr, 566 00:43:30,000 --> 00:43:35,000 ac yn ceisio gwneud yn well byth, a byddant yn codi mwy o gof. 567 00:43:35,000 --> 00:43:43,000 Popeth am geisio dod i ben i fyny fod yn waeth ar gyfer mwy o waith. 568 00:43:43,000 --> 00:43:49,000 Mae'n beth David Malan yn ateb bob amser yw 569 00:43:49,000 --> 00:43:56,000 mae e bob amser yn ei swyddi ateb trie, a gadewch i ni weld lle ar hyn o bryd. 570 00:43:56,000 --> 00:44:00,000 Beth oedd ef o dan, David J? 571 00:44:00,000 --> 00:44:06,000 Mae'n # 18, felly nid dyna ofnadwy o ddrwg, 572 00:44:06,000 --> 00:44:09,000 ac mae hynny'n mynd i fod yn un o'r rhai gorau yn ceisio gallwch feddwl 573 00:44:09,000 --> 00:44:17,000 neu un o'r rhai gorau yn ceisio o trie. 574 00:44:17,000 --> 00:44:23,000 Nid yw'n hyd yn oed ei ateb gwreiddiol? 575 00:44:23,000 --> 00:44:29,000 Rwy'n teimlo fel atebion trie yn tueddu i fod yn fwy yn yr ystod o RAM defnydd. 576 00:44:29,000 --> 00:44:33,000 >> Ewch i lawr at y top iawn, ac RAM defnydd yn y digidau sengl. 577 00:44:33,000 --> 00:44:36,000 Ewch i lawr tuag at y gwaelod, ac yna byddwch yn dechrau gweld ceisio 578 00:44:36,000 --> 00:44:41,000 lle rydych yn cael defnydd RAM yn hollol enfawr, 579 00:44:41,000 --> 00:44:45,000 a geisiau yn fwy anodd. 580 00:44:45,000 --> 00:44:53,000 Nid yn gyfan gwbl yn werth yr ymdrech, ond yn brofiad addysgol pe baech yn gwneud un. 581 00:44:53,000 --> 00:44:56,000 Y peth olaf yw ein rhestr cysylltiedig, 582 00:44:56,000 --> 00:45:04,000 ac mae'r rhain yn dri pheth, staciau, ciwiau, a rhestrau cysylltiedig, 583 00:45:04,000 --> 00:45:09,000 unrhyw beth yn y dyfodol chi erioed wedi ei wneud mewn gwyddoniaeth gyfrifiadurol 584 00:45:09,000 --> 00:45:12,000 Bydd cymryd yn ganiataol eich yn gyfarwydd â'r pethau hyn. 585 00:45:12,000 --> 00:45:19,000 Maent yn unig mor sylfaenol i bopeth. 586 00:45:19,000 --> 00:45:25,000 >> Cysylltiedig rhestrau, ac yma yr ydym wedi restr cysylltu unigol yn mynd i fod yn ein rhoi ar waith. 587 00:45:25,000 --> 00:45:34,000 Beth mae cysylltu unigol yn golygu yn hytrach na chysylltu dwbl? Ydw. 588 00:45:34,000 --> 00:45:37,000 [Myfyrwyr] Dim ond yn cyfeirio at y pwyntydd nesaf yn hytrach nag i'r awgrymiadau, 589 00:45:37,000 --> 00:45:39,000 fel yr un o'i blaen ac un ar ei ôl. 590 00:45:39,000 --> 00:45:44,000 Yeah, felly ar ffurf llun, beth wnes i jyst yn ei wneud? 591 00:45:44,000 --> 00:45:48,000 Mae gen i ddau beth. Mae gen i lun a llun. 592 00:45:48,000 --> 00:45:51,000 O ran ffurf llun, mae ein rhestrau cysylltiedig yn unigol, 593 00:45:51,000 --> 00:45:57,000 yn anochel, mae gennym rhyw fath o syniad inni am y pennaeth ein rhestr, 594 00:45:57,000 --> 00:46:02,000 ac yna o fewn ein rhestr, rydym yn unig yn cael awgrymiadau, 595 00:46:02,000 --> 00:46:05,000 ac efallai bod hyn pwyntiau i'w null. 596 00:46:05,000 --> 00:46:08,000 Mae'n mynd i fod yn eich llun nodweddiadol o restr unigol cysylltiedig. 597 00:46:08,000 --> 00:46:14,000 Mae rhestr gysylltiedig ddwbl, gallwch fynd yn ôl. 598 00:46:14,000 --> 00:46:19,000 Os byddaf yn rhoi i chi unrhyw nod yn y rhestr, yna allwch o reidrwydd gael i 599 00:46:19,000 --> 00:46:23,000 unrhyw nod arall yn y rhestr os yw'n rhestr gysylltu ddwbl. 600 00:46:23,000 --> 00:46:27,000 Ond os byddaf yn mynd â chi y nod yn drydydd yn y rhestr ac mae'n rhestr sy'n gysylltiedig unigol, 601 00:46:27,000 --> 00:46:30,000 unrhyw ffordd rydych chi'n byth yn mynd i gyrraedd y nodau cyntaf a'r ail. 602 00:46:30,000 --> 00:46:34,000 Ac mae budd-daliadau a niweidiau, ac un un amlwg 603 00:46:34,000 --> 00:46:42,000 yn eich cymryd mwy o faint, ac mae'n rhaid i chi gadw golwg ar y pethau hyn yn pwyntio yn awr. 604 00:46:42,000 --> 00:46:49,000 Ond dim ond gofalu am gysylltu'n unigol. 605 00:46:49,000 --> 00:46:53,000 >> Mae ychydig o bethau rydym yn mynd i gael eu gweithredu. 606 00:46:53,000 --> 00:47:00,000 Eich nod strwythur typedef, int i: strwythur nod * nesaf; nod. 607 00:47:00,000 --> 00:47:09,000 Y dylid typedef cael ei losgi i mewn i'ch meddyliau. 608 00:47:09,000 --> 00:47:14,000 Dylid Cwis 1 yn hoffi rhoi typedef o nod rhestr cysylltiedig, 609 00:47:14,000 --> 00:47:18,000 a dylech fod yn gallu ysgrifennu arno ar unwaith i lawr y 610 00:47:18,000 --> 00:47:22,000 heb hyd yn oed feddwl am y peth. 611 00:47:22,000 --> 00:47:27,000 Amcana cwestiynau cwpl, pam mae angen strwythur yma? 612 00:47:27,000 --> 00:47:32,000 Pam na allwn ni ddweud * nod? 613 00:47:32,000 --> 00:47:35,000 [Myfyrwyr] [Anghlywadwy] 614 00:47:35,000 --> 00:47:38,000 Yeah. 615 00:47:38,000 --> 00:47:44,000 Yr unig beth sy'n diffinio nod fel peth 616 00:47:44,000 --> 00:47:47,000 yw'r typedef ei hun. 617 00:47:47,000 --> 00:47:55,000 Ond fel y pwynt hwn, pan fyddwn yn fath o dosrannu drwy'r nod strwythur diffiniad, 618 00:47:55,000 --> 00:48:01,000 Nid ydym wedi gorffen ein typedef eto, felly gan nad yw'r typedef wedi dod i ben, 619 00:48:01,000 --> 00:48:05,000 Nid yw nôd yn bodoli. 620 00:48:05,000 --> 00:48:12,000 Ond strwythur nod yn ei wneud, ac mae hyn yn nod yn y fan hon, 621 00:48:12,000 --> 00:48:14,000 gallai hyn hefyd gael ei alw yn ddim arall. 622 00:48:14,000 --> 00:48:16,000 Gallai hyn gael ei alw n. 623 00:48:16,000 --> 00:48:19,000 Gellid ei galw'n nod rhestr cysylltiedig. 624 00:48:19,000 --> 00:48:21,000 Gellid ei alw yn ddim. 625 00:48:21,000 --> 00:48:26,000 Ond mae hyn yn nod strwythur angen galw yr un peth gan fod hyn yn nod strwythur. 626 00:48:26,000 --> 00:48:29,000 Beth ydych yn galw hyn hefyd fod yn fan hyn, 627 00:48:29,000 --> 00:48:32,000 ac felly bod hefyd yn ateb yr ail bwynt y cwestiwn 628 00:48:32,000 --> 00:48:37,000 a dyna pam-a llawer o weithiau pan fyddwch yn gweld structs a typedefs o structs, 629 00:48:37,000 --> 00:48:42,000 byddwch yn gweld structs dienw lle byddwch yn gallu gweld strwythur typedef, 630 00:48:42,000 --> 00:48:47,000 gweithredu, geiriadur strwythur, neu beth bynnag. 631 00:48:47,000 --> 00:48:51,000 >> Pam yma mae angen i ni ddweud nod? 632 00:48:51,000 --> 00:48:54,000 Pam na all fod yn strwythur ddienw? 633 00:48:54,000 --> 00:48:56,000 Mae bron yr un ateb. 634 00:48:56,000 --> 00:48:58,000 [Myfyrwyr] Mae angen i chi gyfeirio ato o fewn y strwythur. 635 00:48:58,000 --> 00:49:04,000 Yeah, o fewn y strwythur, mae angen i chi gyfeirio at y strwythur ei hun. 636 00:49:04,000 --> 00:49:10,000 Os na fyddwch yn rhoi strwythur enw, os ei fod yn strwythur ddienw, ni allwch gyfeirio ato. 637 00:49:10,000 --> 00:49:17,000 Ac yn olaf ond nid lleiaf-y rhain i gyd fod braidd yn syml, 638 00:49:17,000 --> 00:49:20,000 a dylent eich helpu i wireddu os ydych yn ysgrifennu hyn i lawr 639 00:49:20,000 --> 00:49:24,000 eich bod yn gwneud rhywbeth o'i le os nad y mathau hyn o bethau yn gwneud synnwyr. 640 00:49:24,000 --> 00:49:28,000 Yn olaf ond nid lleiaf, pam mae hyn yn rhaid i fod yn * nod strwythur? 641 00:49:28,000 --> 00:49:34,000 Pam na ellir 'i jyst yn ei strwythur nod nesaf? 642 00:49:34,000 --> 00:49:37,000 [Myfyrwyr] Pointer i'r strwythur nesaf. 643 00:49:37,000 --> 00:49:39,000 Dyna anochel hyn yr ydym am. 644 00:49:39,000 --> 00:49:42,000 Gallai byth Pam fod yn nod strwythur nesaf? 645 00:49:42,000 --> 00:49:50,000 Pam mae'n rhaid iddo fod strwythur nod * nesaf? Yeah. 646 00:49:50,000 --> 00:49:53,000 [Myfyrwyr] Mae'n debyg i dolen ddiddiwedd. 647 00:49:53,000 --> 00:49:55,000 Yeah. 648 00:49:55,000 --> 00:49:57,000 [Myfyrwyr] Byddai'n i gyd mewn un. 649 00:49:57,000 --> 00:50:02,000 Yeah, dim ond meddwl am sut y byddem yn gwneud maint neu rywbeth. 650 00:50:02,000 --> 00:50:08,000 Maint a strwythur yn y bôn + neu - rhyw batrwm yma ac acw. 651 00:50:08,000 --> 00:50:15,000 Mae'n bôn yn mynd i fod swm y meintiau o'r pethau yn y strwythur. 652 00:50:15,000 --> 00:50:18,000 Mae'r hawl yma, heb newid unrhyw beth, mae'r maint yn mynd i fod yn hawdd. 653 00:50:18,000 --> 00:50:24,000 Maint y nod strwythur yn mynd i fod maint i + maint nesaf. 654 00:50:24,000 --> 00:50:27,000 Maint i yn mynd i fod yn 4. Maint y nesaf yn mynd i fod yn 4. 655 00:50:27,000 --> 00:50:30,000 Maint y nod strwythur yn mynd i fod yn 8. 656 00:50:30,000 --> 00:50:34,000 Os nad oes gennym y *, gan feddwl am sizeof, 657 00:50:34,000 --> 00:50:37,000 yna sizeof (i) yn mynd i fod yn 4. 658 00:50:37,000 --> 00:50:43,000 Maint y nod strwythur nesaf yn mynd i fod maint i + maint y nod strwythur nesaf 659 00:50:43,000 --> 00:50:46,000 + Maint i + maint y nod strwythur nesaf. 660 00:50:46,000 --> 00:50:55,000 Byddai'n dychweliad diddiwedd o nodau. 661 00:50:55,000 --> 00:51:00,000 Dyma pam mae hyn yn sut mae pethau yn rhaid i fod. 662 00:51:00,000 --> 00:51:03,000 >> Unwaith eto, yn bendant gofio hynny, 663 00:51:03,000 --> 00:51:06,000 neu o leiaf yn deall ei fod yn ddigon y gallwch fod yn gallu 664 00:51:06,000 --> 00:51:12,000 rheswm trwy yr hyn y dylai edrych. 665 00:51:12,000 --> 00:51:14,000 Mae'r pethau rydym yn mynd i eisiau i'w gweithredu. 666 00:51:14,000 --> 00:51:18,000 Os yw hyd y rhestr- 667 00:51:18,000 --> 00:51:21,000 gallech chi dwyllo a chadw o amgylch 668 00:51:21,000 --> 00:51:24,000 hyd byd-eang neu rywbeth, ond nid ydym yn mynd i wneud hynny. 669 00:51:24,000 --> 00:51:28,000 Rydym yn mynd i gyfrif hyd y rhestr. 670 00:51:28,000 --> 00:51:34,000 Rydym wedi cynnwys, felly dyna y bôn fel chwilio, 671 00:51:34,000 --> 00:51:41,000 felly mae gennym restr gysylltiedig o gyfanrifau i weld a yw hyn cyfanrif yn y rhestr cysylltiedig. 672 00:51:41,000 --> 00:51:44,000 Prepend yn mynd i mewnosoder ar y dechrau y rhestr. 673 00:51:44,000 --> 00:51:46,000 Atodi yn mynd i mewnosoder ar y diwedd. 674 00:51:46,000 --> 00:51:53,000 Insert_sorted yn mynd i fewnosod y sefyllfa didoli yn y rhestr. 675 00:51:53,000 --> 00:52:01,000 Math o Insert_sorted yn cymryd yn ganiataol nad ydych byth yn defnyddio prepend neu atodi mewn ffyrdd drwg. 676 00:52:01,000 --> 00:52:09,000 >> Insert_sorted pan fyddwch yn gweithredu insert_sorted- 677 00:52:09,000 --> 00:52:13,000 gadewch i ni ddweud ein bod wedi ein rhestr cysylltiedig. 678 00:52:13,000 --> 00:52:18,000 Mae hyn yn beth ar hyn o bryd yn edrych fel, 2, 4, 5. 679 00:52:18,000 --> 00:52:24,000 Wyf i am osod 3, felly cyn belled ag y rhestr ei hun yn cael ei datrys eisoes, 680 00:52:24,000 --> 00:52:27,000 mae'n hawdd dod o hyd lle mae 3 yn perthyn. 681 00:52:27,000 --> 00:52:29,000 Yr wyf yn dechrau am 2. 682 00:52:29,000 --> 00:52:32,000 Iawn, 3 yn fwy na 2, felly rwy'n awyddus i gadw i fynd. 683 00:52:32,000 --> 00:52:35,000 O, 4 yn rhy fawr, felly rwy'n gwybod 3 yn mynd i fynd i mewn rhwng 2 a 4, 684 00:52:35,000 --> 00:52:39,000 ac mae'n rhaid i mi osod awgrymiadau a'r holl bethau. 685 00:52:39,000 --> 00:52:43,000 Ond pe na baem yn llym yn defnyddio insert_sorted, 686 00:52:43,000 --> 00:52:50,000 yn hoffi gadewch i 'jyst dweud fy mod prepend 6, 687 00:52:50,000 --> 00:52:55,000 yna fy rhestr cysylltiedig yn mynd i ddod yn hyn. 688 00:52:55,000 --> 00:53:01,000 Mae bellach yn gwneud unrhyw synnwyr, felly ar gyfer insert_sorted, gallwch gymryd yn ganiataol 689 00:53:01,000 --> 00:53:04,000 bod y rhestr yn cael ei datrys, er bod gweithrediadau yn bodoli 690 00:53:04,000 --> 00:53:09,000 sy'n gallu achosi nad yw'n cael ei ddatrys, a dyna ni. 691 00:53:09,000 --> 00:53:20,000 Dod o hyd i gymorth mewnosoder-felly dyna'r prif bethau rydych chi'n mynd i gael eu gweithredu. 692 00:53:20,000 --> 00:53:24,000 >> Am y tro, cymerwch funud i wneud hyd ac yn cynnwys, 693 00:53:24,000 --> 00:53:30,000 a dylai'r rheini fod yn gymharol gyflym. 694 00:53:41,000 --> 00:53:48,000 Bron yn amser cau, felly gall unrhyw un yn cael unrhyw beth i hyd neu gynnwys? 695 00:53:48,000 --> 00:53:50,000 Maent yn mynd i fod bron yn union yr un fath. 696 00:53:50,000 --> 00:53:57,000 [Myfyrwyr] Hyd. 697 00:53:57,000 --> 00:54:01,000 Gadewch i ni weld, adolygu. 698 00:54:01,000 --> 00:54:04,000 Iawn. 699 00:54:12,000 --> 00:54:15,000 Ydych am esbonio? 700 00:54:15,000 --> 00:54:21,000 [Myfyrwyr] Fi jyst creu nod pwyntydd ac yn ymgychwyn i gyntaf, sef ein amrywiol byd-eang, 701 00:54:21,000 --> 00:54:27,000 ac yna rwy'n edrych i weld a yw'n null felly nid wyf yn cael nam seg ac yn dychwelyd 0 os yw hynny'n wir. 702 00:54:27,000 --> 00:54:34,000 Fel arall, yr wyf ddolen drwy, cadw golwg ar cyfanrif mewn 703 00:54:34,000 --> 00:54:38,000 faint o weithiau rydw i wedi cael mynediad i'r elfen nesaf y rhestr 704 00:54:38,000 --> 00:54:43,000 ac yng ngweithrediad gynyddran un hefyd weld yr elfen honno gwirioneddol, 705 00:54:43,000 --> 00:54:47,000 ac yna yr wyf yn barhaus yn gwneud y gwiriad i weld os yw'n null, 706 00:54:47,000 --> 00:54:56,000 ac os yw'n null, yna mae'n terfynu'n rhy gynnar a dim ond yn dychwelyd y nifer o elfennau Rwyf wedi gweld. 707 00:54:56,000 --> 00:55:01,000 >> [Rob B.] A oes unrhyw un gennych unrhyw sylwadau ar unrhyw beth? 708 00:55:01,000 --> 00:55:06,000 Mae hyn yn edrych cywirdeb dirwy ddoeth. 709 00:55:06,000 --> 00:55:10,000 [Myfyrwyr] Nid wyf yn meddwl eich bod angen y nod == null. 710 00:55:10,000 --> 00:55:13,000 Yeah, felly os nod == 0 ffurflen 'dim gwastraff. 711 00:55:13,000 --> 00:55:18,000 Ond os nod == null yna mae hyn-oh, mae mater cywirdeb. 712 00:55:18,000 --> 00:55:23,000 Roedd yn union rydych yn dychwelyd i, ond nid yw'n ran cwmpas ar hyn o bryd. 713 00:55:23,000 --> 00:55:30,000 'Ch jyst angen int i, felly i = 0. 714 00:55:30,000 --> 00:55:34,000 Ond os nod yn null, yna i yn dal yn mynd i fod yn 0, 715 00:55:34,000 --> 00:55:39,000 ac rydym yn mynd i ddychwelyd 0, felly yr achos hwn yn union yr un fath. 716 00:55:39,000 --> 00:55:48,000 Peth arall cyffredin yw cadw'r datganiad 717 00:55:48,000 --> 00:55:51,000 o'r tu mewn nod y ddolen i. 718 00:55:51,000 --> 00:55:54,000 Fe allech chi ddweud-oh, dim. 719 00:55:54,000 --> 00:55:56,000 Gadewch i ni ei gadw fel hyn. 720 00:55:56,000 --> 00:55:59,000 Mae'n debyg y byddwn yn rhoi int i = 0 yma, 721 00:55:59,000 --> 00:56:05,000 yna nod * nod = gyntaf yn fan hyn. 722 00:56:05,000 --> 00:56:11,000 Ac mae hyn yn debyg sut y-gael gwared ar hyn yn awr. 723 00:56:11,000 --> 00:56:14,000 Mae hyn yn debyg sut y byddwn wedi ei hysgrifennu. 724 00:56:14,000 --> 00:56:21,000 Gallech hefyd-yn edrych arno fel hyn. 725 00:56:21,000 --> 00:56:25,000 Mae hyn ar gyfer strwythur dolen i'r dde yma 726 00:56:25,000 --> 00:56:30,000 Dylai fod bron mor naturiol i chi ag ar gyfer int i = 0 727 00:56:30,000 --> 00:56:33,000 i yn llai na hyd i amrywiaeth + +. 728 00:56:33,000 --> 00:56:38,000 Os dyna sut yr ydych ailadrodd dros array, dyma sut yr ydych ailadrodd dros restr cysylltiedig. 729 00:56:38,000 --> 00:56:45,000 >> Dylai hyn fod yn ail natur ar ryw adeg. 730 00:56:45,000 --> 00:56:50,000 Gyda hynny mewn golwg, mae hyn yn mynd i fod bron yr un peth. 731 00:56:50,000 --> 00:56:57,000 Rydych yn mynd i eisiau i ailadrodd dros rhestr cysylltiedig. 732 00:56:57,000 --> 00:57:02,000 Os yw'r nod-Nid oes gennyf unrhyw syniad beth yw gwerth ei alw. 733 00:57:02,000 --> 00:57:04,000 Nôd i. 734 00:57:04,000 --> 00:57:15,000 Os yw'r gwerth ar y nod = i ddychwelyd yn wir, a dyna ni. 735 00:57:15,000 --> 00:57:18,000 Sylwch fod y ffordd yn unig yr ydym byth yn dychwelyd ffug 736 00:57:18,000 --> 00:57:23,000 yw os ydym yn ailadrodd dros y rhestr gyfan sy'n gysylltiedig a byth yn dychwelyd yn wir, 737 00:57:23,000 --> 00:57:29,000 felly dyna beth mae hyn yn ei wneud. 738 00:57:29,000 --> 00:57:36,000 Fel ochr nodiadau ydym yn debyg na fydd yn dod i atodi neu prepend. 739 00:57:36,000 --> 00:57:39,000 >> Nodyn sydyn diwethaf. 740 00:57:39,000 --> 00:57:52,000 Os ydych yn gweld y gair allweddol sefydlog, felly gadewch i ni ddweud statig int cyfrif = 0, 741 00:57:52,000 --> 00:57:56,000 yna rydym yn ei wneud cyfrif + +, gallwch chi yn y bôn meddwl amdano fel newidyn byd-eang, 742 00:57:56,000 --> 00:58:00,000 hyd yn oed er fy mod newydd ei ddweud nad yw hyn yw sut yr ydym yn mynd i weithredu hyd. 743 00:58:00,000 --> 00:58:06,000 Rwy'n gwneud hyn yma, ac yna cyfrif + +. 744 00:58:06,000 --> 00:58:11,000 Unrhyw ffordd y gallwn ni fynd i mewn i nod yn ein rhestr cysylltiedig yr ydym yn ei incrementing ein cyfrif. 745 00:58:11,000 --> 00:58:15,000 Y pwynt o hyn yw yr hyn yr allweddair sefydlog olygu. 746 00:58:15,000 --> 00:58:20,000 Os wyf newydd gael cyfrif int = 0 byddai hynny'n newidyn byd-eang rheolaidd oed. 747 00:58:20,000 --> 00:58:25,000 Pa ddulliau cyfrif int sefydlog yw ei fod yn newidyn byd-eang ar gyfer y ffeil. 748 00:58:25,000 --> 00:58:28,000 Mae'n amhosibl i rai ffeil arall, 749 00:58:28,000 --> 00:58:34,000 hoffi meddwl am pset 5, os ydych wedi dechrau. 750 00:58:34,000 --> 00:58:39,000 Mae gennych ddau speller.c, ac mae gennych dictionary.c, 751 00:58:39,000 --> 00:58:42,000 ac os ydych yn unig yn datgan beth fyd-eang, yna unrhyw beth yn speller.c 752 00:58:42,000 --> 00:58:45,000 Gellir cael mynediad mewn dictionary.c ac i'r gwrthwyneb. 753 00:58:45,000 --> 00:58:48,000 Newidynnau byd-eang yn hygyrch gan unrhyw. Ffeil c, 754 00:58:48,000 --> 00:58:54,000 ond mae newidynnau statig yn unig hygyrch o fewn i'r ffeil ei hun, 755 00:58:54,000 --> 00:59:01,000 felly tu mewn gwiriwr sillafu neu y tu mewn dictionary.c, 756 00:59:01,000 --> 00:59:06,000 mae hyn yn fath o sut y byddwn yn datgan fy amrywiol ar gyfer maint fy amrywiaeth 757 00:59:06,000 --> 00:59:10,000 neu faint o fy nifer y geiriau yn y geiriadur. 758 00:59:10,000 --> 00:59:15,000 Gan nad wyf am ddatgan newidyn byd-eang sy'n unrhyw un wedi cael mynediad i, 759 00:59:15,000 --> 00:59:18,000 Fi 'n sylweddol ond yn gofalu amdano ar gyfer fy ddibenion ei hun. 760 00:59:18,000 --> 00:59:21,000 >> Y peth da am hyn yw hefyd y stwff enw gwrthdrawiad cyfan. 761 00:59:21,000 --> 00:59:27,000 Os yw rhai ffeil arall yn ceisio defnyddio'r newidyn byd-eang o'r enw cyfrif, pethau'n mynd iawn, iawn o'i le, 762 00:59:27,000 --> 00:59:33,000 felly mae hyn yn 'n glws yn cadw pethau'n ddiogel, a dim ond gallwch gael mynediad iddo, 763 00:59:33,000 --> 00:59:38,000 ac na all neb arall, ac os bydd rhywun arall yn datgan newidyn byd-eang o'r enw cyfrif, 764 00:59:38,000 --> 00:59:43,000 yna ni fydd yn amharu ar eich newidyn sefydlog a elwir yn cyfrif. 765 00:59:43,000 --> 00:59:47,000 Dyna beth statig yw. Mae'n amrywio ffeil byd-eang. 766 00:59:47,000 --> 00:59:52,000 >> Cwestiynau ar unrhyw beth? 767 00:59:52,000 --> 00:59:59,000 Mae pob set. Hwyl. 768 00:59:59,000 --> 01:00:03,000 [CS50.TV]