1 00:00:07,260 --> 00:00:10,050 [Powered by Google Translate] Katika programu, sisi mara nyingi haja ya kuwakilisha orodha ya maadili, 2 00:00:10,050 --> 00:00:12,840 kama vile majina ya wanafunzi katika sehemu 3 00:00:12,840 --> 00:00:15,100 au alama zao juu ya chemsha bongo karibuni. 4 00:00:15,100 --> 00:00:17,430 >> Katika lugha ya C, alitangaza arrays inaweza kutumika 5 00:00:17,430 --> 00:00:19,160 kuhifadhi orodha. 6 00:00:19,160 --> 00:00:21,200 Ni rahisi enumerate mambo ya orodha 7 00:00:21,200 --> 00:00:23,390 kuhifadhiwa katika safu, na kama unahitaji kupata 8 00:00:23,390 --> 00:00:25,050 au kurekebisha idh orodha ya kipengele 9 00:00:25,050 --> 00:00:27,570 kwa baadhi index holela mimi, 10 00:00:27,570 --> 00:00:29,910 ambayo yanaweza kufanyika katika muda wa mara kwa mara, 11 00:00:29,910 --> 00:00:31,660 lakini arrays na hasara, pia. 12 00:00:31,660 --> 00:00:33,850 >> Wakati sisi kutangaza yao, sisi ni required kusema 13 00:00:33,850 --> 00:00:35,900 juu mbele jinsi kubwa wao ni, 14 00:00:35,900 --> 00:00:38,160 kwamba ni, jinsi wengi vipengele kwani inaweza kuhifadhi 15 00:00:38,160 --> 00:00:40,780 na jinsi kubwa haya mambo ni, ambayo ni kuamua na aina yao. 16 00:00:40,780 --> 00:00:45,450 Kwa mfano, int arr (10) 17 00:00:45,450 --> 00:00:48,220 unaweza kuhifadhi vitu 10 18 00:00:48,220 --> 00:00:50,200 kwamba ni ukubwa wa int. 19 00:00:50,200 --> 00:00:52,590 >> Hatuwezi kubadilisha ukubwa safu baada ya tamko. 20 00:00:52,590 --> 00:00:55,290 Tuna kufanya safu mpya kama tunataka kuhifadhi vipengele zaidi. 21 00:00:55,290 --> 00:00:57,410 sababu kiwango cha juu hii ni kwamba ipo wetu 22 00:00:57,410 --> 00:00:59,040 mpango maduka safu nzima 23 00:00:59,040 --> 00:01:02,310 kama chunk contiguous ya kumbukumbu. 24 00:01:02,310 --> 00:01:04,500 Sema hii ni buffer ambapo sisi kuhifadhiwa katika safu yetu. 25 00:01:04,500 --> 00:01:06,910 Kunaweza kuwa na vigezo vingine 26 00:01:06,910 --> 00:01:08,310 iko haki ya karibu na safu 27 00:01:08,310 --> 00:01:10,060 katika kumbukumbu, hivyo hatuwezi 28 00:01:10,060 --> 00:01:12,060 tu kufanya safu kubwa. 29 00:01:12,060 --> 00:01:15,700 >> Wakati mwingine tunatarajia biashara safu ya data haraka upatikanaji kasi 30 00:01:15,700 --> 00:01:17,650 kwa kubadilika kidogo zaidi. 31 00:01:17,650 --> 00:01:20,380 Weka orodha wanaohusishwa, mwingine msingi data muundo 32 00:01:20,380 --> 00:01:22,360 unaweza kuwa kama ukoo na. 33 00:01:22,360 --> 00:01:24,200 Katika ngazi ya juu, 34 00:01:24,200 --> 00:01:26,840 orodha wanaohusishwa maduka data katika mlolongo wa nodi 35 00:01:26,840 --> 00:01:29,280 kwamba ni kushikamana na kila mmoja kwa viungo, 36 00:01:29,280 --> 00:01:31,760 hivyo jina 'wanaohusishwa orodha.' 37 00:01:31,760 --> 00:01:33,840 Kama tutaweza kuona, tofauti hii katika kubuni 38 00:01:33,840 --> 00:01:35,500 inaongoza kwa faida tofauti na hasara 39 00:01:35,500 --> 00:01:37,000 kuliko safu. 40 00:01:37,000 --> 00:01:39,840 >> Hapa ni baadhi ya kanuni C kwa orodha rahisi sana wanaohusishwa ya integers. 41 00:01:39,840 --> 00:01:42,190 Unaweza kuona kwamba tuna kuwakilishwa kila nodi 42 00:01:42,190 --> 00:01:45,520 katika orodha kama struct ambayo ina mambo 2, 43 00:01:45,520 --> 00:01:47,280 integer kuhifadhi iitwayo 'Val' 44 00:01:47,280 --> 00:01:50,460 na kiungo na nodi ijayo katika orodha 45 00:01:50,460 --> 00:01:52,990 ambayo sisi kuwakilisha kama pointer iitwayo 'ijayo.' 46 00:01:54,120 --> 00:01:56,780 Kwa njia hii, tunaweza kufuatilia orodha nzima 47 00:01:56,780 --> 00:01:58,790 na tu pointer moja na nodi ya 1, 48 00:01:58,790 --> 00:02:01,270 na kisha tunaweza kufuata kuyatumia ijayo 49 00:02:01,270 --> 00:02:03,130 na nodi ya 2, 50 00:02:03,130 --> 00:02:05,280 na nodi ya 3, 51 00:02:05,280 --> 00:02:07,000 na nodi ya 4, 52 00:02:07,000 --> 00:02:09,889 na kadhalika, mpaka sisi kupata mwisho wa orodha. 53 00:02:10,520 --> 00:02:12,210 >> Unaweza kuwa na uwezo wa kuona 1 faida hii ina 54 00:02:12,210 --> 00:02:14,490 juu ya muundo tuli safu - na orodha wanaohusishwa, 55 00:02:14,490 --> 00:02:16,450 hatuhitaji chunk kubwa ya kumbukumbu kabisa. 56 00:02:17,400 --> 00:02:20,530 Nodi 1 ya orodha anaweza kuishi katika eneo hili katika kumbukumbu, 57 00:02:20,530 --> 00:02:23,160 na node ya 2 inaweza kuwa njia yote juu hapa. 58 00:02:23,160 --> 00:02:25,780 Tunaweza kupata nodes wote bila kujali ambapo katika kumbukumbu wao, 59 00:02:25,780 --> 00:02:28,890 kwa sababu kuanzia saa 1 nodi, kila nodi ya pointer ijayo 60 00:02:28,890 --> 00:02:31,700 inatuambia hasa ambapo kwenda ijayo. 61 00:02:31,700 --> 00:02:33,670 >> Zaidi ya hayo, hatuna kusema juu mbele 62 00:02:33,670 --> 00:02:36,740 jinsi kubwa orodha wanaohusishwa itakuwa njia sisi kufanya na arrays tuli, 63 00:02:36,740 --> 00:02:39,060 tangu tunaweza kuendelea kuongeza vitengo na orodha 64 00:02:39,060 --> 00:02:42,600 muda mrefu kama kuna nafasi mahali fulani katika kumbukumbu kwa nodes mpya. 65 00:02:42,600 --> 00:02:45,370 Kwa hiyo, orodha zilizounganishwa ni rahisi resize dynamically. 66 00:02:45,370 --> 00:02:47,950 Sema, baadaye katika mpango tunahitaji kuongeza nodes zaidi 67 00:02:47,950 --> 00:02:49,350 katika orodha yetu. 68 00:02:49,350 --> 00:02:51,480 Insert nodi mpya katika orodha yetu juu ya kuruka, 69 00:02:51,480 --> 00:02:53,740 wote sisi kufanya ni kutenga kumbukumbu kwa nodi kwamba, 70 00:02:53,740 --> 00:02:55,630 plop katika thamani data, 71 00:02:55,630 --> 00:02:59,070 na kisha kuiweka ambapo tunataka kwa kurekebisha kuyatumia mwafaka. 72 00:02:59,070 --> 00:03:02,310 >> Kwa mfano, kama sisi akataka kuweka nodi katika kati ya 73 00:03:02,310 --> 00:03:04,020 Nodes 2 na 3 ya orodha, 74 00:03:04,020 --> 00:03:06,800  tunataka kuwa na hoja nodes 2 au 3 wakati wote. 75 00:03:06,800 --> 00:03:09,190 Sema tuko inserting hii nodi nyekundu. 76 00:03:09,190 --> 00:03:12,890 Wote tunatarajia kufanya ni kuweka nodi mpya ijayo pointer 77 00:03:12,890 --> 00:03:14,870 kwa uhakika na nodi 3 78 00:03:14,870 --> 00:03:18,580 na kisha rewire nodi 2 ijayo pointer 79 00:03:18,580 --> 00:03:20,980 kwa uhakika na nodi wetu mpya. 80 00:03:22,340 --> 00:03:24,370 Hivyo, tunaweza resize orodha yetu juu ya kuruka 81 00:03:24,370 --> 00:03:26,090 tangu kompyuta yetu haina kutegemea Indexing, 82 00:03:26,090 --> 00:03:28,990 lakini badala ya kuunganisha kwa kutumia kuyatumia na kuhifadhi yao. 83 00:03:29,120 --> 00:03:31,600 >> Hata hivyo, hasara ya wanaohusishwa orodha 84 00:03:31,600 --> 00:03:33,370 ni kwamba, tofauti na safu tuli, 85 00:03:33,370 --> 00:03:36,690 kompyuta hawezi tu Rukia katikati ya orodha. 86 00:03:38,040 --> 00:03:40,780 Tangu kompyuta ina kutembelea kila nodi katika orodha wanaohusishwa 87 00:03:40,780 --> 00:03:42,330 kupata moja ijayo, 88 00:03:42,330 --> 00:03:44,770 itakavyo kuchukua muda mrefu kupata nodi fulani 89 00:03:44,770 --> 00:03:46,400 kuliko ingekuwa katika safu. 90 00:03:46,400 --> 00:03:48,660 Ili traverse orodha nzima inachukua muda sawia 91 00:03:48,660 --> 00:03:50,580 kwa urefu wa orodha, 92 00:03:50,580 --> 00:03:54,630 au O (n) katika nukuu asymptotic. 93 00:03:54,630 --> 00:03:56,510 Kwa wastani, na kufikia yoyote nodi 94 00:03:56,510 --> 00:03:58,800 Pia inachukua muda sawia na n. 95 00:03:58,800 --> 00:04:00,700 >> Sasa, hebu kweli kuandika baadhi ya kanuni 96 00:04:00,700 --> 00:04:02,000 kwamba kazi na orodha zinazoungwa. 97 00:04:02,000 --> 00:04:04,220 Hebu sema tunataka orodha ya wanaohusishwa integers. 98 00:04:04,220 --> 00:04:06,140 Tunaweza kuwakilisha nodi katika orodha yetu tena 99 00:04:06,140 --> 00:04:08,340 kama struct pamoja na mashamba ya 2, 100 00:04:08,340 --> 00:04:10,750 thamani integer iitwayo 'Val' 101 00:04:10,750 --> 00:04:13,490 na pointer ijayo na nodi ijayo ya orodha. 102 00:04:13,490 --> 00:04:15,660 Naam, inaonekana rahisi kutosha. 103 00:04:15,660 --> 00:04:17,220 >> Hebu sema tunataka kuandika kazi 104 00:04:17,220 --> 00:04:19,329 ambayo yanapopita orodha prints na nje 105 00:04:19,329 --> 00:04:22,150 thamani kuhifadhiwa katika nodi mwisho wa orodha. 106 00:04:22,150 --> 00:04:24,850 Naam, hiyo ina maana sisi itabidi traverse nodes wote katika orodha 107 00:04:24,850 --> 00:04:27,310 kupata moja ya mwisho, lakini tangu sisi siyo kuongeza 108 00:04:27,310 --> 00:04:29,250 au kufuta chochote, hatutaki kubadili 109 00:04:29,250 --> 00:04:32,210 muundo wa ndani ya kuyatumia ijayo katika orodha. 110 00:04:32,210 --> 00:04:34,790 >> Hivyo, sisi itabidi pointer mahsusi kwa ajili ya traversal 111 00:04:34,790 --> 00:04:36,940 ambayo tutaweza kuwaita 'crawler.' 112 00:04:36,940 --> 00:04:38,870 Itakuwa kutambaa kupitia mambo yote ya orodha 113 00:04:38,870 --> 00:04:41,190 kwa kufuata mlolongo wa kuyatumia ijayo. 114 00:04:41,190 --> 00:04:43,750 Wote tuna kuhifadhiwa ni pointer nodi 1, 115 00:04:43,750 --> 00:04:45,730 au 'kichwa' cha orodha. 116 00:04:45,730 --> 00:04:47,370 Kichwa pointi na nodi ya 1. 117 00:04:47,370 --> 00:04:49,120 Ni aina ya pointer-kwa-nodi. 118 00:04:49,120 --> 00:04:51,280 >> Ili kupata halisi 1 nodi katika orodha, 119 00:04:51,280 --> 00:04:53,250 tuna dereference hii pointer, 120 00:04:53,250 --> 00:04:55,100 lakini kabla tunaweza dereference hiyo, tunahitaji kuangalia 121 00:04:55,100 --> 00:04:57,180 ikiwa ni pointer null kwanza. 122 00:04:57,180 --> 00:04:59,190 Kama ni null, orodha ni tupu, 123 00:04:59,190 --> 00:05:01,320 na sisi lazima magazeti ujumbe kwamba, kwa sababu orodha ni tupu, 124 00:05:01,320 --> 00:05:03,250 hakuna nodi mwisho. 125 00:05:03,250 --> 00:05:05,190 Lakini, hebu sema orodha si tupu. 126 00:05:05,190 --> 00:05:08,340 Kama siyo, basi tunapaswa kutambaa kupitia orodha nzima 127 00:05:08,340 --> 00:05:10,440 mpaka sisi kupata nodi mwisho wa orodha, 128 00:05:10,440 --> 00:05:13,030 na jinsi gani tunaweza kujua kama sisi ni kuangalia kwenye nodi mwisho katika orodha? 129 00:05:13,670 --> 00:05:16,660 >> Naam, kama nodi ya pointer ijayo ni null, 130 00:05:16,660 --> 00:05:18,320 tunajua tuko mwishoni 131 00:05:18,320 --> 00:05:22,390 tangu mwisho pointer ijayo ingekuwa hakuna nodi ijayo katika orodha kwa uhakika na. 132 00:05:22,390 --> 00:05:26,590 Ni vizuri mazoezi ya daima kuweka nodi mwisho ijayo pointer initialized kwa null 133 00:05:26,590 --> 00:05:30,800 kuwa na mali sanifu ambayo alerts yetu wakati sisi Umefikia mwisho wa orodha. 134 00:05:30,800 --> 00:05:33,510 >> Hivyo, kama crawler → ijayo ni null, 135 00:05:34,120 --> 00:05:38,270 kukumbuka kwamba syntax mshale ni njia ya mkato kwa dereferencing 136 00:05:38,270 --> 00:05:40,010 pointer struct, kisha kupata 137 00:05:40,010 --> 00:05:42,510 uwanja wake ijayo sawa na Awkward: 138 00:05:42,510 --> 00:05:48,750 (* Crawler) ijayo.. 139 00:05:49,820 --> 00:05:51,260 Mara sisi Nimepata nodi ya mwisho, 140 00:05:51,260 --> 00:05:53,830 tunataka magazeti crawler → Val, 141 00:05:53,830 --> 00:05:55,000 thamani katika nodi sasa 142 00:05:55,000 --> 00:05:57,130 ambayo sisi kujua ni moja ya mwisho. 143 00:05:57,130 --> 00:05:59,740 Vinginevyo, kama sisi ni bado nodi katika mwisho katika orodha, 144 00:05:59,740 --> 00:06:02,340 tuna kuhamia kwenye nodi ijayo katika orodha 145 00:06:02,340 --> 00:06:04,750 na kuangalia kama hiyo ni moja ya mwisho. 146 00:06:04,750 --> 00:06:07,010 Ili kufanya hivyo, sisi tu kuweka crawler wetu pointer 147 00:06:07,010 --> 00:06:09,840 kwa uhakika na thamani ya sasa ya nodi ijayo, 148 00:06:09,840 --> 00:06:11,680 kwamba ni, nodi ijayo katika orodha. 149 00:06:11,680 --> 00:06:13,030 Hii ni kufanyika kwa kuweka 150 00:06:13,030 --> 00:06:15,280 crawler = crawler → ijayo. 151 00:06:16,050 --> 00:06:18,960 Kisha sisi kurudia utaratibu huu, kwa kitanzi kwa mfano, 152 00:06:18,960 --> 00:06:20,960 mpaka tunapata nodi mwisho. 153 00:06:20,960 --> 00:06:23,150 Hivyo, kwa mfano, kama crawler alikuwa akizungumzia kichwa, 154 00:06:24,050 --> 00:06:27,710 sisi kuweka crawler kwa uhakika na crawler → ijayo, 155 00:06:27,710 --> 00:06:30,960 ambayo ni sawa na shamba ya pili ya nodi 1. 156 00:06:30,960 --> 00:06:33,620 Hivyo, sasa crawler yetu ni akizungumzia nodi 2, 157 00:06:33,620 --> 00:06:35,480 na tena, sisi kurudia hili na kitanzi, 158 00:06:37,220 --> 00:06:40,610 mpaka tumekuwa kupatikana nodi ya mwisho, yaani, 159 00:06:40,610 --> 00:06:43,640 ambapo nodi ya pointer ijayo ni akizungumzia null. 160 00:06:43,640 --> 00:06:45,070 Na kuna sisi kuwa nayo, 161 00:06:45,070 --> 00:06:47,620 tumekuwa kupatikana nodi mwisho katika orodha, na magazeti ya thamani yake, 162 00:06:47,620 --> 00:06:50,800 sisi tu kutumia crawler → Val. 163 00:06:50,800 --> 00:06:53,130 >> Traversing si mbaya, lakini nini kuhusu inserting? 164 00:06:53,130 --> 00:06:56,290 Inakuwezesha kusema tunataka Insert integer katika nafasi 4 165 00:06:56,290 --> 00:06:58,040 katika orodha integer. 166 00:06:58,040 --> 00:07:01,280 Hiyo ni kati ya pingili sasa 3 na 4. 167 00:07:01,280 --> 00:07:03,760 Tena, tuna traverse orodha tu kwa 168 00:07:03,760 --> 00:07:06,520 kupata kipengele 3, moja baada ya sisi ni kuingiza. 169 00:07:06,520 --> 00:07:09,300 Hivyo, sisi kujenga pointer crawler tena traverse orodha, 170 00:07:09,300 --> 00:07:11,400 kuangalia kama kichwa wetu pointer ni null, 171 00:07:11,400 --> 00:07:14,810 na kama si, elekezeni crawler wetu pointer nodi katika kichwa. 172 00:07:16,880 --> 00:07:18,060 Hivyo, sisi ni saa ya kipengele 1. 173 00:07:18,060 --> 00:07:21,020 Tuna kwenda mbele 2 vipengele zaidi kabla tunaweza kuingiza, 174 00:07:21,020 --> 00:07:23,390 ili tuweze kutumia kwa kitanzi 175 00:07:23,390 --> 00:07:26,430 int i = 1; i <3; i + + 176 00:07:26,430 --> 00:07:28,590 na katika kila iteration ya kitanzi, 177 00:07:28,590 --> 00:07:31,540 kuendeleza crawler wetu pointer mbele na nodi 1 178 00:07:31,540 --> 00:07:34,570 kwa kuangalia kama nodi ya sasa ya uwanja ijayo ni null, 179 00:07:34,570 --> 00:07:37,550 na kama si, hoja crawler wetu pointer nodi ijayo 180 00:07:37,550 --> 00:07:41,810 kwa kuweka ni sawa na pointer nodi ya sasa ijayo. 181 00:07:41,810 --> 00:07:45,210 Hivyo, tangu kitanzi yetu kwa kufanya anasema kwamba 182 00:07:45,210 --> 00:07:47,550 mara mbili, 183 00:07:49,610 --> 00:07:51,190 tumekuwa kufikiwa nodi 3, 184 00:07:51,190 --> 00:07:53,110 na mara moja crawler wetu pointer umefikia nodi baada ya 185 00:07:53,110 --> 00:07:55,270 ambayo tunataka Insert integer wetu mpya, 186 00:07:55,270 --> 00:07:57,050 jinsi gani sisi kwa kweli inserting? 187 00:07:57,050 --> 00:07:59,440 >> Naam, integer wetu mpya ina kuwa na kuingizwa katika orodha 188 00:07:59,440 --> 00:08:01,250 kama sehemu ya struct yake mwenyewe nodi, 189 00:08:01,250 --> 00:08:03,140 tangu hii ni kweli mlolongo wa mikutano ya nodi. 190 00:08:03,140 --> 00:08:05,690 Hivyo, wacha kufanya pointer mpya na nodi 191 00:08:05,690 --> 00:08:08,910 iitwayo 'new_node,' 192 00:08:08,910 --> 00:08:11,800 na kuliweka kwa uhakika na kumbukumbu kwamba sisi sasa kutenga 193 00:08:11,800 --> 00:08:14,270 juu ya magofu nodi yenyewe, 194 00:08:14,270 --> 00:08:16,000 na kiasi gani kumbukumbu tunahitaji kutenga? 195 00:08:16,000 --> 00:08:18,250 Naam, na ukubwa wa nodi, 196 00:08:20,450 --> 00:08:23,410 na tunataka kuweka Val yake shamba kwa integer kwamba tunataka Insert. 197 00:08:23,410 --> 00:08:25,590 Hebu sema, 6. 198 00:08:25,590 --> 00:08:27,710 Sasa, nodi ina thamani yetu integer. 199 00:08:27,710 --> 00:08:30,650 Ni vizuri pia mazoezi initialize nodi mpya ijayo shamba 200 00:08:30,650 --> 00:08:33,690 na kumweka kwa null, 201 00:08:33,690 --> 00:08:35,080 lakini sasa nini? 202 00:08:35,080 --> 00:08:37,179 >> Sisi kuwa na mabadiliko ya muundo wa ndani wa orodha 203 00:08:37,179 --> 00:08:40,409 na kuyatumia ijayo zilizomo katika orodha ya zilizopo 204 00:08:40,409 --> 00:08:42,950 3 na 4 nodi. 205 00:08:42,950 --> 00:08:46,560 Tangu kuyatumia ijayo kuamua utaratibu wa orodha, 206 00:08:46,560 --> 00:08:48,650 na tangu tuko inserting nodi wetu mpya 207 00:08:48,650 --> 00:08:50,510 haki ndani ya katikati ya orodha, 208 00:08:50,510 --> 00:08:52,010 inaweza kuwa kidogo Tricky. 209 00:08:52,010 --> 00:08:54,250 Hii ni kwa sababu, kumbuka, kompyuta yetu 210 00:08:54,250 --> 00:08:56,250 tu anajua mahali ya nodes katika orodha 211 00:08:56,250 --> 00:09:00,400 kwa sababu ya kuyatumia ijayo kuhifadhiwa katika nodes uliopita. 212 00:09:00,400 --> 00:09:03,940 Hivyo, kama sisi milele waliopotea track ya yoyote ya maeneo haya, 213 00:09:03,940 --> 00:09:06,860 kusema kwa kubadilisha moja ya kuyatumia ijayo katika orodha yetu, 214 00:09:06,860 --> 00:09:09,880 kwa mfano, wanasema sisi iliyopita 215 00:09:09,880 --> 00:09:12,920 Nodi 3 ijayo shamba 216 00:09:12,920 --> 00:09:15,610 kwa uhakika na baadhi nodi zaidi ya hapa. 217 00:09:15,610 --> 00:09:17,920 Tunatarajia kuwa nje ya bahati, kwa sababu sisi hakutaka 218 00:09:17,920 --> 00:09:20,940 kuwa na wazo lolote ambapo kupata mapumziko ya orodha, 219 00:09:20,940 --> 00:09:23,070 na kwamba ni wazi mbaya kweli kweli. 220 00:09:23,070 --> 00:09:25,080 Hivyo, sisi kuwa makini juu ya kweli ili 221 00:09:25,080 --> 00:09:28,360 ambayo sisi kuendesha yetu kuyatumia ijayo wakati wa kuingizwa. 222 00:09:28,360 --> 00:09:30,540 >> Hivyo, ili kurahisisha hii, hebu kusema kwamba 223 00:09:30,540 --> 00:09:32,220 4 wetu wa kwanza nodes 224 00:09:32,220 --> 00:09:36,200 wanaitwa, B, C, na D, na mishale anayewakilisha mlolongo wa kuyatumia 225 00:09:36,200 --> 00:09:38,070 kwamba kuungana nodi. 226 00:09:38,070 --> 00:09:40,050 Hivyo, tunahitaji kuingiza nodi wetu mpya 227 00:09:40,050 --> 00:09:42,070 katika kati ya pingili C na D. 228 00:09:42,070 --> 00:09:45,060 Ni muhimu kufanya hivyo ili haki, na mimi nitakuonyesha nini. 229 00:09:45,060 --> 00:09:47,500 >> Hebu tuangalie njia sahihi ya kufanya hivyo kwanza. 230 00:09:47,500 --> 00:09:49,490 Hey, tunajua nodi mpya ina kuja haki baada ya C, 231 00:09:49,490 --> 00:09:51,910 hivyo hebu kuweka C ijayo pointer 232 00:09:51,910 --> 00:09:54,700 kwa uhakika na new_node. 233 00:09:56,530 --> 00:09:59,180 Haki zote, inaonekana sawa, sisi tu kumaliza up sasa na 234 00:09:59,180 --> 00:10:01,580 kufanya nodi mpya ijayo pointer uhakika na D, 235 00:10:01,580 --> 00:10:03,250 lakini kusubiri, ni jinsi gani tunaweza kufanya hivyo? 236 00:10:03,250 --> 00:10:05,170 Kitu pekee ambayo inaweza kutuambia ambapo D ilikuwa, 237 00:10:05,170 --> 00:10:07,630 alikuwa pointer ijayo awali kuhifadhiwa katika C, 238 00:10:07,630 --> 00:10:09,870 lakini sisi tu rewrote kwamba pointer 239 00:10:09,870 --> 00:10:11,170 kwa uhakika na node mpya, 240 00:10:11,170 --> 00:10:14,230 hivyo sisi hatuna tena kidokezo ambapo D ni katika kumbukumbu, 241 00:10:14,230 --> 00:10:17,020 na tumekuwa waliopotea mapumziko ya orodha. 242 00:10:17,020 --> 00:10:19,000 Si nzuri wakati wote. 243 00:10:19,000 --> 00:10:21,090 >> Hivyo, jinsi gani sisi kufanya haki hii? 244 00:10:22,360 --> 00:10:25,090 Kwanza, kumweka nodi mpya ijayo pointer katika D. 245 00:10:26,170 --> 00:10:28,990 Sasa, wote wapya nodi na C ijayo kuyatumia 246 00:10:28,990 --> 00:10:30,660 ni akizungumzia nodi huo, D, 247 00:10:30,660 --> 00:10:32,290 lakini hiyo ni nzuri. 248 00:10:32,290 --> 00:10:35,680 Sasa tunaweza kumweka C ijayo pointer kwenye nodi mpya. 249 00:10:37,450 --> 00:10:39,670 Hivyo, tumefanya hii bila ya kupoteza data yoyote. 250 00:10:39,670 --> 00:10:42,280 Katika kanuni, C ni nodi sasa 251 00:10:42,280 --> 00:10:45,540 kwamba traversal pointer crawler ni akizungumzia, 252 00:10:45,540 --> 00:10:50,400 na D ni kuwakilishwa na nodi alisema kwa karibu na shamba nodi ya sasa ijayo, 253 00:10:50,400 --> 00:10:52,600 au crawler → ijayo. 254 00:10:52,600 --> 00:10:55,460 Hivyo, sisi kwanza kuweka nodi mpya ijayo pointer 255 00:10:55,460 --> 00:10:57,370 kwa uhakika na crawler → ijayo, 256 00:10:57,370 --> 00:11:00,880 njia sawa sisi alisema new_node ya pointer ijayo lazima 257 00:11:00,880 --> 00:11:02,780 uhakika na D katika kielelezo. 258 00:11:02,780 --> 00:11:04,540 Kisha, tunaweza kuweka nodi ya sasa ijayo pointer 259 00:11:04,540 --> 00:11:06,330 na nodi wetu mpya, 260 00:11:06,330 --> 00:11:10,980 tu kama sisi alikuwa kusubiri kwa kumweka C kwa new_node katika kuchora. 261 00:11:10,980 --> 00:11:12,250 Sasa kila kitu katika utaratibu, na sisi hawakuwa kupoteza 262 00:11:12,250 --> 00:11:14,490 kufuatilia wa data yoyote, na tuliweza tu 263 00:11:14,490 --> 00:11:16,200 fimbo nodi wetu mpya katikati ya orodha 264 00:11:16,200 --> 00:11:19,330 bila kujenga jambo zima au hata shifting mambo yoyote 265 00:11:19,330 --> 00:11:22,490 njia ya sisi wangalipata na safu fasta-urefu. 266 00:11:22,490 --> 00:11:26,020 >> Hivyo, orodha zilizounganishwa ni ya msingi, lakini muhimu, nguvu data muundo 267 00:11:26,020 --> 00:11:29,080 ambayo kuwa na faida zote mbili na hasara 268 00:11:29,080 --> 00:11:31,260 ikilinganishwa na arrays na data nyingine miundo, 269 00:11:31,260 --> 00:11:33,350 na kama ni mara nyingi kesi katika sayansi ya kompyuta, 270 00:11:33,350 --> 00:11:35,640 ni muhimu kujua wakati wa matumizi ya kila chombo, 271 00:11:35,640 --> 00:11:37,960 hivyo unaweza kuchukua chombo haki kwa haki ya kazi. 272 00:11:37,960 --> 00:11:40,060 >> Kwa ajili ya mazoezi zaidi, jaribu kuandika kazi kwa 273 00:11:40,060 --> 00:11:42,080 kufuta nodes kutoka orodha wanaohusishwa - 274 00:11:42,080 --> 00:11:44,050 kumbuka kuwa makini kuhusu utaratibu ambao upya 275 00:11:44,050 --> 00:11:47,430 kuyatumia yako ijayo ili kuhakikisha kuwa wewe si kupoteza chunk ya orodha yako - 276 00:11:47,430 --> 00:11:50,200 au kazi ya kuhesabu nodes katika orodha wanaohusishwa, 277 00:11:50,200 --> 00:11:53,280 au moja ya kujifurahisha, ili kuondokana na utaratibu wa wote wa nodi katika orodha zinazoungwa. 278 00:11:53,280 --> 00:11:56,090 >> Jina langu ni Jackson STEINKAMP, hii ni CS50.