1 00:00:00,000 --> 00:00:02,832 >> [Music kucheza] 2 00:00:02,832 --> 00:00:05,670 3 00:00:05,670 --> 00:00:08,560 >> DOUG LLOYD: Sawa, hivyo katika hatua hii ya shaka, 4 00:00:08,560 --> 00:00:15,300 tumekuwa kufunikwa mengi ya mambo ya msingi ya C. Tunajua mengi kuhusu vigezo, arrays, 5 00:00:15,300 --> 00:00:17,610 kuyatumia, mambo ambayo yote mazuri. 6 00:00:17,610 --> 00:00:21,610 Wale wote ni aina ya kujengwa katika kuona kama misingi, 7 00:00:21,610 --> 00:00:23,880 lakini tunaweza kufanya zaidi, sawa? 8 00:00:23,880 --> 00:00:27,930 Tunaweza kuchanganya mambo pamoja kwa njia ya kuvutia. 9 00:00:27,930 --> 00:00:31,010 >> Na hivyo hebu kufanya hivyo, hebu kuanza tawi nje ya kile C inatupa, 10 00:00:31,010 --> 00:00:35,270 na kuanza kujenga takwimu zetu wenyewe miundo kutumia jengo hizi 11 00:00:35,270 --> 00:00:40,590 vitalu pamoja ili kufanya kitu kweli thamani, manufaa. 12 00:00:40,590 --> 00:00:43,420 Njia moja tunaweza kufanya hivyo ni kuzungumzia makusanyo. 13 00:00:43,420 --> 00:00:48,360 Hivyo hadi sasa tulikuwa na aina moja ya data muundo wa anayewakilisha makusanyo 14 00:00:48,360 --> 00:00:51,030 ya kama maadili, maadili hayo. 15 00:00:51,030 --> 00:00:52,350 Hiyo itakuwa safu. 16 00:00:52,350 --> 00:00:57,020 Tuna makusanyo ya integers, au makusanyo ya wahusika na kadhalika. 17 00:00:57,020 --> 00:01:00,890 >> Miundo pia aina ya data muundo wa kukusanya taarifa, 18 00:01:00,890 --> 00:01:03,220 lakini siyo kwa ajili ya kukusanya kama maadili. 19 00:01:03,220 --> 00:01:08,090 Ni kawaida huchanganyika aina mbalimbali data pamoja ndani ya sanduku moja. 20 00:01:08,090 --> 00:01:10,750 Lakini siyo yenyewe kutumika mlolongo pamoja 21 00:01:10,750 --> 00:01:16,920 au kuungana pamoja kama vitu, kama safu. 22 00:01:16,920 --> 00:01:20,960 Arrays ni kubwa kwa kipengele kuangalia juu, lakini wanakumbuka 23 00:01:20,960 --> 00:01:24,262 kwamba ni vigumu sana kuingiza ndani ya safu, 24 00:01:24,262 --> 00:01:26,470 isipokuwa sisi ni kuingiza katika mwisho kabisa wa kwamba safu. 25 00:01:26,470 --> 00:01:29,730 >> Na mfano bora nina kwa kuwa ni kuingizwa aina. 26 00:01:29,730 --> 00:01:31,650 Kama unakumbuka video wetu juu ya kuingizwa aina, 27 00:01:31,650 --> 00:01:34,110 kuna mengi ya gharama zinazohusika katika kuwa 28 00:01:34,110 --> 00:01:37,970 kuchukua vipengele, na kuhama yao nje ya njia na kifafa kitu 29 00:01:37,970 --> 00:01:41,290 ndani ya katikati ya safu yako. 30 00:01:41,290 --> 00:01:44,690 Arrays pia wanakabiliwa na mwingine tatizo, ambayo ni kutokubadilika. 31 00:01:44,690 --> 00:01:47,150 Wakati sisi kutangaza safu, sisi kupata risasi moja katika hilo. 32 00:01:47,150 --> 00:01:49,790 Sisi kupata cha kusema, nataka hii mambo mengi. 33 00:01:49,790 --> 00:01:51,940 Inaweza kuwa 100, inaweza kuwa 1,000, inaweza 34 00:01:51,940 --> 00:01:55,930 kuwa x ambapo x ni idadi kwamba mtumiaji alitupa katika haraka au kwa amri 35 00:01:55,930 --> 00:01:56,630 mstari. 36 00:01:56,630 --> 00:01:59,905 >> Lakini sisi tu kupata risasi moja saa hiyo, sisi hawapati kisha kusema lo, kwa kweli mimi 37 00:01:59,905 --> 00:02:04,360 inahitajika 101, au mimi zinahitajika x pamoja 20. 38 00:02:04,360 --> 00:02:07,910 Kuchelewa, tumekuwa tayari alitangaza safu, na kama tunataka kupata 101 au x 39 00:02:07,910 --> 00:02:12,050 pamoja na 20, tuna kutangaza safu tofauti kabisa, 40 00:02:12,050 --> 00:02:15,540 nakala mambo yote ya safu juu, na kisha tuna kutosha. 41 00:02:15,540 --> 00:02:19,880 Na nini kama sisi ni makosa tena, nini kama sisi kweli haja 102, au x plus 40, 42 00:02:19,880 --> 00:02:21,970 tuna kufanya hii tena. 43 00:02:21,970 --> 00:02:26,250 Hivyo wao ni usiobadilika sana kwa resizing takwimu zetu, 44 00:02:26,250 --> 00:02:29,360 lakini kama sisi kuchanganya pamoja baadhi ya mambo ya msingi kwamba tumekuwa tayari 45 00:02:29,360 --> 00:02:33,230 kujifunza kuhusu kuyatumia na miundo, hasa kwa kutumia kumbukumbu ya nguvu 46 00:02:33,230 --> 00:02:36,180 mgao kwa malloc, sisi unaweza kuweka vipande hayo pamoja 47 00:02:36,180 --> 00:02:40,960 kujenga takwimu mpya structure-- a moja moja wanaohusishwa orodha tupate say-- 48 00:02:40,960 --> 00:02:45,400 ambayo inaruhusu sisi kukua na kuogopa mkusanyiko wa maadili 49 00:02:45,400 --> 00:02:48,800 na hatutakuwa na nafasi yoyote kupita. 50 00:02:48,800 --> 00:02:53,320 >> Hivyo tena, tunatoa wito wazo hili, wazo hili, orodha wanaohusishwa. 51 00:02:53,320 --> 00:02:56,320 Hasa, katika video hii tuko kuzungumza juu ya orodha moja moja wanaohusishwa, 52 00:02:56,320 --> 00:02:59,185 na kisha mwingine video tutaweza majadiliano orodha kuhusu mara mbili wanaohusishwa, ambayo 53 00:02:59,185 --> 00:03:01,560 ni tu tofauti juu ya mandhari hapa. 54 00:03:01,560 --> 00:03:05,200 Lakini orodha moja moja wanaohusishwa inakuwa na nodes, 55 00:03:05,200 --> 00:03:08,559 nodes tu kuwa term-- abstract ni tu kitu mimi nina wito 56 00:03:08,559 --> 00:03:10,350 hiyo ni aina ya muundo, kimsingi, mimi nina? 57 00:03:10,350 --> 00:03:16,190 Tu kwenda kumwita node-- na hii node ina wanachama wawili, au mashamba mawili. 58 00:03:16,190 --> 00:03:20,300 Ina data, kwa kawaida integer, tabia kuelea, 59 00:03:20,300 --> 00:03:23,790 au inaweza kuwa baadhi ya data aina nyingine kwamba umefanya inavyoelezwa na aina def. 60 00:03:23,790 --> 00:03:29,290 Na ina pointer nodi nyingine ya aina moja. 61 00:03:29,290 --> 00:03:34,710 >> Hivyo tuna mambo mawili ndani ya nodi hii, data na pointer 62 00:03:34,710 --> 00:03:36,380 nodi mwingine. 63 00:03:36,380 --> 00:03:39,370 Na kama kuanza kupiga taswira hivyo, unaweza kufikiri juu yake 64 00:03:39,370 --> 00:03:42,280 kama mlolongo wa nodes kwamba ni kushikamana pamoja. 65 00:03:42,280 --> 00:03:45,070 Tuna nodi ya kwanza, ina data, na pointer 66 00:03:45,070 --> 00:03:49,110 nodi pili, ambayo ina data, na pointer nodi ya tatu. 67 00:03:49,110 --> 00:03:52,940 Na hivyo ndiyo sababu sisi kuiita orodha wanaohusishwa, wao ni wanaohusishwa pamoja. 68 00:03:52,940 --> 00:03:56,070 >> Je, hii maalum muundo wa nodi kuangalia kama? 69 00:03:56,070 --> 00:04:01,120 Naam, kama unakumbuka kutoka sehemu yetu juu ya kufafanua aina desturi, na aina def, 70 00:04:01,120 --> 00:04:05,400 tunaweza kufafanua structure-- na aina kufafanua muundo kama hii. 71 00:04:05,400 --> 00:04:11,240 tyepdef struct sllist, na kisha mimi nina kutumia thamani neno hapa kiholela 72 00:04:11,240 --> 00:04:13,891 zinaonyesha aina yoyote data kweli. 73 00:04:13,891 --> 00:04:16,890 Unaweza kupita kwenye integer au kuelea, unaweza kuwa na chochote unataka. 74 00:04:16,890 --> 00:04:19,389 Ni si vikwazo kwa tu integers, au kitu kama hicho. 75 00:04:19,389 --> 00:04:22,790 Hivyo thamani ya kitu holela tu Aina ya data, na kisha pointer 76 00:04:22,790 --> 00:04:26,310 nodi nyingine ya aina moja. 77 00:04:26,310 --> 00:04:29,690 >> Sasa, kuna samaki kidogo hapa na kufafanua muundo 78 00:04:29,690 --> 00:04:33,030 wakati ni muundo binafsi rejea. 79 00:04:33,030 --> 00:04:35,340 Mimi kuwa na muda jina kwa mfumo wangu. 80 00:04:35,340 --> 00:04:37,640 Mwisho wa siku mimi wazi unataka simu yake 81 00:04:37,640 --> 00:04:43,030 SLL nodi, hiyo ni hatimaye mpya jina sehemu ya aina yangu ufafanuzi, 82 00:04:43,030 --> 00:04:47,450 lakini siwezi kutumia SLL nodi katikati ya hii. 83 00:04:47,450 --> 00:04:51,430 Sababu ya kuwa, nina si umba aina aitwaye SLL nodi 84 00:04:51,430 --> 00:04:55,200 mpaka mimi hit hatua hii ya mwisho hapa. 85 00:04:55,200 --> 00:04:59,720 Hadi hatua hiyo, mimi kuwa na njia nyingine ya kutaja aina hii ya data. 86 00:04:59,720 --> 00:05:02,440 >> Na hii ni kwa mujibu rejea aina data. 87 00:05:02,440 --> 00:05:06,314 Yake; s aina ya data muundo ambayo ina data, 88 00:05:06,314 --> 00:05:08,480 na pointer mwingine muundo wa aina moja. 89 00:05:08,480 --> 00:05:11,750 Hivyo mimi haja ya kuwa na uwezo wa kutaja aina hii data angalau kwa muda, 90 00:05:11,750 --> 00:05:14,910 hivyo kutoa ni muda jina la struct sllist 91 00:05:14,910 --> 00:05:18,540 inaruhusu mimi kisha kusema nataka pointer na mwingine sllist struct, 92 00:05:18,540 --> 00:05:24,690 nyota struct sllist, na kisha baada nimekuwa kukamilika ufafanuzi, 93 00:05:24,690 --> 00:05:27,220 Mimi sasa wanaweza kupiga aina hii SLL nodi. 94 00:05:27,220 --> 00:05:30,520 >> Hivyo ndiyo sababu unaweza kuona kuna jina la muda hapa, 95 00:05:30,520 --> 00:05:31,879 lakini jina kudumu hapa. 96 00:05:31,879 --> 00:05:33,920 Wakati mwingine unaweza kuona ufafanuzi wa muundo, 97 00:05:33,920 --> 00:05:36,570 kwa mfano, kwamba si binafsi rejea, kwamba 98 00:05:36,570 --> 00:05:39,390 hawana jina specifier hapa. 99 00:05:39,390 --> 00:05:43,040 Ingekuwa tu kusema typedef struct, kufungua curly brace na kisha kufafanua. 100 00:05:43,040 --> 00:05:45,620 Lakini kama wewe ni struct ni kwa mujibu rejea, kama hii ni moja ya, 101 00:05:45,620 --> 00:05:49,010 unahitaji kutaja muda aina jina. 102 00:05:49,010 --> 00:05:51,310 Lakini hatimaye, sasa kwamba tumefanya huu, 103 00:05:51,310 --> 00:05:53,620 tunaweza tu kutaja nodi hiyo, vitengo hivi, 104 00:05:53,620 --> 00:05:57,900 kama nodes SLL kwa madhumuni ya mapumziko ya video hii. 105 00:05:57,900 --> 00:06:00,900 >> Haki wote, hivyo tunajua jinsi ya kujenga uhusiano orodha nodi. 106 00:06:00,900 --> 00:06:03,240 Tunajua jinsi ya kufafanua wanaohusishwa orodha nodi. 107 00:06:03,240 --> 00:06:06,670 Sasa, kama sisi ni kwenda kuanza kutumia yao ya kukusanya taarifa, 108 00:06:06,670 --> 00:06:10,360 kuna wanandoa wa shughuli sisi wanapaswa kuelewa na kufanya kazi pamoja. 109 00:06:10,360 --> 00:06:12,860 Tunahitaji kujua jinsi ya kujenga orodha wanaohusishwa nje ya hewa nyembamba. 110 00:06:12,860 --> 00:06:14,901 Kama hakuna orodha tayari, tunataka kuanza moja. 111 00:06:14,901 --> 00:06:16,960 Kwa hiyo, tunahitaji kuwa na uwezo kuunda orodha wanaohusishwa, 112 00:06:16,960 --> 00:06:19,130 tunahitaji pengine kutafuta kupitia orodha kiungo 113 00:06:19,130 --> 00:06:21,830 kupata kipengele sisi ni kuangalia kwa. 114 00:06:21,830 --> 00:06:24,430 Tunahitaji kuwa na uwezo wa kuingiza mambo mapya katika orodha, 115 00:06:24,430 --> 00:06:25,930 tunataka orodha yetu kuwa na uwezo wa kukua. 116 00:06:25,930 --> 00:06:28,638 Na vile vile, tunataka kuwa na uwezo kufuta vitu kutoka orodha yetu, 117 00:06:28,638 --> 00:06:30,250 tunataka orodha yetu kuwa na uwezo wa kuogopa. 118 00:06:30,250 --> 00:06:32,160 Na mwishoni mwa yetu mipango, hasa 119 00:06:32,160 --> 00:06:34,550 kama unakumbuka kwamba tuko dynamically kugawa kumbukumbu 120 00:06:34,550 --> 00:06:38,337 kujenga orodha hizi kwa kawaida, tunataka bure yote hayo kumbukumbu 121 00:06:38,337 --> 00:06:39,670 wakati sisi ni kosa kufanya kazi kwa hayo. 122 00:06:39,670 --> 00:06:44,627 Na hivyo tunahitaji kuwa na uwezo wa kufuta nzima wanaohusishwa orodha katika moja kushindwa swoop. 123 00:06:44,627 --> 00:06:46,460 Basi hebu kwenda kupitia baadhi ya shughuli hizo 124 00:06:46,460 --> 00:06:51,192 na jinsi sisi tupate taswira yao, kuzungumza katika pseudocode kificho mahsusi. 125 00:06:51,192 --> 00:06:53,150 Hivyo tunataka kujenga wanaohusishwa orodha, hivyo labda sisi 126 00:06:53,150 --> 00:06:56,480 wanataka kufafanua kazi kwa mfano huu. 127 00:06:56,480 --> 00:07:01,690 SLL nyota nodi, kujenga, na mimi nina kupita katika hoja moja, baadhi ya data holela 128 00:07:01,690 --> 00:07:05,530 aina tena, baadhi ya data aina holela. 129 00:07:05,530 --> 00:07:10,482 Lakini mimi nina returning-- kazi hii lazima kurudi kwangu pointer, kwa mmoja- 130 00:07:10,482 --> 00:07:11,190 wanaohusishwa orodha nodi. 131 00:07:11,190 --> 00:07:14,050 Tena, sisi ni kujaribu kujenga orodha wanaohusishwa nje ya hewa nyembamba, 132 00:07:14,050 --> 00:07:17,900 hivyo mimi haja pointer kwamba orodha wakati mimi nina kufanyika. 133 00:07:17,900 --> 00:07:19,420 >> Hivyo hatua zinazohusika hapa ni nini? 134 00:07:19,420 --> 00:07:20,960 Naam, jambo la kwanza mimi nina kwenda kufanya ni dynamically 135 00:07:20,960 --> 00:07:22,550 kutenga nafasi kwa nodi mpya. 136 00:07:22,550 --> 00:07:26,689 Tena, sisi ni kujenga nje ya nyembamba hewa, hivyo tunahitaji malloc nafasi kwa ajili yake. 137 00:07:26,689 --> 00:07:28,480 Na bila shaka, mara moja baada ya sisi malloc, 138 00:07:28,480 --> 00:07:31,692 sisi daima kuangalia ili kuhakikisha kwamba yetu pointer hatukuwa kupata nyuma null. 139 00:07:31,692 --> 00:07:33,650 Kwa sababu kama sisi kujaribu na staha pointer null, 140 00:07:33,650 --> 00:07:36,190 tunakwenda kuteseka segfault na hatutaki hilo. 141 00:07:36,190 --> 00:07:39,510 >> Kisha tunataka kujaza katika uwanja, tunataka initialize shamba thamani 142 00:07:39,510 --> 00:07:41,690 na initialize uwanja ijayo. 143 00:07:41,690 --> 00:07:45,450 Na kisha tunataka to-- hatimaye kama kazi mfano indicates-- tunataka 144 00:07:45,450 --> 00:07:49,940 kurudi pointer SLL nodi. 145 00:07:49,940 --> 00:07:51,710 Kwa hiyo kile kufanya hili kuangalia kama kuibua? 146 00:07:51,710 --> 00:07:55,230 Naam, kwanza tunakwenda dynamically kutenga nafasi kwa mwezi SLL nodi, 147 00:07:55,230 --> 00:07:58,320 hivyo sisi malloc-- hiyo ni Visual uwakilishi 148 00:07:58,320 --> 00:08:00,020 ya nodi sisi tu kuundwa. 149 00:08:00,020 --> 00:08:02,757 Na sisi kuangalia kuhakikisha siyo NULL katika kesi hiyo, 150 00:08:02,757 --> 00:08:04,840 picha bila kuwa na umeonyesha juu kama ilikuwa null, 151 00:08:04,840 --> 00:08:07,298 tunataka kuwa kukimbia nje ya kumbukumbu, hivyo sisi ni vizuri kwenda huko. 152 00:08:07,298 --> 00:08:10,200 Hivyo sasa sisi ni juu ya hatua C, initialize shamba nodes thamani. 153 00:08:10,200 --> 00:08:12,280 Naam, kulingana na kazi hii piga mimi nina kutumia hapa, 154 00:08:12,280 --> 00:08:16,700 Inaonekana kama nataka kupita katika 6, hivyo mimi itabidi 6 katika uwanja thamani. 155 00:08:16,700 --> 00:08:18,865 Sasa, initialize uwanja ijayo. 156 00:08:18,865 --> 00:08:21,640 Naam, je, Mimi kwenda kufanya huko, hakuna kitu ijayo, haki, 157 00:08:21,640 --> 00:08:23,600 hii ni kitu pekee katika orodha. 158 00:08:23,600 --> 00:08:27,206 Basi nini jambo la pili katika orodha? 159 00:08:27,206 --> 00:08:29,660 >> Ni lazima uhakika na kitu chochote, haki. 160 00:08:29,660 --> 00:08:33,600 Kuna kitu kingine huko, ili kile ni dhana tunajua ya kwamba ni nothing-- 161 00:08:33,600 --> 00:08:35,638 kuyatumia kwa kitu? 162 00:08:35,638 --> 00:08:37,929 Ni lazima labda tunataka kuweka pointer null huko, 163 00:08:37,929 --> 00:08:40,178 na mimi itabidi kuwakilisha null pointer kama tu sanduku nyekundu, 164 00:08:40,178 --> 00:08:41,559 hatuwezi kwenda yoyote zaidi. 165 00:08:41,559 --> 00:08:44,430 Kama tutaweza kuona baadaye kidogo juu ya, tutakuwa na hatimaye minyororo 166 00:08:44,430 --> 00:08:46,330 ya mishale ya kuunganisha hizi nodes pamoja, 167 00:08:46,330 --> 00:08:48,480 lakini wakati kugonga nyekundu sanduku, hiyo ni null, 168 00:08:48,480 --> 00:08:51,150 hatuwezi kwenda yoyote zaidi, hiyo ni mwisho wa orodha. 169 00:08:51,150 --> 00:08:53,960 >> Na mwisho, sisi tu wanataka kurudi pointer nodi hii. 170 00:08:53,960 --> 00:08:56,160 Hivyo tutaweza simu yake mpya, tena atarejea mpya 171 00:08:56,160 --> 00:08:59,370 hivyo inaweza kutumika katika chochote kazi aliyeliumba. 172 00:08:59,370 --> 00:09:03,100 Kwa hiyo, kuna sisi kwenda, Tumeunda mmoja- wanaohusishwa orodha nodi nje ya hewa nyembamba, 173 00:09:03,100 --> 00:09:05,920 na sasa tuna orodha tunaweza kufanya kazi pamoja. 174 00:09:05,920 --> 00:09:08,260 >> Sasa, hebu sema sisi tayari kuwa na mkufu kubwa, 175 00:09:08,260 --> 00:09:09,800 na tunataka kupata kitu ndani yake. 176 00:09:09,800 --> 00:09:12,716 Na tunataka kazi hiyo ni kwenda kurudi kweli au uongo, kulingana 177 00:09:12,716 --> 00:09:15,840 kama kweli thamani lipo katika orodha hiyo. 178 00:09:15,840 --> 00:09:18,160 Mfano kazi, au Tamko kwa kazi hiyo, 179 00:09:18,160 --> 00:09:23,320 ili kuangalia kama hii bool kupata, na kisha tunataka kupitisha katika hoja mbili. 180 00:09:23,320 --> 00:09:26,996 >> Kwanza, ni pointer sehemu ya kwanza ya orodha wanaohusishwa. 181 00:09:26,996 --> 00:09:29,620 Hii ni kweli kitu utasikia Siku zote unataka kuweka wimbo wa, 182 00:09:29,620 --> 00:09:33,110 na kwa kweli inaweza kuwa kitu ambacho wewe hata kuweka katika variable kimataifa. 183 00:09:33,110 --> 00:09:35,360 Mara baada ya kujenga orodha, nanyi siku zote, siku zote 184 00:09:35,360 --> 00:09:38,990 wanataka kuweka wimbo wa sana sehemu ya kwanza ya orodha. 185 00:09:38,990 --> 00:09:43,690 Kwa njia hiyo unaweza kutaja wengine wote mambo kwa kufuata tu mlolongo, 186 00:09:43,690 --> 00:09:47,300 bila ya kuwa na kuweka kuyatumia intact kwa kila kipengele moja. 187 00:09:47,300 --> 00:09:50,920 Wewe tu haja ya kuweka wimbo wa kwanza moja ikiwa wao ni wote minyororo pamoja. 188 00:09:50,920 --> 00:09:52,460 >> Na kisha Jambo la pili sisi ni kupita katika tena 189 00:09:52,460 --> 00:09:54,376 ni kiholela some-- chochote data aina tuko 190 00:09:54,376 --> 00:09:59,640 kuangalia kwa huko ni ndani ya hopefully moja ya nodes katika orodha. 191 00:09:59,640 --> 00:10:00,980 Hivyo hatua ni nini? 192 00:10:00,980 --> 00:10:04,250 Naam, jambo la kwanza sisi kufanya ni sisi kujenga transversal pointer 193 00:10:04,250 --> 00:10:06,015 akizungumzia orodha kichwa. 194 00:10:06,015 --> 00:10:08,890 Naam, kwa nini sisi kufanya hivyo, sisi tayari na pointer katika orodha kichwa, 195 00:10:08,890 --> 00:10:10,974 kwa nini sio sisi tu hoja kwamba moja karibu? 196 00:10:10,974 --> 00:10:13,140 Naam, kama mimi tu alisema, ni kweli muhimu kwetu 197 00:10:13,140 --> 00:10:17,580 daima kuweka wimbo wa kipengele sana kwanza katika orodha. 198 00:10:17,580 --> 00:10:21,270 Na hivyo ni kweli bora kujenga duplicate ya kwamba, 199 00:10:21,270 --> 00:10:25,350 na kutumia kuweza kuzunguka hivyo sisi kamwe ajali kuondokana, au sisi daima 200 00:10:25,350 --> 00:10:30,430 na pointer wakati fulani kwamba ni haki juu ya kipengele kwanza ya orodha. 201 00:10:30,430 --> 00:10:33,290 Hivyo ni bora ya kujenga pili moja kwamba sisi kutumia kutoa hoja. 202 00:10:33,290 --> 00:10:35,877 >> Kisha sisi tu kulinganisha kama shamba thamani katika nodi kwamba 203 00:10:35,877 --> 00:10:38,960 ni nini sisi ni kutafuta, na kama ni si, tunakwenda nodi ijayo. 204 00:10:38,960 --> 00:10:41,040 Na sisi kuendelea kufanya hivyo tena na tena, na tena, 205 00:10:41,040 --> 00:10:44,811 mpaka sisi ama kupata kipengele, au sisi kugonga 206 00:10:44,811 --> 00:10:47,310 NULL tumekuwa kufikiwa mwisho ya orodha na si huko. 207 00:10:47,310 --> 00:10:50,540 Hii lazima hopefully kuwapigia kengele na wewe kama tu tafuta linear, 208 00:10:50,540 --> 00:10:54,430 sisi ni tu kujinakilisha katika moja moja wanaohusishwa orodha muundo 209 00:10:54,430 --> 00:10:56,280 badala ya kutumia safu ya kufanya hivyo. 210 00:10:56,280 --> 00:10:58,210 >> Hivyo hapa ni mfano wa orodha moja moja wanaohusishwa. 211 00:10:58,210 --> 00:11:00,043 Hii moja lina nodes tano, na tuna 212 00:11:00,043 --> 00:11:04,330 pointer kichwa cha orodha, iitwayo orodha. 213 00:11:04,330 --> 00:11:07,385 Jambo la kwanza tunataka kufanya ni tena, kujenga kwamba traversal pointer. 214 00:11:07,385 --> 00:11:09,760 Hivyo tuna sasa kuyatumia mbili hatua hiyo kwa kitu kimoja. 215 00:11:09,760 --> 00:11:15,025 >> Sasa, taarifa hapa pia, sikuwa na malloc nafasi yoyote kwa trav. 216 00:11:15,025 --> 00:11:18,970 Mimi hakusema trav sawa na malloc kitu, kwamba nodi tayari ipo, 217 00:11:18,970 --> 00:11:21,160 kwamba nafasi katika kumbukumbu tayari ipo. 218 00:11:21,160 --> 00:11:24,290 Basi wote mimi nina kweli kufanya ni kujenga pointer mwingine kwa hayo. 219 00:11:24,290 --> 00:11:28,210 Mimi si mallocing ziada nafasi, tu na sasa kuyatumia mbili 220 00:11:28,210 --> 00:11:31,370 akizungumzia kitu kimoja. 221 00:11:31,370 --> 00:11:33,710 >> Hivyo ni nini 2 Mimi nina kuangalia kwa? 222 00:11:33,710 --> 00:11:37,220 Naam, hapana, hivyo badala mimi nina kwenda hoja kwa moja ijayo. 223 00:11:37,220 --> 00:11:41,740 Hivyo kimsingi napenda kusema, trav sawa na trav ijayo. 224 00:11:41,740 --> 00:11:43,630 Ni 3 nini mimi kutafuta, hakuna. 225 00:11:43,630 --> 00:11:45,780 Hivyo mimi kuendelea kwenda kupitia mpaka hatimaye 226 00:11:45,780 --> 00:11:48,690 kupata 6 ambayo ni nini mimi nina kuangalia kwa kuzingatia kazi ya wito 227 00:11:48,690 --> 00:11:51,600 Nina juu huko, na hivyo mimi nina kufanyika. 228 00:11:51,600 --> 00:11:54,150 >> Sasa, nini kama kipengele mimi nina kutafuta ni si katika orodha, 229 00:11:54,150 --> 00:11:55,510 ni bado kwenda kufanya kazi? 230 00:11:55,510 --> 00:11:57,120 Naam, taarifa kwamba orodha hapa ni subtly tofauti, 231 00:11:57,120 --> 00:11:59,410 na hii ni kitu kingine kwamba ni muhimu kwa orodha wanaohusishwa, 232 00:11:59,410 --> 00:12:01,780 huna kuhifadhi yao ili yoyote. 233 00:12:01,780 --> 00:12:05,390 Unaweza kama unataka, lakini unaweza kuwa tayari niliona 234 00:12:05,390 --> 00:12:09,310 kwamba sisi siyo kuweka wimbo wa nini idadi kipengele sisi ni katika. 235 00:12:09,310 --> 00:12:13,150 >> Na hiyo ni aina ya biashara moja kwamba sisi kuwa na uhusiano orodha mistari arrays, 236 00:12:13,150 --> 00:12:15,300 je, ni hatuna random kupata tena. 237 00:12:15,300 --> 00:12:18,150 Hatuwezi tu kusema, nataka kwenda kipengele 0, 238 00:12:18,150 --> 00:12:21,410 au kipengele 6 wa safu yangu, ambayo siwezi kufanya katika safu. 239 00:12:21,410 --> 00:12:25,080 Siwezi kusema mimi nataka kwenda 0 kipengele, au kipengele 6, 240 00:12:25,080 --> 00:12:30,360 au kipengele 25 ya orodha yangu wanaohusishwa, hakuna ripoti kuhusishwa na wao. 241 00:12:30,360 --> 00:12:33,660 Na hivyo hana kweli jambo kama sisi kuhifadhi orodha yetu katika utaratibu. 242 00:12:33,660 --> 00:12:36,080 Kama unataka wewe hakika wanaweza, lakini kuna 243 00:12:36,080 --> 00:12:38,567 hakuna sababu kwa nini wanahitaji kuhifadhiwa ili yeyote. 244 00:12:38,567 --> 00:12:40,400 Hivyo tena, hebu jaribu na kupata 6 katika orodha hii. 245 00:12:40,400 --> 00:12:43,200 Naam, sisi kuanza saa mwanzo, hatuoni 6, 246 00:12:43,200 --> 00:12:47,690 na kisha tunaendelea si kutafuta 6, mpaka sisi hatimaye kupata hapa. 247 00:12:47,690 --> 00:12:52,790 Hivyo sasa hivi trav pointi nodi zenye 8, na sita ni si huko. 248 00:12:52,790 --> 00:12:55,250 >> Hivyo hatua ya pili itakuwa kwenda pointer ijayo, 249 00:12:55,250 --> 00:12:57,440 hivyo kusema trav sawa na trav ijayo. 250 00:12:57,440 --> 00:13:00,750 Naam, trav ijayo, unahitajika kwa sanduku nyekundu huko, ni null. 251 00:13:00,750 --> 00:13:03,020 Hivyo kuna mahali popote kwa kwenda, na hivyo katika hatua hii 252 00:13:03,020 --> 00:13:06,120 tunaweza kuhitimisha kwamba tumekuwa kufikiwa mwisho wa orodha wanaohusishwa, 253 00:13:06,120 --> 00:13:07,190 na 6 ni si huko. 254 00:13:07,190 --> 00:13:10,980 Na ingekuwa irudishwe uongo katika kesi hii. 255 00:13:10,980 --> 00:13:14,540 >> OK, ni jinsi gani sisi kuingiza mpya nodi katika orodha wanaohusishwa? 256 00:13:14,540 --> 00:13:17,310 Hivyo tumekuwa na uwezo wa kujenga orodha wanaohusishwa bila ya kutarajia, 257 00:13:17,310 --> 00:13:19,370 lakini sisi pengine wanataka kujenga mlolongo na si 258 00:13:19,370 --> 00:13:22,620 kujenga rundo la orodha tofauti. 259 00:13:22,620 --> 00:13:25,700 Tunataka kuwa na orodha moja ambayo ina rundo la nodes ndani yake, 260 00:13:25,700 --> 00:13:28,040 si kundi la orodha na nodi moja. 261 00:13:28,040 --> 00:13:31,260 Hivyo hatuwezi tu kuendelea kutumia Kujenga kazi sisi kuelezwa hapo awali, sasa sisi 262 00:13:31,260 --> 00:13:33,860 wanataka kuingiza ndani orodha ambayo tayari zipo. 263 00:13:33,860 --> 00:13:36,499 >> Hivyo kesi hiyo, tunakwenda kupita katika hoja mbili, 264 00:13:36,499 --> 00:13:39,290 pointer kichwa cha kwamba wanaohusishwa orodha kwamba tunataka kuongeza. 265 00:13:39,290 --> 00:13:40,910 Tena, kwamba ni kwa nini ni hivyo muhimu kwamba huwa 266 00:13:40,910 --> 00:13:43,400 kuweka wimbo wa jambo hilo, kwa sababu ni njia pekee sisi kweli 267 00:13:43,400 --> 00:13:46,690 na kwa kutaja orodha nzima ni tu kwa pointer kipengele kwanza. 268 00:13:46,690 --> 00:13:49,360 Hivyo tunataka kupitisha katika pointer kwa kuwa kipengele kwanza, 269 00:13:49,360 --> 00:13:52,226 na chochote thamani sisi wanataka kuongeza orodha. 270 00:13:52,226 --> 00:13:54,600 Na hatimaye kazi hii ni kwenda na kurudi pointer 271 00:13:54,600 --> 00:13:57,980 kwa mkuu mpya wa orodha wanaohusishwa. 272 00:13:57,980 --> 00:13:59,700 >> Ni hatua zinazohusika hapa ni nini? 273 00:13:59,700 --> 00:14:02,249 Naam, tu kama kwa kujenga, tunahitaji dynamically kutenga 274 00:14:02,249 --> 00:14:05,540 nafasi kwa ajili ya nodi mpya, na kuangalia kufanya hakika sisi si kukimbia nje ya kumbukumbu, tena, 275 00:14:05,540 --> 00:14:07,150 kwa sababu sisi ni kutumia malloc. 276 00:14:07,150 --> 00:14:09,080 Kisha tunataka idadi na kuingiza nodi, 277 00:14:09,080 --> 00:14:12,730 hivyo kuweka idadi, chochote val ni, ndani ya nodi. 278 00:14:12,730 --> 00:14:17,310 Tunataka kuingiza nodi katika mwanzo wa orodha wanaohusishwa. 279 00:14:17,310 --> 00:14:19,619 >> Kuna sababu ya kuwa mimi wanataka kufanya hivyo, na ni 280 00:14:19,619 --> 00:14:21,910 inaweza kuwa na thamani ya kuchukua pili kutulia video hapa, 281 00:14:21,910 --> 00:14:25,860 na kufikiri kuhusu nini napenda wanataka kuingiza mwanzoni mwa wanaohusishwa 282 00:14:25,860 --> 00:14:26,589 orodha. 283 00:14:26,589 --> 00:14:28,630 Tena, nilivyoeleza awali kwamba ni kweli haina 284 00:14:28,630 --> 00:14:33,020 jambo kama sisi kuhifadhi katika yoyote ili, hivyo labda hiyo ni habari. 285 00:14:33,020 --> 00:14:36,040 Na wewe aliona nini kitatokea kama sisi alitaka to-- au kutoka tu pili 286 00:14:36,040 --> 00:14:37,360 iliyopita wakati tulipokuwa tunakwenda njia ya kutafuta wewe 287 00:14:37,360 --> 00:14:39,235 naweza kuona nini kinaweza kutokea kama sisi walikuwa wakijaribu 288 00:14:39,235 --> 00:14:41,330 kuingiza mwishoni mwa orodha. 289 00:14:41,330 --> 00:14:44,750 Kwa sababu hatuna pointer hadi mwisho wa orodha. 290 00:14:44,750 --> 00:14:47,490 >> Hivyo sababu hiyo napenda wanataka kuingiza mwanzoni, 291 00:14:47,490 --> 00:14:49,380 ni kwa sababu siwezi kufanya hivyo mara moja. 292 00:14:49,380 --> 00:14:52,730 Nina pointer mwanzoni, na tutaweza kuona hii katika Visual katika pili. 293 00:14:52,730 --> 00:14:55,605 Lakini kama nataka kuingiza mwishoni, Nina kuanza mwanzoni, 294 00:14:55,605 --> 00:14:58,760 traverse njia yote ya mwisho, na kisha upepo juu. 295 00:14:58,760 --> 00:15:01,420 Hivyo kwamba itakuwa na maana kwamba kuingiza mwishoni mwa orodha 296 00:15:01,420 --> 00:15:04,140 angekuwa o ya n operesheni, kurejea 297 00:15:04,140 --> 00:15:06,720 kwa mjadala wetu wa Computational utata. 298 00:15:06,720 --> 00:15:10,140 Ni d kuwa o ya n operesheni, ambapo kama orodha got kubwa zaidi, na kubwa zaidi, 299 00:15:10,140 --> 00:15:13,310 na kubwa zaidi, kutakuwa na kuwa zaidi na vigumu zaidi upepo kitu 300 00:15:13,310 --> 00:15:14,661 juu ya mwishoni. 301 00:15:14,661 --> 00:15:17,410 Lakini mara nyingi ni kweli rahisi upepo kitu juu mwanzoni, 302 00:15:17,410 --> 00:15:19,060 wewe daima katika mwanzo. 303 00:15:19,060 --> 00:15:21,620 >> Na tutaweza kuona Visual ya hii tena. 304 00:15:21,620 --> 00:15:24,100 Na kisha mara moja sisi ni kosa, kwa mara nyingine tumekuwa kuingizwa nodi mpya, 305 00:15:24,100 --> 00:15:26,880 tunataka kurudi pointer wetu mkuu mpya wa orodha wanaohusishwa, ambayo 306 00:15:26,880 --> 00:15:29,213 tangu sisi ni kuingiza katika mwanzo, kwa kweli kuwa 307 00:15:29,213 --> 00:15:31,060 pointer nodi sisi tu kuundwa. 308 00:15:31,060 --> 00:15:33,280 Hebu taswira hii, kwa sababu nadhani utakuwa msaada. 309 00:15:33,280 --> 00:15:36,661 >> Hivyo hapa ni orodha yetu, lina ya mambo manne, nodi zenye 15, 310 00:15:36,661 --> 00:15:38,410 ambayo inaelekeza katika nodi zenye 9, ambayo 311 00:15:38,410 --> 00:15:41,370 anazungumzia nodi zenye 13, ambayo inaelekeza katika nodi zenye 312 00:15:41,370 --> 00:15:44,840 10, ambayo ina null pointer kama pointer yake ya pili 313 00:15:44,840 --> 00:15:47,010 hivyo hiyo ni mwisho wa orodha. 314 00:15:47,010 --> 00:15:50,200 Hivyo tunataka kuingiza nodi mpya kwa thamani 12 315 00:15:50,200 --> 00:15:52,720 mwanzoni mwa hii orodha, tunafanya nini? 316 00:15:52,720 --> 00:15:58,770 Naam, kwanza sisi malloc nafasi kwa nodi, na kisha sisi kuweka 12 katika huko. 317 00:15:58,770 --> 00:16:02,211 >> Hivyo sasa tumekuwa kufikiwa uamuzi hatua, sawa? 318 00:16:02,211 --> 00:16:03,960 Sisi kuwa wanandoa wa kuyatumia kwamba tunaweza 319 00:16:03,960 --> 00:16:06,770 hoja, ambayo mtu anatakiwa sisi hoja ya kwanza? 320 00:16:06,770 --> 00:16:09,250 Tunapaswa kufanya 12 hatua kwa Mkuu mpya ya orodha 321 00:16:09,250 --> 00:16:13,020 au udhuru kwangu, tunapaswa kufanya 12 uhakika na kichwa wa zamani wa orodha? 322 00:16:13,020 --> 00:16:15,319 Au lazima sisi kusema kwamba orodha sasa huanza saa 12. 323 00:16:15,319 --> 00:16:17,110 Kuna tofauti huko, na tutaangalia 324 00:16:17,110 --> 00:16:19,870 nini kinatokea na wote katika pili. 325 00:16:19,870 --> 00:16:23,350 >> Lakini hii inaongoza kwa mada kuu kwa sidebar, 326 00:16:23,350 --> 00:16:26,280 ambayo ni kwamba moja ya mambo trickiest na orodha wanaohusishwa 327 00:16:26,280 --> 00:16:30,980 ni kupanga kuyatumia katika mpangilio sahihi. 328 00:16:30,980 --> 00:16:34,520 Kama hoja mambo nje ya utaratibu, unaweza kuishia ajali 329 00:16:34,520 --> 00:16:36,050 orphaning wengine wa orodha. 330 00:16:36,050 --> 00:16:37,300 Na hapa ni mfano wa jambo hilo. 331 00:16:37,300 --> 00:16:40,540 Basi hebu kwenda na wazo of-- vizuri, tumekuwa tu kuundwa 12. 332 00:16:40,540 --> 00:16:43,180 Tunajua 12 ni kwenda kuwa mkuu mpya wa orodha, 333 00:16:43,180 --> 00:16:47,660 na hivyo kwa nini sio sisi tu hoja orodha pointer kwa uhakika pale. 334 00:16:47,660 --> 00:16:49,070 >> OK, hivyo hiyo ni nzuri. 335 00:16:49,070 --> 00:16:51,560 Hivyo sasa wapi 12 hatua ya pili? 336 00:16:51,560 --> 00:16:54,580 I mean, kuibua tunaweza kuona kuwa ni uhakika na 15, 337 00:16:54,580 --> 00:16:57,250 kama binadamu ni kweli wazi kwetu. 338 00:16:57,250 --> 00:17:00,300 Ni kwa jinsi gani kompyuta kujua? 339 00:17:00,300 --> 00:17:02,720 Hatuna chochote akizungumzia 15 tena, sawa? 340 00:17:02,720 --> 00:17:05,869 >> Tumekuwa kupoteza uwezo wowote kwa kutaja 15. 341 00:17:05,869 --> 00:17:11,460 Hatuwezi kusema mshale mpya sawa ijayo kitu, kuna kitu huko. 342 00:17:11,460 --> 00:17:13,510 Kwa kweli, tumekuwa yatima mapumziko ya orodha 343 00:17:13,510 --> 00:17:16,465 kwa kufanya hivyo, tumekuwa ajali kuvunjwa mlolongo. 344 00:17:16,465 --> 00:17:18,089 Na sisi hakika hawataki kufanya hivyo. 345 00:17:18,089 --> 00:17:20,000 >> Basi hebu kwenda nyuma na kujaribu tena. 346 00:17:20,000 --> 00:17:24,060 Labda jambo la haki ya kufanya ni kuweka 12 ijayo pointer 347 00:17:24,060 --> 00:17:28,290 kwa kichwa wa zamani wa orodha ya kwanza, kisha tunaweza kusonga orodha zaidi. 348 00:17:28,290 --> 00:17:30,420 Na kwa kweli, kwamba ni mpangilio sahihi kwamba sisi 349 00:17:30,420 --> 00:17:32,836 haja ya kufuata wakati tuko kufanya kazi na orodha moja moja wanaohusishwa. 350 00:17:32,836 --> 00:17:36,460 Sisi siku zote wanataka kuungana kipengele mpya katika orodha, 351 00:17:36,460 --> 00:17:41,010 kabla ya sisi kuchukua aina hiyo ya hatua muhimu ya mabadiliko 352 00:17:41,010 --> 00:17:43,360 ambapo mkuu wa orodha wanaohusishwa ni. 353 00:17:43,360 --> 00:17:46,740 Tena, hiyo ni jambo kama hilo la msingi, hatutaki kupoteza wimbo wa hayo. 354 00:17:46,740 --> 00:17:49,310 >> Hivyo tunataka kuhakikisha kwamba kila kitu ni minyororo pamoja, 355 00:17:49,310 --> 00:17:52,040 kabla ya kuendelea kuwa pointer. 356 00:17:52,040 --> 00:17:55,300 Na hivyo hii itakuwa ni mpangilio sahihi, ambayo ni kuungana 12 kwa orodha, 357 00:17:55,300 --> 00:17:57,630 kisha kusema kwamba orodha kuanza 12. 358 00:17:57,630 --> 00:18:00,860 Kama sisi alisema orodha kuanza saa 12 na kisha walijaribu kuunganisha 12 kwa orodha, 359 00:18:00,860 --> 00:18:02,193 tumekuwa tayari kuona nini kinatokea. 360 00:18:02,193 --> 00:18:04,920 Tunapoteza orodha kwa makosa. 361 00:18:04,920 --> 00:18:06,740 >> OK, hivyo jambo moja zaidi ya kuzungumzia. 362 00:18:06,740 --> 00:18:09,750 Nini kama tunataka kujikwamua nzima wanaohusishwa orodha kwa mara moja? 363 00:18:09,750 --> 00:18:11,750 Tena, sisi ni mallocing nafasi yote haya, na hivyo sisi 364 00:18:11,750 --> 00:18:13,351 unahitaji huru ni wakati sisi ni kosa. 365 00:18:13,351 --> 00:18:15,350 Hivyo sasa tunataka kufuta nzima wanaohusishwa orodha. 366 00:18:15,350 --> 00:18:16,850 Naam, je, tunataka kufanya? 367 00:18:16,850 --> 00:18:20,460 >> Kama tumekuwa kufikiwa pointer null, sisi unataka kuacha, vinginevyo, tu kufuta 368 00:18:20,460 --> 00:18:23,420 wengine wa orodha na kisha bure me. 369 00:18:23,420 --> 00:18:28,890 Kufuta wengine wa orodha, na kisha bure nodi ya sasa. 370 00:18:28,890 --> 00:18:32,850 Je kwamba sauti kama, nini mbinu na sisi aliyesema 371 00:18:32,850 --> 00:18:35,440 kuhusu awali gani kwamba sauti kama? 372 00:18:35,440 --> 00:18:39,560 Kufuta kila mtu mwingine, basi kurudi na kufuta yangu. 373 00:18:39,560 --> 00:18:42,380 >> Hiyo ni kujirudia, tumekuwa alifanya Tatizo kidogo kidogo, 374 00:18:42,380 --> 00:18:46,910 sisi ni kusema kila mtu kufuta kingine, basi unaweza kufuta yangu. 375 00:18:46,910 --> 00:18:50,940 Na zaidi chini ya barabara, kwamba nodi watasema, kufuta kila mtu mwingine. 376 00:18:50,940 --> 00:18:53,940 Lakini hatimaye tutaweza kupata mahali ambapo orodha ni null, 377 00:18:53,940 --> 00:18:55,310 na kwamba msingi wetu kesi. 378 00:18:55,310 --> 00:18:57,010 >> Basi hebu tuangalie hii, na jinsi hii inaweza kufanya kazi. 379 00:18:57,010 --> 00:18:59,759 Hivyo hapa ni orodha yetu, ni sawa orodha tulikuwa tu kuzungumza juu, 380 00:18:59,759 --> 00:19:00,980 na kuna hatua. 381 00:19:00,980 --> 00:19:04,200 Kuna mengi ya maandishi hapa, lakini hopefully taswira itasaidia. 382 00:19:04,200 --> 00:19:08,557 >> Hivyo sisi have-- na mimi pia vunjwa up yetu muafaka stack mfano 383 00:19:08,557 --> 00:19:10,890 kutoka sehemu yetu juu ya wito mwingi, na pengine yote haya 384 00:19:10,890 --> 00:19:13,260 pamoja kuonyesha nini kinaendelea. 385 00:19:13,260 --> 00:19:14,510 Hivyo hapa ni pseudocode kanuni zetu. 386 00:19:14,510 --> 00:19:17,830 Kama sisi kufikia null pointer, kuacha, vinginevyo, 387 00:19:17,830 --> 00:19:21,320 kufuta wengine wa orodha, kisha bure nodi ya sasa. 388 00:19:21,320 --> 00:19:25,700 Hivyo sasa hivi, list-- pointer kwamba tuko 389 00:19:25,700 --> 00:19:28,410 kupita katika kuharibu pointi 12. 390 00:19:28,410 --> 00:19:33,340 12 si pointer null, hivyo sisi ni kwenda kufuta wengine wa orodha. 391 00:19:33,340 --> 00:19:35,450 >> Kile ni kufuta sisi wengine waliohusika? 392 00:19:35,450 --> 00:19:37,950 Vizuri, ina maana kufanya piga kuharibu, akisema 393 00:19:37,950 --> 00:19:42,060 kuwa 15 ni mwanzo wa mapumziko ya orodha tunataka kuharibu. 394 00:19:42,060 --> 00:19:47,480 Na hivyo wito kuharibu 12 ni aina ya juu ya umiliki. 395 00:19:47,480 --> 00:19:52,690 Ni waliohifadhiwa huko, kusubiri kwa piga kuharibu 15, na kumaliza kazi yake. 396 00:19:52,690 --> 00:19:56,280 >> Naam, 15 si pointer null, na hivyo ni kwenda kusema, sawa, 397 00:19:56,280 --> 00:19:58,450 vizuri, kufuta wengine wa orodha. 398 00:19:58,450 --> 00:20:00,760 Mapumziko ya orodha kuanza saa 9, na hivyo tutaweza tu 399 00:20:00,760 --> 00:20:04,514 kusubiri mpaka kufuta yote mambo, kisha kurudi na kufuta yangu. 400 00:20:04,514 --> 00:20:06,680 Naam 9 kwenda kusema, vizuri, Sina pointer null, 401 00:20:06,680 --> 00:20:09,020 hivyo kufuta wengine orodha kutoka hapa. 402 00:20:09,020 --> 00:20:11,805 Na hivyo kujaribu na kuharibu 13. 403 00:20:11,805 --> 00:20:15,550 13 anasema, mimi si pointer null, kitu kimoja, unapita mume. 404 00:20:15,550 --> 00:20:17,930 10 si pointer null, 10 ina pointer null, 405 00:20:17,930 --> 00:20:20,200 lakini 10 si yenyewe null pointer sasa hivi, 406 00:20:20,200 --> 00:20:22,470 na hivyo unapita mume pia. 407 00:20:22,470 --> 00:20:25,560 >> Na sasa orodha pointi huko, kweli ingekuwa uhakika na some-- 408 00:20:25,560 --> 00:20:28,710 kama ningekuwa na nafasi zaidi katika picha, ingekuwa uhakika na baadhi ya nafasi random 409 00:20:28,710 --> 00:20:29,960 kwamba hatujui ni nini. 410 00:20:29,960 --> 00:20:34,680 Ni pointer null ingawa, orodha ni halisi sasa kuweka ni maadili null. 411 00:20:34,680 --> 00:20:36,820 Ni akizungumzia haki ndani ya kwamba sanduku nyekundu. 412 00:20:36,820 --> 00:20:39,960 Sisi kufikiwa pointer null, hivyo tunaweza kuacha, na sisi ni kosa. 413 00:20:39,960 --> 00:20:46,230 >> Na hivyo sura kwamba zambarau ni now-- katika juu ya stack-- hiyo ni sura ya kazi, 414 00:20:46,230 --> 00:20:47,017 lakini ni kosa. 415 00:20:47,017 --> 00:20:48,600 Kama tumekuwa kufikiwa pointer null, kuacha. 416 00:20:48,600 --> 00:20:51,290 Hatuwezi kufanya kitu chochote, sisi Huwezi bure pointer null, 417 00:20:51,290 --> 00:20:55,070 hatukuwa malloc yoyote nafasi, na hivyo sisi ni kosa. 418 00:20:55,070 --> 00:20:57,590 Hivyo kwamba sura kazi ni kuharibiwa, na sisi 419 00:20:57,590 --> 00:21:00,930 resume-- sisi kuchukua ambapo sisi kushoto mbali na ujao juu moja, ambayo 420 00:21:00,930 --> 00:21:02,807 ni hii rangi ya bluu sura hapa. 421 00:21:02,807 --> 00:21:04,390 Kwa hiyo sisi kuchukua haki ambapo sisi kushoto mbali. 422 00:21:04,390 --> 00:21:06,598 Sisi kufutwa mapumziko ya orodha tayari, hivyo sasa tuko 423 00:21:06,598 --> 00:21:08,000 kwenda bure nodes sasa. 424 00:21:08,000 --> 00:21:12,920 Hivyo sasa tunaweza bure nodi hii, na sasa tumekuwa kufikiwa mwisho wa kazi. 425 00:21:12,920 --> 00:21:16,810 Na hivyo kuwa sura kazi ni kuharibiwa, na sisi kuchukua katika mwanga wa bluu moja. 426 00:21:16,810 --> 00:21:20,650 >> Hivyo ni says-- nimekuwa tayari done-- kufuta wengine wa orodha, hivyo 427 00:21:20,650 --> 00:21:23,140 bure nodi ya sasa. 428 00:21:23,140 --> 00:21:26,520 Na sasa sura ya njano ni nyuma juu ya stack. 429 00:21:26,520 --> 00:21:29,655 Na hivyo kama unaweza kuona, sisi ni sasa kuharibu orodha kutoka kulia kwenda kushoto. 430 00:21:29,655 --> 00:21:33,710 431 00:21:33,710 --> 00:21:37,280 >> Nini kingetokea, ingawa, kama sisi alikuwa amefanya mambo kwa njia sahihi? 432 00:21:37,280 --> 00:21:39,410 Tu kama wakati sisi walijaribu kuongeza kipengele. 433 00:21:39,410 --> 00:21:41,909 Kama sisi messed up mlolongo, kama hatukuwa kuungana kuyatumia 434 00:21:41,909 --> 00:21:44,690 katika mpangilio sahihi, kama sisi tu huru kipengele kwanza, 435 00:21:44,690 --> 00:21:47,420 kama sisi tu huru mkuu wa orodha, sasa sisi 436 00:21:47,420 --> 00:21:49,642 hawana njia ya kutaja wengine wa orodha. 437 00:21:49,642 --> 00:21:51,350 Na hivyo tunataka kuwa yatima kila kitu, 438 00:21:51,350 --> 00:21:53,880 tungekuwa na nini aitwaye kumbukumbu kuvuja. 439 00:21:53,880 --> 00:21:56,800 Kama unakumbuka kutoka sehemu yetu juu ya mgao wa nguvu kumbukumbu, 440 00:21:56,800 --> 00:21:58,650 si kwamba ni jambo jema sana. 441 00:21:58,650 --> 00:22:00,810 >> Hivyo kama nilivyosema, kuna ni shughuli kadhaa 442 00:22:00,810 --> 00:22:04,010 kuwa tunahitaji kutumia kufanya kazi kwa wanaohusishwa orodha kwa ufanisi. 443 00:22:04,010 --> 00:22:08,430 Na unaweza kuwa niliona mimi liliondolewa moja, kufuta kipengele moja kutoka wanaohusishwa 444 00:22:08,430 --> 00:22:09,064 orodha. 445 00:22:09,064 --> 00:22:10,980 Sababu mimi kwamba ni ni kweli aina ya 446 00:22:10,980 --> 00:22:14,360 gumu kufikiri kuhusu jinsi ya kufuta kipengele moja kutoka moja moja 447 00:22:14,360 --> 00:22:15,600 wanaohusishwa orodha. 448 00:22:15,600 --> 00:22:19,950 Tunahitaji kuwa na uwezo wa ruka juu kitu katika orodha, ambayo 449 00:22:19,950 --> 00:22:22,975 ina maana sisi kupata point-- sisi unataka kufuta node-- hii 450 00:22:22,975 --> 00:22:25,350 lakini ili kufanya hivyo sisi si kupoteza taarifa yoyote, 451 00:22:25,350 --> 00:22:30,530 tunahitaji kuungana huu nodi hapa, hapa. 452 00:22:30,530 --> 00:22:33,390 >> Hivyo mimi pengine alifanya hivyo vibaya kutokana na mtazamo Visual. 453 00:22:33,390 --> 00:22:36,830 Hivyo sisi ni mwanzoni mwa yetu orodha, sisi ni kuendelea kupitia, 454 00:22:36,830 --> 00:22:40,510 tunataka kufuta nodi hii. 455 00:22:40,510 --> 00:22:43,440 Kama sisi tu kufuta, tumekuwa kuvunjwa mlolongo. 456 00:22:43,440 --> 00:22:45,950 Nodi hii hapa hapa inahusu kila kitu kingine, 457 00:22:45,950 --> 00:22:48,260 ina mlolongo kutoka hapa juu ya nje. 458 00:22:48,260 --> 00:22:51,190 >> Kwa hiyo kile tunahitaji kufanya kweli baada ya sisi kupata hatua hii, 459 00:22:51,190 --> 00:22:56,670 ni tunahitaji kurudi nyuma moja, na kuungana nodi hii juu ya nodi hii, 460 00:22:56,670 --> 00:22:58,590 ili tuweze kisha kufuta moja katikati. 461 00:22:58,590 --> 00:23:02,120 Lakini orodha moja moja wanaohusishwa hawana kutupatia njia ya kwenda nyuma. 462 00:23:02,120 --> 00:23:05,160 Kwa hiyo, tunahitaji ama kuweka kuyatumia mbili, na hoja yao 463 00:23:05,160 --> 00:23:09,527 aina ya hatua mbali, moja nyuma ya wengine kama sisi kwenda, au kupata kwa uhakika 464 00:23:09,527 --> 00:23:11,110 na kisha kutuma pointer mwingine kwa njia ya. 465 00:23:11,110 --> 00:23:13,150 Na kama unaweza kuona, ni wanaweza kupata messy kidogo. 466 00:23:13,150 --> 00:23:15,360 Kwa bahati nzuri, tuna njia nyingine ya kutatua kwamba, 467 00:23:15,360 --> 00:23:17,810 wakati sisi majadiliano juu ya orodha doubly wanaohusishwa. 468 00:23:17,810 --> 00:23:20,720 >> Mimi nina Doug Lloyd, hii ni CS50. 469 00:23:20,720 --> 00:23:22,298