[Powered by Google Translate] Fl-ipprogrammar, aħna ta 'spiss jeħtieġu li jirrappreżentaw listi ta' valuri, bħall-ismijiet ta 'studenti fit-taqsima jew punteġġi tagħhom fuq l-kwizz aktar tard. Fil-lingwa C, iddikjarat arrays jista 'jintuża biex jaħżnu listi. Huwa faċli li jiġu numerati l-elementi ta 'lista maħżuna fil-firxa, u jekk ikollok bżonn l-aċċess jew timmodifika l-element lista ith għal xi indiċi arbitrarja I, li jista 'jsir fil-ħin kostanti, iżda arrays jkollu żvantaġġi, wisq. Meta aħna jiddikjaraw lilhom, aħna qed meħtieġ li jgħidu bil-quddiem kemm hu kbir huma, jiġifieri, kemm elementi jistgħu jaħżnu u kemm hu kbir dawn l-elementi huma, li huwa determinat mill-tip tagħhom. Per eżempju, int arr (10) jista 'jaħżen 10 punti li huma d-daqs ta 'int. Aħna ma jistax ibiddel id-daqs firxa wara l dikjarazzjoni. Irridu jagħmlu firxa ġdida jekk irridu li jaħżen l-elementi aktar. Ir-raġuni din il-limitazzjoni teżisti hija li tagħna Programm taħżen l-firxa sħiħa bħala blokki kontigwi ta 'memorja. Say dan huwa l-buffer fejn aħna maħżuna fil firxa tagħna. Jista 'jkun hemm fatturi oħra tinsab dritt li jmiss għall-firxa fil-memorja, hekk aħna ma tistax biss tagħmel l-array akbar. Kultant aħna tixtieq għall-kummerċ tal-firxa tal-veloċità mgħaġġel aċċess għad-data għal flessibilità ftit aktar. Ikteb il-lista marbuta, struttura oħra tad-data bażika inti tista 'ma tkun kif familjari magħhom. Fuq livell għoli, lista marbuta jaħżen data f'sekwenza ta 'punti ta' konġunzjoni li huma konnessi ma 'xulxin b'rabtiet, għalhekk "lista marbuta." l-isem Kif aħna ser tara, din id-differenza fid-disinn twassal għal vantaġġi differenti u l-iżvantaġġi minn firxa. Hawn xi kodiċi C għal lista sempliċi ħafna marbuta tan-numri interi. Tista 'tara li għandna rappreżentati' kull node fil-lista bħala Struct li fih 2 affarijiet, integer biex jaħżnu imsejħa "val" u link għall-node li jmiss fil-lista li aħna jirrappreżentaw bħala indikatur imsejjaħ "jmiss." Dan il-mod, nistgħu track-lista sħiħa biss bi pointer waħda lill-node 1, u allura nistgħu isegwu l-pointers li jmiss għall-node 2, għall-node 3, għall-node 4, u l-bqija, sakemm aħna jiksbu l-aħħar tal-lista. Inti jista 'jkun kapaċi li tara 1 vantaġġ dan għandu fuq l-istruttura firxa statiku - b'lista marbuta, ma kellniex bżonn blokki kbar ta 'memorja għal kollox. Il-node 1 tal-lista jistgħu jgħixu f'dan il-post fil-memorja, u l-node 2 tista 'tkun it-triq kollha hawn fuq. Nistgħu jiksbu l-lymph ebda kwistjoni fejn fil-memorja huma, għaliex jibda mill-node 1, pointer li jmiss kull node tal tgħidilna preċiżament fejn għandhom imorru jmiss. Barra minn hekk, aħna ma jkollhom jgħidu bil-quddiem kemm hu kbir lista marbuta se jkun il-mod kif nagħmlu ma 'arrays statiċi, peress li aħna jistgħu ikompli jżid nodes għal lista sakemm hemm l-ispazju x'imkien fil-memorja għal punti strateġiċi ġodda. Għalhekk, listi marbuta huma faċli biex resize dinamiku. Say, aktar tard fil-programm għandna bżonn li jżidu punti ta 'konġunzjoni aktar fil-lista tagħna. Biex daħħal node ġdid fil-lista tagħna fuq il-fly, kollha għandna nagħmlu huwa jalloka memorja għal dik node, plop fil-valur tad-data, u imbagħad qiegħdu fejn irridu billi jaġġusta l-pointers xierqa. Per eżempju, jekk ridna li tqiegħed node fl bejn il-lymph 2 u 3 tal-lista,  aħna ma jkollhom jiċċaqalqu l-lymph 2 jew 3 fil-livelli kollha. Say aħna qed tiddaħħal din node aħmar. Kollha għandna d jkollhom biex tagħmel huwa stabbilit pointer li jmiss tal-node ġdid għall-punt għall-node 3 u mbagħad rewire pointer li jmiss tal-node 2 ta għall-punt għall node ġdid tagħna. Allura, nistgħu resize listi tagħna fuq il-fly peress kompjuter tagħna ma tibbaża ruħha fuq indiċjar, iżda pjuttost fuq jgħaqqdu jużaw indikaturi taħżen lilhom. Listi Madankollu, żvantaġġ ta marbutin huwa li, b'differenza firxa statiku, il-kompjuter tista 'mhux biss jaqbżu l-nofs tal-lista. Peress li l-kompjuter għandu li jżuru kull node fil-lista marbuta biex jiksbu l-waħda li jmiss, li għaddej biex jieħdu aktar żmien biex isibu node partikolari milli kieku fil-firxa. Biex travers il-lista sħiħa jieħu ż-żmien proporzjonali it-tul tal-lista, jew O (n) fil-notazzjoni asintotiku. Fuq medja, jilħaq kwalunkwe node wkoll jieħu ż-żmien proporzjonali għall n. Issa, ejja attwalment tikteb xi kodiċi li jaħdem ma 'listi marbuta. Ejja ngħidu li rridu lista marbuta tan-numri interi. Nistgħu jirrappreżentaw node fil-lista tagħna għal darb'oħra bħala Struct ma '2 oqsma, valur integer imsejħa "val" u werrej li jmiss għall-node li jmiss tal-lista. Ukoll, jidher sempliċi biżżejjed. Ejja ngħidu li rridu jiktbu funzjoni li traverses-lista u prints l- valur maħżuna fil-node aħħar tal-lista. Ukoll, li jfisser li għandna bzonn biex travers l-lymph fil-lista biex issib l-aħħar wieħed, iżda peress li aħna mhux qed jiżdiedu jew tħassir xejn, aħna ma trid tibdel l-istruttura interna ta 'l-indikaturi li jmiss fil-lista. Allura, aħna ser bżonn pointer speċifikament għall traversal li aħna ser sejħa "crawler". Hija se jitkaxkru permezz l-elementi kollha tal-lista billi jsegwu l-katina ta 'indikaturi li jmiss. Kollha għandna maħżuna hija pointer għall-node 1, jew "kap" tal-lista. Kap jindika l-node 1. Huwa ta 'tip pointer-to-node. Biex tikseb l-attwali 1 node fil-lista, irridu dereference dan il-werrej, iżda qabel ma nistgħu dereference dan, għandna bżonn li jiċċekkja jekk l-pointer huwa null 1. Jekk huwa null, il-lista tkun vojta, u għandna jistampa messaġġ li, minħabba li l-lista tkun vojta, m'hemm l-ebda node aħħar. Imma, ejja ngħidu l-lista ma tkunx vojta. Jekk mhuwiex, allura għandna jitkaxkru permezz tal-lista kollha sakemm aħna jiksbu l-node aħħar tal-lista, u kif nistgħu tgħid jekk aħna qed tħares lejn il-node aħħar fil-lista? Ukoll, jekk pointer jmiss node huwa null, nafu aħna fl-aħħar peress li l-pointer li jmiss aħħar ma jkollha ebda node li jmiss fil-lista għall-punt li. Huwa prattika tajba li dejjem iżommu pointer li jmiss tal-node li għaddiet initialized għall null li jkollha proprjetà standardizzat li allerti magħna meta aħna ve laħqu t-tmiem tal-lista. Għalhekk, jekk tkaxkir → jmiss huwa null, ftakar li l-sintassi vleġġa huwa shortcut għal dereferencing pointer għal Struct, allura aċċess qasam li jmiss tagħha ekwivalenti għal skomdi: (* Crawler). Jmiss. Ladarba aħna ħadthom misjuba-node aħħar, irridu li jistampaw crawler → val, il-valur fil-node attwali li nafu huwa l-aħħar wieħed. Inkella, jekk aħna mhux qed għadhom fl-node aħħar fil-lista, għandna biex jimxu fuq il-node li jmiss fil-lista u ċċekkja jekk dan huwa l-aħħar wieħed. Biex tagħmel dan, aħna biss sett pointer tkaxkir tagħna għall-punt għall-valur li jmiss tal-node attwali, jiġifieri, il-node li jmiss fil-lista. Dan isir billi jiġu crawler = crawler → jmiss. Imbagħad aħna irrepeti dan il-proċess, bil-linja per eżempju, sakemm insibu l-node aħħar. Għalhekk, per eżempju, jekk tkaxkir kien tipponta lejn ras, aħna waqqafna tkaxkir għall-punt li crawler → jmiss, li huwa l-istess bħall-qasam li jmiss tal-node 1. Allura, issa tkaxkir tagħna hija li tipponta lejn l-node 2, u, għal darb'oħra, aħna irrepeti dan bil-linja, sakemm aħna ħadthom sabet il-node aħħar, jiġifieri, fejn pointer li jmiss tal-node huwa tipponta lejn null. U hemm aħna għandna hija, aħna ħadthom sabet il-node aħħar fil-lista, u għall-istampar valur tagħha, aħna biss użu tkaxkir → val. Traversat mhuwiex daqshekk ħżiena, iżda xi ngħidu dwar ddaħħal? Tikri say irridu li daħħal numru sħiħ fil-pożizzjoni 4 f'lista numru sħiħ. Dan huwa bejn il-lymph attwali 3 u 4. Għal darb'oħra, irridu travers il-lista biss biex jiksbu l-element 3, l-waħda aħna qed tiddaħħal wara. Allura, aħna joħolqu pointer tkaxkir darb'oħra biex travers il-lista, jiċċekkjaw jekk pointer ewlieni tagħna huwa null, u jekk mhuwiex, punt tkaxkir pointer tagħna fil-node ras. Allura, aħna qed fil-element 1. Irridu jimxu 'l quddiem 2 elementi aktar qabel ma nistgħu daħħal, hekk aħna jistgħu jużaw għal loop i int = 1; i <3; i + + u f'kull iterazzjoni tal-linja, javvanzaw pointer tkaxkir tagħna 'l quddiem sa l-1 node billi tiċċekkja jekk il-qasam li jmiss l-node attwali huwa null, u jekk mhuwiex, jimxu pointer crawler tagħna għall-node li jmiss billi dan ikun iffissat ugwali għall pointer li jmiss tal-node kurrenti. Għalhekk, peress loop għall tagħna jgħid li tagħmel dan darbtejn, aħna ħadthom laħqu l-node 3, u ladarba pointer tkaxkir tagħna tkun laħqet l-node wara li aħna tixtieq li daħħal numru sħiħ ġdid tagħna, kif nistgħu attwalment jagħmlu l-inserzjoni? Ukoll, integer ġdida tagħna għandu jiddaħħal fil-lista bħala parti mill-Struct tagħha node stess, peress li dan huwa verament sekwenza ta 'punti ta' konġunzjoni. Allura, ejja tagħmel pointer ġdid biex node imsejħa "new_node," u stabbilit lill-punt li memorja li aħna issa jallokaw dwar il-munzell għall-node innifsu, u kemm memorja għandna bżonn li jiġu allokati? Ukoll, id-daqs ta 'nodu, u rridu li jistabbilixxu kamp val tagħha lill-eqreb numru sħiħ li aħna rridu li daħħal. Ejja ngħidu, 6. Issa, il-node fih valur sħiħ tagħna. Huwa wkoll prattika tajba li initialize qasam li jmiss tal-node ġdid għall-punt għall null, iżda issa liema? Irridu jibdlu l-istruttura interna tal-lista u l-pointers li jmiss li jinsabu fil-lista eżistenti tal- Lymph 3 u 4. Peress li l-indikaturi li ġejjin jiddetermina l-ordni tal-lista, u peress li aħna qed tiddaħħal node ġdid tagħna id-dritt fis-nofs tal-lista, tista 'tkun daqsxejn delikata. Dan għaliex, ftakar, kompjuter tagħna biss jaf il-post ta 'punti ta' konġunzjoni fil-lista minħabba l-pointers jmiss maħżuna fil-lymph preċedenti. Għalhekk, jekk aħna qatt mitlufa rekord ta 'xi wieħed minn dawn il-lokalitajiet, jgħidu billi tbiddel wieħed mill-pointers li jmiss fil-lista tagħna, per eżempju, ngħidu aħna mibdula qasam li jmiss tal-node 3 ta għall-punt li xi node hawn fuq. Aħna tixtieq tkun minn xortih, għax aħna se le jkollu ebda idea fejn isibu l-bqija tal-lista, u li ovvjament tassew ħżiena. Allura, irridu nkunu verament attenta dwar l-ordni li aħna jimmanipulaw pointers jmiss tagħna waqt l-inseriment. Allura, biex tissimplifika dan, ejja ngħidu li 1 4 nodi tagħna huma msejħa A, B, Ċ, u D, bil-vleġeġ jirrappreżentaw il-katina ta 'pointers li jgħaqqdu l-lymph. Għalhekk, għandna bżonn li jiddaħħal node ġdid tagħna fl bejn lymph C u D. Huwa kritiku li tagħmel dan fl-ordni dritt, u jien ser nuruk għaliex. Ejja nħarsu lejn l-mod żbaljat biex tagħmel l-ewwel. Ħej, nafu l-node ġdid għandu jasal dritt wara Ċ, hekk ejja stabbiliti pointer jmiss Ċ għall-punt għall new_node. Kull dritt, jidher okay, aħna biss għandhom finitura up issa mill jagħmlu l-punt l-node ġdid pointer li jmiss D, iżda stenna, kif nistgħu nagħmlu dan? L-unika ħaġa li tista 'tgħidilna fejn D kien, kien il-pointer li jmiss qabel maħżuna fis-C, imma aħna biss rewrote li werrej għall-punt għall-node ġdid, hekk aħna m'għadx għandhom ebda ħjiel fejn D tkun fil-memorja, u aħna tilfu l-bqija tal-lista. Mhux tajba fil-livelli kollha. Allura, kif nistgħu nagħmlu dan id-dritt? L-ewwel, il-punt pointer li jmiss tal-node ġdid fiż D. Issa, pointers kemm il-ġdid node taċ u s Ċ jmiss huma tipponta lejn il-node istess, D, iżda li l-multa. Issa nistgħu punt pointer li jmiss C fiż-node ġdid. Allura, aħna ghamilt dan mingħajr ma jitilfu xi data. Fil kodiċi, C hija l-node kurrenti li l-tkaxkir pointer traversal hija li tipponta lejn, u D huwa rappreżentat mill-node indikat mill-qasam li jmiss tal-node attwali, jew crawler → jmiss. Allura, aħna l-ewwel stabbiliti pointer li jmiss tal-node ġdid għall-punt li crawler → jmiss, Bl-istess mod għidna pointer jmiss new_node s suppost punt sa D fl-illustrazzjoni. Imbagħad, nistgħu stabbilit pointer li jmiss tal-node attwali għall node ġdid tagħna, biss kif aħna kellhom jistennew għall-punt Ċ ta 'new_node fit-tfassil. Issa kollox huwa fl-ordni, u aħna ma jitilfu kont ta 'xi data, u konna kapaċi biss stick node ġdid tagħna fin-nofs tal-lista mingħajr bini mill-ġdid il-ħaġa sħiħa jew saħansitra ċaqliq xi elementi il-mod aħna kien ikollha ma 'firxa ta' tul fiss. Allura, listi linked huma bażiċi, iżda importanti, dinamika struttura tad-data li għandhom kemm vantaġġi u żvantaġġi meta mqabbla ma 'arrays u strutturi oħra ta' data, u kif huwa spiss il-każ fix-xjenza tal-kompjuter, huwa importanti li tkun taf meta jużaw kull għodda, sabiex inti tista 'pick-għodda dritt għall-impjieg id-dritt. Għal aktar prattika, ipprova miktub funzjonijiet li tħassar lymph minn lista marbuta - ftakar li tkun attenta dwar l-ordni li fiha inti rranġati mill-ġdid pointers jmiss tiegħek sabiex jiżguraw li inti ma titlef chunk tal-lista tiegħek - jew funzjoni biex jingħaddu l-għoqiedi fil-lista marbuta, jew waħda gost, biex jinqaleb l-ordni ta 'kollha tal-lymph fil-lista marbuta. Jisimni Jackson Steinkamp, ​​dan huwa CS50.