[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.