[Powered by Google Translate] [Walkthrough - 5 Set Fadhb] [Zamyla Chan - Ollscoil Harvard] Is é [seo CS50. - CS50.TV] Gach ceart. Dia duit, gach duine, agus fáilte a chur Walkthrough 5. Is Pset5 misspellings, ina mbeidh muid ag déanamh seal-checker. Tá litriú-checkers thar a bheith tábhachtach. Tharla riamh leat? Tá tú ag obair an-, an-taisce ar pháipéar do Clash agus ansin deireadh fós ar bun ag fáil rade Glow an-cosúil le D nó a = D agus gach mar go bhfuil tú ar an spoiler liverwurst i an focal míol mór leathan. Tá, tá léamh profaí do piobair ábhar ar an, an impotence go lánmhaith. Is fadhb a chuireann isteach ar manly, mic léinn manly. Dúradh liom uair amháin ag mo torturer grád sith riamh go mbeadh liom a fháil i chomhghleacaí maith. Agus sin ar fad bhí mé riamh, go bhfuil mian gach aon kid ar mo aois, ach a fháil i chomhghleacaí maith. Agus ní hamháin ar bith chomhghleacaí. Uimh Theastaigh uaim dul go dtí comhghleacaí Eabhair Dlí. Mar sin, más rud é nach raibh mé a fheabhsú, bheadh ​​imithe mo aisling ag dul go dtí Harvard, Jale, nó Phríosúin - a fhios agat, i bPríosún, New Jersey. Mar sin, fuair mé mé féin seal-checker. Sin sliocht beag ó cheann amháin de mo ealaíontóirí is fearr leat focal labhartha, Taylor Mailí. Mar sin féin, mar a deir sé, is é an tábhacht a bhaineann le spell-checker an-tábhachtach. Mar sin, fáilte a chur roimh Walkthrough 5, ina mbeidh muid ag caint faoi pset5: misspellings, ina mbeidh muid ag déanamh ár n-féin spell checker-. Tá an bosca uirlisí le haghaidh an tseachtain seo, an cód dáilte, ag dul a bheith tábhachtach chun breathnú ar ach chun tuiscint a fháil feidhmeanna éagsúla go bhfuil do foclóir ag dul a bheith. Táimid ag dul iarbhír a bheith ag iolrach. Comhaid c a dhéanamh le chéile ar ár pset. Agus ag féachaint amhlaidh trí na gnéithe éagsúla, cé nach bhfuil muid eagarthóireacht iarbhír ar cheann de na comhaid, speller.c, a fhios agam conas a oibríonn sé le maidir le dictionary.c, a beidh muid ag scríobh, tá dul a bheith go leor tábhachtach. An spec pset freisin tá a lán eolas úsáideach i dtéarmaí na rudaí gur féidir leat glacadh leis, na rialacha agus rudaí mar sin, sin a bheith cinnte a léamh ar an spec pset go cúramach chun leideanna. Agus nuair a bhíonn amhras ort ar riail nó rud éigin mar sin, ansin a tharchur i gcónaí leis an spec pset nó Pléigh. Tá an pset ag dul a bheith ag brath go mór ar threo, mar sin ba mhaith linn a chinntiú go dtuigimid an difríocht idir réaltaí a chur leis os comhair an pointeoir a ainm agus ampersands, conas go saor in aisce dóibh, etc Dá bhrí sin tá a bheith ina mháistir ar threo ag dul a bheith an-úsáideach sa tacar bhfadhb. Táimid ag dul chun breathnú ar liostaí nasctha le beagán níos mó, áit againn gnéithe mór go tugaimid nóid go bhfuil an dá luach chomh maith le pointeoir leis an nód seo chugainn, agus mar sin a nascadh go bunúsach gnéithe éagsúla i ndiaidh a chéile. Tá roinnt roghanna éagsúla de chur i bhfeidhm do foclóir iarbhír. Táimid ag dul chun breathnú ar dhá mhodh is mó, a bhfuil táblaí hash agus iarracht ansin. Sa dá de na, i gceist leo chineál éigin de nóisean de liosta nasctha áit a bhfuil tú gnéithe a bhaineann le chéile. Agus mar sin táimid ag dul chun breathnú ar conas a d'fhéadfá a bheith in ann oibriú ar fud liostaí nasctha, iad a chruthú, nascleanúint a dhéanamh i dtéarmaí conas a, mar shampla, cuir isteach an nód isteach é nó saor in aisce gach ceann de na nóid chomh maith. I dtéarmaí nóid freeing, go tábhachtach i ndáiríre go bhfuil aon uair muid cuimhne malloc, ina dhiaidh sin saor é. Mar sin, ba mhaith linn a dhéanamh cinnte go dtéann aon pointeoir unfreed, nach bhfuil againn aon leaks cuimhne. Táimid ag dul a thabhairt isteach uirlis ar a dtugtar Valgrind a ritheann do chlár agus seiceálacha cibé an chuimhne ar fad a leithdháileadh tú saor ansin. Tá do pset i gcrích ach amháin nuair a oibríonn sé agus tá sé feidhmiúlacht iomlán, ach freisin, insíonn Valgrind duit nach bhfuil tú ag fáil aon leaks cuimhne. Ar deireadh, ar an pset, ba mhaith liom a rá - Ciallaíonn mé, mar is gnách, tá mé cinnte ag tacú ag baint úsáide as peann agus páipéar do do thacair fhadhb, ach ar an gceann seo, sílim go bhfuil peann agus páipéar ag dul a bheith thar a bheith tábhachtach nuair is mian leat a bheith saigheada a tharraingt chun rudaí agus tuiscint conas a oibríonn rudaí. Mar sin, iarracht a dhéanamh cinnte úsáid a bhaint as peann agus páipéar chun rudaí a tharraingt amach roimh duit códaithe toisc go bhféadfadh sé a fháil giotán messy. Gcéad dul síos, a ligean ar dul isteach i liostaí nasctha le beagán. Is éard liostaí Nasctha na nóid, i gcás ina bhfuil gach nód luach a bhaineann leis, chomh maith le pointeoir leis an nód eile tar éis dó. Tá cúpla rudaí tábhachtacha leis na liostaí atá nasctha go bhfuil gur gá dúinn a mheabhrú áit a bhfuil ár n-nód dtús, agus ansin nuair a fhios againn áit a bhfuil an nód chéad uair, gur slí is féidir linn teacht ar an nód go bhfuil na pointí nód chéad agus ansin an ceann tar éis sin agus an ceann ina dhiaidh sin. Agus is é sin an ghné dheireanach i do liosta nasctha go nód ar pointeoir ag dul i gcónaí a chur in iúl go margadh saothair. Nuair a pointí nód chun margadh saothair, ansin a fhios agat go atá bainte amach agat ar an deireadh an liosta, go bhfuil an nód an ceann deireanach, go níl aon rud ina dhiaidh sin. Anseo sa schematic, a fheiceann tú go bhfuil na saigheada leideanna, agus tá an t-alt gorm ina bhfuil an luach a stóráil, agus ansin an bosca dearg leis an pointeoir leis an nód ar pointeoir dírithe ar an nód eile tar éis dó. Agus mar sin a fheiceann tú anseo, bheadh ​​an nód D pointe Eolas faoin margadh saothair toisc go bhfuil sé an ghné dheireanach den liosta. A ligean ar breathnú ar conas a d'fhéadfadh muid a shainmhíniú struct le haghaidh nód. Agus ós rud é ba mhaith linn a bheith nóid il, seo ag dul a bheith ina struct Rialú an ina bhfuil muid ag dul go bhfuil cásanna éagsúla de nóid. Agus mar sin againn shainmhíniú mar chineál sonraí nua. Anseo, ní mór dúinn a nód struct Rialú an. Sa sampla seo, tá muid ag déileáil le nóid slánuimhir, mar sin ní mór dúinn luach slánuimhir ainmnithe agus ansin ní mór dúinn eile pointeoir, agus sa chás seo, tá sé ina pointeoir le nód, mar sin ní mór dúinn a nód struct * ar a dtugtar seo chugainn. Agus ansin tá muid ag iarraidh an nód rud ar fad. Bí cinnte go leanann tú an chomhréir. Fógra go nód tá sé seo luaite iarbhír suas thuas chomh maith faoi bhun na braces gcuach. Ansin súil a choinneáil ar an áit ina bhfuil mo nód chéad uair sa liosta seo nasctha, ansin tá mé pointeoir nód a dtugtar ceann, agus spás malloc mé go leor chun an méid nód. Fógra, áfach, ná gur ceann i ndáiríre pointeoir nód i gcomórtas le nód iarbhír féin. Mar sin, an ceann nach bhfuil i ndáiríre aon luach, pointí sé ach amháin maidir le cibé acu is nód chéad uair i mo liosta nasctha. Chun a fháil tuiscint níos fearr ar liostaí nasctha, mar tá sé an-tábhachtach súil a choinneáil ar a chinntiú go gcoinníonn tú an slabhra, Is maith liom chun smaoineamh ar é mar dhaoine i líne greim láimhe ar, áit a bhfuil gach duine greim láimhe ar a bhfuil an ceann eile. Ní féidir leat a fheiceáil ar an líníocht, ach go bunúsach tá siad dírithe ar an duine eile is é sin i n-slabhra. Agus mar sin más mian leat a thrasnaíonn liosta nasctha i gcás na daoine - a shamhlú go léir de na daoine a bhfuil luachanna a bhaineann leo agus pointe freisin don chéad duine eile sa líne - más mian leat a thrasnaíonn an liosta nasctha, mar shampla, a chur in eagar ceachtar na luachanna nó cuardach le haghaidh luach nó rud éigin mar sin, ansin beidh tú ag iarraidh a bheith pointeoir chuig an duine ar leith. Mar sin, táimid ag dul a bheith acu sonraí pointeoir nód chineál. Mar shampla, seo, a ligean ar glaoch cúrsóir é. Bheadh ​​ar bhealach eile is coiteann do ainm seo iterator nó rud éigin mar sin mar tá iterating sé os cionn agus ar ndóigh, ag gluaiseacht a nód tá sé dírithe. Beidh sé seo a bheith anseo ar ár cúrsóir. Beidh ár cúrsóir pointe ar dtús chuig an chéad eilimint i ár liosta. Agus mar sin cad ba mhaith linn a dhéanamh ná a ba mhaith linn go bunúsach a bheith ag leanúint an cúrsóir, gluaiseacht ó thaobh go taobh. Sa chás seo, ba mhaith linn é a aistriú go dtí an eilimint deiridh sa liosta. Le eagair, cad ba mhaith linn a dhéanamh ba mhaith linn a rá ach táimid ag cur leis an innéacs 1. Sa chás seo, tá an méid is gá dúinn a dhéanamh ná a fháil iarbhír a duine an duine atá ann faoi láthair atá dírithe ar, agus tá go dul a bheith an luach seo chugainn. Mar sin, má tá cúrsóir ach pointeoir nód, ansin cad ba mhaith linn a dhéanamh Is é ba mhaith linn a fháil ar an luach go bhfuil an cúrsóir dírithe. Táimid ag iarraidh a fháil chun go nód agus ansin, nuair a táimid ag an nód, a aimsiú nuair a tá sé dírithe. Chun a fháil leis an nód iarbhír go bhfuil an cúrsóir dírithe, de ghnáth in iúl dúinn é le (* cúrsóir). Bheadh ​​sin a thabhairt duit an nód iarbhír go bhfuil an cúrsóir dírithe. Agus ansin tar éis sin, cad ba mhaith linn a dhéanamh ba mhaith linn a rochtain a fháil ar is cuma cad é nód luach seo chugainn. Chun é sin a dhéanamh, chun rochtain a fháil ar na luachanna taobh istigh den struct, ní mór dúinn an t-oibreoir ponc. Mar sin, ansin bheadh ​​sé (* cúrsóir). Seo chugainn. Ach tá sé seo le beagán messy i dtéarmaí a bhfuil na lúibíní ar fud an cúrsóir *, agus mar sin táimid in ionad an ráiteas seo ar fad le cúrsóir->. Is é seo an Fleasc agus ansin a shíniú níos mó ná, mar sin a dhéanamh arrow. cúrsóir-> seo chugainn. Beidh an fháil i ndáiríre tú an nód go bhfuil na pointí cúrsóir go. Sin an luach de seo chugainn. Mar sin, in ionad a bheith ar an réalta agus an ponc, tá tú ag a ionaid le saighead. Bí an-chúramach a dhéanamh cinnte go iarracht tú a bhaint as an chomhréir. Anois, ní mór go bhfuil muid ár n-cúrsóir, más mian linn chun teacht ar an luach, roimh, bhí againn cúrsóir-> seo chugainn, ach rochtain a fháil ar an luach ar an nód go bhfuil an cúrsóir dírithe, ní mór dúinn ach a rá go simplí nód-> luach. Ó ann, tá sé de chineál sonraí a cuma cad againn a shainmhínítear na luachanna agus na nóid a bheith. Má tá sé ar nód slánuimhir, tá ansin cúrsóir-> luach ag dul ach a bheith ina slánuimhir. Mar sin, is féidir linn a oibríochtaí a dhéanamh ar sin, comhionannas a sheiceáil, a shannadh dó luachanna éagsúla, etc Mar sin, ansin cad ba mhaith leat a dhéanamh más mian leat do cúrsóir a bhogadh chuig an duine eile, leat athrú i ndáiríre an luach an cúrsóir. Ós rud é cúrsóir a pointeoir nód, athraíonn tú an seoladh pointeoir iarbhír chuig an seoladh ar an nód eile i do liosta. Tá sé seo ach cuid chód áit a raibh tú iterate. I gcás ina bhfuil mé an trácht rud éigin a dhéanamh, go bhfuil áit a bhfuil tú ag dul is dócha a teacht ar an luach nó an bhfuil rud éigin a dhéanamh leis an nód ar leith. Chun tús a chur sé amach, a rá liom go bhfuil mo cúrsóir ar dtús ag dul a chur in iúl ar an chéad ghné ar an liosta nasctha. Agus mar sin ar aghaidh suas, a shainmhínítear mé é mar cheann an nód. Mar a luaigh mé cheana, tá shaoradh tábhachtach i ndáiríre. Ba mhaith leat a dhéanamh cinnte go bhfuil tú saor gach gné ar an liosta nuair atá tú críochnaithe leis. Nuair nach gá duit tagairt a aon cheann de na leideanna níos mó, ba mhaith leat a dhéanamh cinnte go bhfuil tú saor gach ceann de na leideanna. Ach ba mhaith leat a bheith an-chúramach anseo i gur mian leat a sheachaint aon leaks cuimhne. Má tá tú saor in aisce duine amháin ró-luath, ansin gach ceann de na leideanna go bhfuil pointí nód a ag dul a bheith caillte. Dul ar ais chuig an sampla duine chun é a dhéanamh le beagán níos Geallta ard, a ligean ar na daoine seo, ach amháin sa chás seo tá siad ag guairdeall thar loch a monster. Is mian linn a dhéanamh cinnte go bhfuil aon uair saor againn, ní féidir linn a chailleadh agus dul in iúl d'aon nóid roimh againn freed ndáiríre iad. Mar shampla, má bhí tú chun glaoch go simplí saor in aisce ar an Guy anseo, ansin bheadh ​​sé a bheith freed, ach ansin bheadh ​​gach ceann de na guys a bheith caillte ansin agus go mbeadh siad sruth amach agus titim síos. Mar sin, ba mhaith linn a dhéanamh cinnte go bhfuil ionad sin, ba mhaith linn a choimeád ar bun nasc chuig an chuid eile. Ár pointeoir ceann, a dhíríonn ar an ghné den chéad uair sa liosta. Tá sé cineál cosúil le téad ancaireacht an chéad duine. Cad b'fhéidir gur mhaith leat a dhéanamh nuair a shaoradh tú go bhfuil Tá liosta - Más mian leat saor in aisce ar an chéad eilimint ar dtús, ansin is féidir leat a bheith pointeoir sealadach go pointí is é sin le cibé an chéad eilimint. Mar sin, tú do pointeoir sealadach atá dírithe anseo. Sa chaoi sin, ní mór dúinn a shealbhú ar an nód ar dtús. Agus ansin, ós rud é a fhios againn go bhfuil an nód chéad dul a bheith freed, ansin is féidir linn seo a bhogadh rópa, seo ancaire, ár ceann, a chur in iúl iarbhír leis is cuma cad é an chéad cheann dírithe ar. Mar sin, pointí seo ceann iarbhír leis an dara gné anois. Anois, tá muid cead saor in aisce is cuma cad é a stóráil i teocht, agus mar sin is féidir linn a scriosadh go mbaol gan é gach ceann de na nóid eile i ár liosta. D'fhéadfadh bealach eile gur féidir leat é seo a bheith gach uair tú díreach saor in aisce ar an eilimint deiridh sa liosta mar a bhíonn siad ráthaithe gan a lua go rud ar bith. Mar sin, d'fhéadfaí tú saor in aisce ach an ceann seo, ansin saor in aisce gceann seo, ansin saor in aisce gceann seo. Go n-oibríonn cinnte ach tá beagán níos moille mar gheall ar an nádúr na liostaí atá nasctha, ní féidir linn ach léim láithreach chun an ceann deireanach. Ní mór dúinn lean gach eilimint sa liosta nasctha agus seiceáil an bhfuil go bhfuil ceann atá dírithe ar Eolas faoin margadh saothair, a sheiceáil gach uair, agus ansin nuair a againn a bheith ag an deireadh, ansin saor in aisce go. Má bhí tú a dhéanamh an próiseas seo, go mbeadh tú i ndáiríre ag seiceáil anseo, seiceáil anseo, ansin seiceáil anseo, freeing é, ansin dul ar ais, seiceáil anseo, seiceáil anseo, freeing é, seiceáil anseo, agus ansin a shaoradh é. A thógann am beagán níos mó. Yeah. [Mac léinn] An mbeadh sé indéanta a dhéanamh ar liosta nasctha go siopaí ar pointeoir imeachta go dtí deireadh? Bheadh ​​sé sin a bheith cinnte is féidir. A dhéanamh arís ar an gceist, is féidir go mbeadh struchtúr liosta nasctha den sórt sin go bhfuil tú pointeoir dírithe ar an deireadh an liosta nasctha? Ba mhaith liom a rá go bhfuil féidir, agus gach uair go bhfuil tú isteach rud éigin i do liosta nasctha mbeadh tú a thabhairt cothrom le dáta go pointeoir agus rudaí mar sin. Ba mhaith leat a bhfuil críoch * nód, mar shampla. Ach nuair a bhíonn tú i bhfeidhm an ghné seo, tá tú chun smaoineamh ar an chomhbhabhtáil-, cosúil le conas a mhéad uair tá mé ag dul a bheith iterating thar an, cé chomh deacair bhfuil sé ag dul a bheith a choinneáil ar an eireaball chomh maith leis an ceann chomh maith le mo iterator, agus rudaí mar sin. An bhfuil sin -? >> [Mac léinn] Yeah. Tá sé indéanta, ach i dtéarmaí na cinntí a dearadh, caithfidh tú a weigh na roghanna. Seo creatlach de chód a bheadh ​​a cheadaíonn duit a saor in aisce gach eilimint i liosta nasctha. Arís, ó tá mé ag iterating thar liosta nasctha, tá mé ag dul go dtí mhaith a bheith de shaghas éigin cúrsóir nó iterator. Táimid ag iterating go dtí go bhfuil an cúrsóir NULLComment. Ní mian leat a iterate nuair a bhfuil do cúrsóir NULLComment mar ciallaíonn sin nach bhfuil aon rud ar an liosta. Mar sin, ansin anseo a dhéanamh liom * nód sealadach Is é dírithe ar a bhfuil mé ag smaoineamh ar an chéad cheann de mo liosta, agus ansin mé bogadh mo cúrsóir romhainn 1 agus ansin saor in aisce is cuma cad a bhí agam i stóráil shealadach. Anois táimid ag teacht isteach i liostaí nasctha. Tá mé trí nóid i mo liosta nasctha, agus a ligean ar dul leis an gcás simplí nuair ba mhaith linn a eile a chur isteach nód ag deireadh na ár liosta nasctha. Chun seo a dhéanamh go, tá gach ba mhaith linn a dhéanamh ba mhaith linn a lean a fháil áit a bhfuil an deireadh reatha an liosta nasctha, mar sin cibé acu nód atá dírithe ar Eolas faoin margadh saothair - Tá go gceann seo - agus a rá ansin, i ndáiríre, nach bhfuil an duine ag dul a bheith ar an nód deiridh; táimid ag dul i ndáiríre go bhfuil ceann eile. Mar sin, ba mhaith linn seo faoi láthair pointe amháin a cuma cad tá muid ag chur isteach. Mar sin, anois a thiocfaidh an duine dearg anseo an nód deiridh sa liosta nasctha. Agus is é sin an saintréith de chuid an nód deiridh sa liosta nasctha go pointí sé le Eolas faoin margadh saothair. Mar sin, ansin cad ba mhaith linn a dhéanamh atá leagtha Guy seo dearg ar pointeoir nialasach. Tá. Ach cad má bhíomar ag iarraidh a chur isteach nód i idir an dara ceann agus an tríú? Nach bhfuil ceann simplí go leor mar atá mar ba mhaith linn a dhéanamh cinnte go nach bhfuil muid ag dul in iúl d'aon nód i ár liosta nasctha. Cad ba mhaith linn a dhéanamh ná a dhéanamh cinnte go bhfuil muid féin ancaire le gach ceann. Mar shampla, a ligean ar glaoch seo an dara ceann. Má dúirt tú pointí an dara ceann anois leis an ceann nua agus rinne tú díreach pointeoir ann, ansin bheadh ​​an toradh sin i Guy seo á chailliúint toisc nach bhfuil aon nasc a thabhairt dó. Ina áit sin - beidh mé a tharraingt seo arís. Gabh mo chumas ealaíne. Tá a fhios againn nach féidir linn ach nasc díreach 2 a ghabhann leis an ceann nua. Ní mór dúinn a chinntiú go atá againn ar aghaidh go dtí an ceann deireanach. Cad a d'fhéadfadh muid ag iarraidh a dhéanamh ná a bhfuil pointeoir sealadach leis an eilimint sin ag dul ar a chur i gceangal ar. Mar sin, ansin linn a bheith pointeoir sealadach ann. Ós rud é a fhios againn go bhfuil an tríú cuid á choimeád rian de, Is féidir le 2 nasc anois ar ár ceann nua. Agus má tá an nua dearg Guy ag dul a bheith i idir 2 agus 3, ansin cad go Guy ar pointeoir ag dul a chur in iúl? >> [Mac léinn] Meán. Sealadach. Yeah. Dá bhrí sin tá sin an Guy dearg luach chugainn ag dul a bheith sealadach. Nuair a bhíonn tú ag chur isteach i liostaí nasctha, chonaic muid go bhféadfadh muid go héasca rud éigin a chur leis an deireadh a chruthú ar raon sealadach, nó má bhíomar ag iarraidh rud éigin a chur i lár ár n-eagar, ansin bheadh ​​sé a ghlacadh le beagán níos mó a shuffling timpeall. Más mian leat, mar shampla, tá liosta curtha in eagar nasctha, ansin caithfidh tú a chineál weigh na costais agus na buntáistí a bhaineann le go mar gheall ar más mian leat go mbeadh sraith curtha in eagar, ciallaíonn sé sin go gach uair go bhfuil tú isteach isteach é, tá sé ag dul a chur san am beagán níos mó. Mar sin féin, más mian leat níos déanaí ar, mar beidh muid ag teacht ar go mbeidh muid ag iarraidh a, cuardaigh trí liosta nasctha, ansin d'fhéadfadh sé a bheith níos éasca má tá a fhios agat go bhfuil gach rud in ord. Mar sin, b'fhéidir gur mhaith leat a weigh na costais agus na sochair sin. Is bealach eile a chur isteach i liosta nasctha a chur isteach i tús an-liosta. Má táimid a tharraingt ar ár ancaire anseo - is é seo ár ceann - agus ansin tá nasc na daoine air, agus ansin ní mór dúinn a nód nua a chur isteach sa tús, ansin d'fhéadfadh cad muid ag iarraidh a dhéanamh? Cad é a bheadh ​​cearr le díreach ag rá ba mhaith mé go dtí an dearg a nascadh leis an gorm, toisc go bhfuil an chéad cheann? Cad a tharlódh anseo? Bheadh ​​gach ceann de na trí fháil caillte. Mar sin, nach bhfuil muid ag iarraidh sin a dhéanamh. Arís, tá muid fhoghlaim gur gá dúinn go bhfuil roinnt de chineál ar pointeoir go sealadach. A ligean ar a roghnú go mbeadh pointe sealadach leis an Guy. Ansin, is féidir linn an gorm pointe amháin a bheith ar an sealadach agus ansin an pointe dearg ar an gorm. Is é an fáth mé daoine ag baint úsáide anseo mar ba mhaith linn i ndáiríre a shamhlú ghabháltas ar a dhaoine agus a chinntiú go bhfuil nasc orthu sula dul in iúl eile láimh nó rud éigin mar sin. Anois, ní mór go tuiscint ar liostaí nasctha - conas a d'fhéadfadh muid a chruthú liosta nasctha agus a chruthú ar na struchtúir don comhdhéanta den mhíniú cineál nód agus a dhéanamh ansin cinnte go bhfuil muid pointeoir chuig ceann an liosta nasctha - nuair a bhíonn againn go agus tá a fhios againn conas a Traverse trí eagar, rochtain a fháil ar gnéithe éagsúla, tá a fhios againn conas a chur isteach agus tá a fhios againn conas a saor in aisce dóibh, ansin is féidir linn a fháil i misspellings. Mar is gnáth, ní mór dúinn í d'alt den ceisteanna a fháil d'úsáid tú chun oibriú le liostaí nasctha agus struchtúir éagsúla cosúil le scuainí agus stacks. Ansin, is féidir linn bogadh isteach misspellings. Misspellings Tá an cód dáilte cúpla comhad a bhfuil tábhacht. An Chéad faoi deara againn go bhfuil muid an Makefile anseo, nach mór dúinn a bhíonn i ndáiríre roimh. Má d'fhéach tú taobh istigh an fillteán pset5, ba mhaith tú faoi deara go bhfuil tú. H comhad, ansin caithfidh tú dhá. comhaid c. Cad a dhéanann an Makefile é roimh, ba mhaith linn a chlóscríobh díreach a dhéanamh agus ansin an t-ainm clár agus ansin ba mhaith linn a fheiceáil gach ceann de na hargóintí agus bratacha a ritheadh ​​i do na tiomsaitheoir. Cad é an ní Makefile ligeann dúinn a chur le chéile comhaid roinnt ag an am céanna agus pas a fháil sna bratach a ba mhaith linn. Anseo a fheiceáil ach níl comhad header anseo. Ansin tá againn i ndáiríre dhá chomhad foinse. Tá speller.c agus dictionary.c. Tá fáilte romhat a chur in eagar ar an Makefile más mian leat. Fógra go anseo más scríobhann tú glan, ansin cad a dhéanann sé i ndáiríre rud ar bith go mbainfidh is é sin an croí. Má fuair tú locht deighilt, go bunúsach go bhfaighidh tú Dumpáil lárnacha. Mar sin, beidh an comhad seo ghránna beag le feiceáil i do eolaire ar a dtugtar croí. Beidh tú ag iarraidh a bhaint go mbeidh sé glan. Cuireann sé aon chomhaid exe agus. Comhad o. A ligean ar ghlacadh le breathnú i dictionary.h. Deir sé seo go ndearbhaíonn sé foclóir le feidhmiúlacht. Tá fad uasta le haghaidh aon focal sa bhfoclóir. Deirimid go bhfuil sé seo ag dul a bheith an focal is faide is féidir. Tá sé ar fad 45. Mar sin, ní táimid ag dul go bhfuil aon focail a bheith níos mó ná sin fad. Anseo atá againn ach an fréamhshamhlacha feidhme. Nach bhfuil againn le cur chun feidhme iarbhír mar gheall ar go bhfuil an méid beidh orainn a bheith á dhéanamh ar an pset. Ach cad a dhéanann seo ós rud é tá muid ag déileáil le comhaid níos mó anseo agus feidhmiúlacht ar scála níos mó, tá sé úsáideach a bheith acu. h comhad ionas gur féidir duine éigin eile a léamh nó ag baint úsáide as do chód a thuiscint cad atá ar siúl. Agus b'fhéidir gur mhaith leo a chur i bhfeidhm Déanann má rinne tú táblaí hash nó vice versa. Ansin, bheadh ​​siad ag rá m'fheidhme ualach, Tá cur i bhfeidhm iarbhír ag dul a bheith difriúil, ach ní bheidh an fhréamhshamhail a athrú. Anseo ní mór dúinn a sheiceáil, a tuairisceáin fíor má tá focal a tugadh sa bhfoclóir. Ansin tá ualach, a bhíonn go bunúsach i gcomhad foclóir agus ualaí ansin é i roinnt struchtúr sonraí. Tá méid, a bhfuil, nuair a d'iarr ar ais, an méid do foclóir, cé mhéad focail atá stóráilte sa é, agus Díluchtaigh ansin, a FreeS suas go léir cuimhne gur féidir leat a bheith déanta suas agus a dhéanamh do foclóir. A ligean ar ghlacadh le breathnú ar dictionary.c. Feicimid go Breathnaíonn sé an-chosúil le dictionary.h, ach amháin anois tá sé ach gach ceann de na TODOs ann. Agus mar sin go bhfuil do phost. Faoi dheireadh, beidh tú a líonadh amach speller.c le gach ceann de an cód. Dictionary.c, nuair a ritheann nach bhfuil, ag dul i ndáiríre ní a dhéanamh, mar sin táimid i dtreo speller.c a fheiceáil i bhfeidhm iarbhír an litreoir-. Cé nach bhfuil tú ag dul a bheith eagarthóireacht aon cheann de na gcód seo, tá sé tábhachtach a léamh, a thuiscint nuair a luchtú ar a dtugtar, nuair a táim ag glaoch mé seic, ach a thuiscint, sé a mhapáil amach, a fheiceáil conas a oibríonn an fheidhm. Feicimid go tá a sheiceáil sé ar an úsáid ceart. Go bunúsach, nuair a ritheann duine éigin speller, léiríonn sé go bhfuil sé roghnach dóibh chun pas a fháil i gcomhad foclóir mar tá go bhfuil dul chun bheith ina comhad foclóir réamhshocraithe. Agus ansin tá siad chun pas a fháil sa téacs a bheith litrithe sheiceáil. Déileálann rusage leis an am mar gheall ar a chuid den pset a beidh muid ag déileáil le déanaí nach bhfuil ach ag fáil a fheidhmíonn go spell checker-obair ach dul i ndáiríre é a bheith go tapa. Agus mar sin ansin go ina bhfuil rusage dul chun teacht isteach Anseo, feicimid an chéad ghlaoch chuig ceann dár comhaid dictionary.c, a bhfuil ualach. Luchtaigh tuairisceáin fíor nó bréagach - fíor ar rath, bréagach ar mhainneachtain. Mar sin, mura bhfuil an foclóir luchtaithe i gceart, ansin beidh an speller.c ar ais 1 agus éirí as an tobac. Ach má dhéanann sé ualach i gceart, ansin tá sé ag dul chun leanúint ar aghaidh. Leanaimid, agus a fheiceann muid roinnt comhad / liom O anseo, nuair atá sé ag dul a bheith ag déileáil le oscailt an comhad téacs. Anseo, cad é seo a dhéanann spell seiceálacha-gach focal amháin sa téacs. Mar sin, cad é speller.c dhéanamh ar dheis anseo tá iterating thar gach ceann de na focail sa chomhad téacs agus seiceáil ansin iad san fhoclóir. Anseo, ní mór dúinn a Boole mílitrithe a fheiceáil má fhilleann seic fíor nó nach bhfuil. Má tá an focal iarbhír sa bhfoclóir, ansin beidh seiceáil ar ais fíor. Ciallaíonn sé sin nach bhfuil an focal mílitrithe. Bheadh ​​Mar sin, misspelled bheith bréagach, agus sin an fáth go bhfuil muid an Bang ann, an tásc. Muid a choinneáil ar siúl go leanúnach, agus ansin coimeádann sé rian ar cé mhéad focail misspelled tá sa chomhad. Leanann sé ar aghaidh agus Dúnann an comhad. Ansin anseo, tuarascálacha sé cé mhéad focail misspelled a bhí agat. Ríomhann sé cé mhéad ama a thóg sé a luchtú an foclóir, cé mhéad ama a thóg sé chun é a sheiceáil, cé mhéad ama a thóg sé a ríomh ar an méid, ar chóir, mar beidh muid ag dul ar aghaidh, a bheith an-bheag, agus ansin cé mhéad ama a thóg sé a Díluchtaigh an foclóir. Anseo suas thuas a fheicimid an glaoch a dhíluchtú anseo. Má sheiceáil le haghaidh méid anseo, ansin linn a fheiceáil go bhfuil anseo an glaoch chun méid i gcás ina gcinnfidh sé an méid den fhoclóir. Awesome. Is é an tasc atá againn ar an pset a chur i bhfeidhm ualach, a luchtú an foclóir sonraí struchtúr - cibé acu a roghnaíonn tú a bheith, tá sé tábla hash nó a try - le focail ó na comhaid foclóir. Ansin tá tú méid, a thabhairt ar ais ar líon na bhfocal san fhoclóir. Agus má tá tú i bhfeidhm ualach ar bhealach cliste, ansin ba chóir méid a bheith éasca go leor. Ansin tá tú ag seiceáil, a sheiceáil má tá focal a tugadh sa bhfoclóir. Mar sin, Gabhann speller.c i téad, agus ansin caithfidh tú a sheiceáil cibé an bhfuil teaghrán le fáil laistigh de do foclóir. Fógra go bhfuil againn de ghnáth foclóirí caighdeánacha, ach sa pset, a ritheadh ​​go bunúsach aon foclóir in i dteanga ar bith. Mar sin, ní féidir linn glacadh leis sin go díreach an focal AN taobh istigh. D'fhéadfaí an Foobar focal a shainmhíniú i bhfoclóir áirithe go gcuireann muid isteach Agus ansin ní mór dúinn a Díluchtaigh, a FreeS an foclóir ó chuimhne. Gcéad dul síos, ba mhaith liom dul thar an modh tábla hash faoi ​​conas a d'fhéadfadh muid a chur i bhfeidhm gach ceann de na ceithre fheidhm, agus ansin beidh mé ag dul thar an iarracht modh, conas a chur i bhfeidhm na ceithre feidhmeanna, agus ag an deireadh labhairt faoi roinnt leideanna ginearálta nuair a bhíonn tú ag déanamh an pset agus Valgrind freisin ar conas a d'fhéadfadh tú a bheith in ann úsáid a sheiceáil le haghaidh leaks cuimhne. A ligean ar dul isteach ar an modh tábla hash. Is éard atá tábla hash liosta de buicéid. Gach luach, gach focal, tá dul chun dul i gceann de na buicéid. Tábla hash Dáileann go hidéalach go cothrom gach ceann de na luachanna seo go bhfuil tú ag dul i agus populates ansin iad sa bhucaeid den sórt sin go bhfuil gach buicéad tá thart ar an líon céanna luachanna ann. Tá an struchtúr le haghaidh tábla hash, ní mór dúinn le sraith de liostaí nasctha. Céard a dhéanaimid é nuair a théann muid i luach, ní mór dúinn a sheiceáil nuair ba chóir an luach mbaineann, a buicéad mbaineann sé leis, agus ansin é a chur isteach ar an liosta nasctha a bhaineann leis an buicéad. Anseo, cad tá mé feidhm hash. Tá sé an tábla slánuimhir hash. Sin, le haghaidh an buicéad chéad, aon slánuimhreacha faoi bhun 10 dul isteach an buicéad chéad uair. Aon slánuimhreacha os cionn 10 ach faoi bhun 20 dul isteach sa dara agus ansin sin de, agus mar sin de. Maidir liom féin, tá gach buicéad ionadaíocht ar na huimhreacha. Mar sin féin, a rá go raibh mé pas a fháil i 50, mar shampla. Dealraíonn sé amhail is dá mba rud é go bhfuil an chéad trí raon de deich uimhreacha. Ach ba mhaith liom a ligean mo tábla hash a ghlacadh in aon saghas slánuimhreacha, mar sin ansin ba mhaith liom a scagadh amach na huimhreacha os cionn 30 i an buicéad seo caite. Agus mar sin ansin bheadh ​​an toradh sin i chineál tábla hash unbalanced. A rá arís, tá tábla hash ach le sraith de buicéid ina bhfuil gach buicéad liosta nasctha. Agus mar sin a chinneadh nuair a théann gach luach, a buicéad téann sé isteach, bhfuil tú ag dul a iarraidh rud ar a dtugtar feidhm hash a thógann luach agus ansin deir fhreagraíonn an luach buicéad áirithe. Mar sin, suas thuas sa sampla seo, bhí mé ag feidhmiú hash gach luach. Sheiceáil sé cibé an raibh sé níos lú ná 10. Má bhí sé, bheadh ​​sé é a chur ar an buicéad chéad uair. Seiceálacha sé cibé acu is lú ná 20, cuireann sé isteach ar an dara más fíor, seiceálacha má tá sé níos lú ná 30, agus ansin cuireann sé isteach ar an buicéad tríú, agus ansin titeann gach rud eile ach an buicéad ceathrú. Mar sin, aon uair a bhfuil tú luach, do fheidhm hash Beidh áit an luach isteach an buicéad is cuí. An fheidhm hash gá go bunúsach go mbeadh a fhios cé mhéad buicéid agat. Do méid tábla hash, líon na buicéid atá agat, go ag dul a bheith ina líon seasta go bhfuil suas le leat, chun tú a chinneadh, ach tá sé ag dul a bheith ina líon seasta. Mar sin, d'fheidhm hash a bheith ag brath ar an a chinneadh a bhfuil buicéad théann gach eochair isteach den sórt sin go bhfuil sé scaipthe go cothrom. Cosúil le i bhfeidhm na liostaí nasctha, anois gach nód sa tábla hash ag dul i ndáiríre a bheith acu Char chineál. Mar sin, ní mór dúinn sraith Char ar a dtugtar focal agus ansin, bealach eile pointeoir leis an nód seo chugainn, a dhéanann ciall mar tá sé ag dul a bheith ina liosta nasctha. Cuimhnigh nuair a bhí nasctha againn liostaí, rinne mé * nód a dtugtar ceann go raibh dírithe ar an nód den chéad uair sa liosta nasctha. Ach le haghaidh ár tábla hash, toisc go bhfuil muid liostaí nasctha il, cad ba mhaith linn é ba mhaith linn ár tábla hash a bheith cosúil le, "Cad é buicéad?" Is buicéad ach liosta de na leideanna nód, agus mar sin de gach eilimint sa buicéad dírithe iarbhír cur lena liosta nasctha comhfhreagrach. Chun dul ar ais go dtí an schematic, a fheiceann tú go bhfuil na buicéid iad féin na saigheada, Ní nóid iarbhír. Is é ceann mhaoin riachtanach feidhmeanna hash go bhfuil siad deterministic. Ciallaíonn sé sin go aon uair is tú hash an uimhir 2, ba chóir é ar ais i gcónaí ar an buicéad céanna. Gach luach amháin a théann isteach an fheidhm hash, más rud é arís agus arís eile, Tá a fháil ar an innéacs céanna. Mar sin, ar ais do fheidhm hash an t-innéacs ar an eagar i gcás ina mbaineann an luach sin. Mar a luaigh mé roimh, tá líon na buicéid socraithe, agus tá sin do innéacs go fhilleann tú a bheith níos lú ná líon na buicéid ach níos mó ná 0. An fáth atá againn feidhmeanna hash seachas díreach liosta amháin nasctha amháin nó tá sé ar cheann sraith amháin gur mhaith linn a bheith in ann léim d'alt áirithe is éasca má tá a fhios againn ar an tréith de luach - in ionad a bheith chun cuardach a dhéanamh tríd an foclóir iomlán ar fad, a bheith in ann léim d'alt áirithe de. Ba chóir do fheidhm hash a chur san áireamh go hidéalach, Tá gach buicéad thart ar an líon céanna eochracha. Ós rud é an tábla hash sraith de liostaí nasctha, ansin tá na liostaí nasctha iad féin ag dul go bhfuil níos mó ná aon nód. Sa sampla roimhe seo, dhá uimhreacha éagsúla, cé nach raibh siad cothrom, nuair hashed a bheadh, ar ais an t-innéacs céanna. Mar sin, nuair a bhíonn tú ag déileáil le focail, focal amháin nuair a hashed a bheadh ​​an luach céanna hash le focal eile. Sin an méid tugaimid imbhualadh, nuair a ní mór dúinn a nód, nuair a hashed, nach bhfuil an liosta nasctha ag an buicéad folamh. Is é an teicníc go tugaimid ann líneach deacra, nuair a théann tú isteach ar an liosta nasctha agus ansin teacht ar áit ar mhaith leat a chur isteach go nód toisc go bhfuil tú imbhualadh. Is féidir leat a fheiceáil go bhféadfadh go mbeadh trádáil-uaire anseo, ceart? Má tá tú tábla an-bheag hash, líon an-bheag de buicéid, ansin tá tú ag dul go bhfuil a lán na n-imbhuailtí. Ach ansin má dhéanann tú tábla an-mhór hash, bhfuil tú ag dul is dócha a íoslaghdú imbhuailtí, ach tá sé ag dul a bheith an-mhór sonraí a struchtúr. Tá ag dul a bheith le trádáil-dícheangail leis sin. Mar sin, nuair a bhíonn tú a dhéanamh do pset, déan iarracht a imirt ar fud idir b'fhéidir a dhéanamh tábla níos lú hash ach a fhios agam ansin go sé ag dul a ghlacadh le beagán níos faide chun Traverse na heilimintí éagsúla de na liostaí sin nasctha. Cén t-ualach ag dul a dhéanamh ná iterate ar gach focal sa bhfoclóir. Téann sé i pointeoir chun an comhad foclóir. Mar sin, tá tú ag dul leas a bhaint as an comhad a I / O feidhmeanna máistreacht tú i pset4 agus abair leo níos mó ná gach focal sa bhfoclóir. Ba mhaith leat gach focal sa bhfoclóir a bheith ina nód nua, agus tá tú ag dul chun gach ceann de na nóid taobh istigh de do struchtúr foclóir sonraí. Aon uair a fhaigheann tú focal nua, tá a fhios agat go tá sé ag dul a bheith ina nód. Mar sin, is féidir leat dul straightaway agus malloc a pointeoir nód do gach focal nua go bhfuil tú. Anseo tá mé ag iarraidh mo new_node pointeoir nód agus tá mé ag mallocing cad é? An méid nód. Ansin a léamh ar an teaghrán iarbhír ó chomhad, toisc go bhfuil an foclóir a stóráil i ndáiríre ag focal agus ansin líne nua, cad is féidir linn leas a bhaint as Is é an fscanf fheidhm, lena ndéantar comhad an comhad foclóir go bhfuil muid ag rith i, mar sin scans sé an chomhaid ar feadh téad agus áiteanna téad isteach argóint deiridh. Má cuimhne tú ar ais le ceann de na léachtaí, nuair a chuaigh muid thar agus de chineál ar scafa na sraitheanna ar ais ar an leabharlann CS50, chonaic muid i bhfeidhm fscanf ann. Chun dul ar ais chuig fscanf, ní mór dúinn an comhad sin tá muid ag léamh as, táimid ag lorg ar shraith sa chomhad, agus ansin tá muid é a chur isteach i anseo tá mé new_node-> focal toisc go bhfuil new_node a pointeoir nód, nach nód iarbhír. Mar sin, ansin mé ag rá new_node, ba mhaith liom dul go dtí an nód a tá sé dírithe agus a shannadh ansin luach a focal. Is mian linn a chur ansin an focal sin agus é a chur isteach sa tábla hash. Realize go rinne muid new_node a pointeoir nód mar gheall ar táimid ag dul a iarraidh a fháil amach cad é an seoladh an nód nuair a isteach é i ngeall ar struchtúr na nóid féin, ar an struct, Tá go bhfuil siad pointeoir do nód nua. Mar sin, ansin cad é an seoladh an nód ag dul go dtí pointe? Sin seoladh ag dul a bheith new_node. An dhéanamh go chiall, cén fáth a bhfuil muid ag déanamh new_node a * nód le hais nód? Maith go leor. Tá focal. Is é sin an luach new_node-> focal. Go bhfuil an focal as an foclóir a ba mhaith linn a ionchur. Mar sin, cad ba mhaith linn a dhéanamh ba mhaith linn chun glaoch ar ár fheidhm hash ar an teaghrán toisc go dtarlaíonn ár bhfeidhm hash i sreang agus ansin ar ais chugainn ina slánuimhir, i gcás gur slánuimhir an t-innéacs áit a seasann hashtable ag an innéacs sin buicéad. Is mian linn a ghlacadh go innéacs agus ansin dul leis an innéacs ar an tábla hash agus ansin bain úsáid as an liosta sin nasctha a chur isteach an nód ag new_node. Cuimhnigh go bhfuil, áfach, a shocraíonn tú a chur isteach do nód, cibé acu is i lár más mian leat a shórtáil sé nó ag tús nó ag deireadh, ach déan cinnte go pointí do nód deiridh i gcónaí a margadh saothair mar gheall go bhfuil an bealach amháin go bhfuil a fhios againn áit a bhfuil an ghné dheireanach de ár liosta nasctha. Má tá méid slánuimhir gur ionann líon na bhfocal i bhfoclóir, ansin bealach amháin chun é seo a dhéanamh nuair a bhíonn méid ar a dtugtar théann muid trí gach gné in ár tábla hash agus abair leo ansin trí gach liosta nasctha laistigh den tábla hash agus ríomh ansin an fad sin, ag méadú ár n-1 gcuntar faoin 1. Ach gach uair go bhfuil méid ar a dtugtar, tá sé go dul a ghlacadh ar feadh i bhfad toisc go bhfuil muid ag dul a bheith líneach deacra gach liosta amháin nasctha. Ina áit sin, tá sé ag dul a bheith a lán níos éasca má tú a choinneáil rian ar cé mhéad focail ar aghaidh isteach Mar sin, má ansin tá tú cuntar laistigh de do fheidhm ualach go cothrom le dáta mar is gá, gcuntar ansin, má chruthaíonn tú sé le athróg domhanda, beidh siad in ann rochtain a bheith ag méid. Mar sin, cad méid d'fhéadfadh a dhéanamh ach i líne amháin, ar ais ach an luach gcuntar, an méid de na foclóir, a dhéileáil tú cheana féin leis an ualach. Sin an méid i gceist agam nuair a dúirt mé má tá tú i bhfeidhm ualach ar bhealach cuiditheach, ansin méid dul a bheith éasca go leor. Mar sin anois a fháil againn a sheiceáil. Anois, tá muid ag déileáil le focail ó na comhaid téacs ionchur, agus mar sin táimid ag dul a bheith ag seiceáil cibé an gach ceann de na focail ionchur i ndáiríre san fhoclóir nó nach bhfuil. Cosúil le Scramble, ba mhaith linn a cheadú do insensitivity cás. Ba mhaith leat a dhéanamh cinnte go bhfuil pas faighte gach ceann de na focail i, cé go bhfuil siad cás measctha, nuair a d'iarr le gcomparáid téad, atá coibhéiseach. Is iad na focail sna comhaid téacs foclóir iarbhír gach CásÍochtair. Tá rud eile gur féidir leat glacadh leis gur éirigh gach focal i, gach téad, ag dul a bheith aibítre nó huaschamóga iontu. Huaschamóga ag dul a bheith focail bailí inár fhoclóir. Mar sin, má tá tú focal le apostrophe S, sin focal iarbhír dlisteanach i do foclóir go ag dul a bheith ar cheann de na nóid i do tábla hash. Seiceáil oibríonn leis má tá an focal, ansin tá sé fuair a bheith in ár tábla hash. Má tá an focal sa bhfoclóir, ansin tá gach ceann de na focail san fhoclóir sa tábla hash, mar sin a ligean le breathnú ar an focal sa tábla hash. Tá a fhios againn gur ó chuireamar ár n-fheidhm hash den sórt sin go bhfuil gach focal ar leith hashed i gcónaí chun an luach céanna, ansin a fhios againn go in ionad an cuardach trí tábla ár hash iomlán ar fad, féidir linn a fháil i ndáiríre ar an liosta nasctha go bhfuil an focal a bhaineann le. Má bhí sé san fhoclóir, ansin bheadh ​​sé sa buicéad. Cad is féidir linn a dhéanamh, má tá focal an t-ainm ár téad a ritheadh ​​i, is féidir linn ach hash an focal sin agus féach ar an liosta nasctha ar luach na hashtable [hash (word)]. Ó ann, cad is féidir linn a dhéanamh ní mór dúinn a fo-thacar níos lú de nóid a chuardach le haghaidh an focal, agus mar sin is féidir linn a lean an liosta nasctha, ag baint úsáide as sampla ó níos luaithe sa walkthrough, agus ansin glaoch téad chur i gcomparáid ar an focal pé áit a bhfuil an cúrsóir dírithe, an focal sin, agus féach an bhfuil na chur i gcomparáid. Ag brath ar an mbealach go bhfuil tú a eagrú do fheidhm hash, má tá sé curtha in eagar, d'fhéadfá a bheith in ann a thabhairt ar ais bréagach le beagán níos luaithe, ach má tá sé neamhshórtáilte, ansin ba mhaith leat dul ar aghaidh thrasnaíonn trí do liosta nasctha dtí go bhfaighidh tú an ghné dheireanach den liosta. Agus má tá tú nach bhfuil fáil fós ar an focal ag an am atá tú bainte amach faoi dheireadh an liosta nasctha, go Ciallaíonn sé sin nach do focal ann san fhoclóir, agus mar sin an focal sin neamhbhailí, agus ba chóir a sheiceáil ar ais bréagach. Anois, a dhíluchtú, nuair is mian linn go saor in aisce gach ceann de na nóid atá againn malloc'd, mar sin saor in aisce gach ceann de na nóid taobh istigh de ár tábla hash. Táimid ag dul go dtí mhaith a iterate thar gach ceann de na liostaí atá nasctha agus saor in gach ceann de na nóid i sin. Má fhéachann tú thuas sa walkthrough leis an sampla ina saor muid liosta nasctha, ansin beidh tú ag iarraidh a athdhéanamh an bpróiseas sin le haghaidh gach eilimint sa tábla hash. Agus beidh mé ag dul thar an i dtreo dheireadh an walkthrough, ach tá Valgrind uirlis áit ar féidir leat a fheiceáil má tá tú saor i gceart gach nód go atá tú malloc'd nó aon rud eile go atá tú malloc'd, aon pointeoir eile. Tá Mar sin, go táblaí hash, áit a bhfuil muid líon teoranta de buicéid agus feidhm hash a ghlacadh luach agus ansin go bhfuil luach a shannadh do buicéad áirithe. Anois táimid ag teacht ar iarracht. Déanann chineál breathnú mar seo, agus beidh mé a tharraingt amach freisin, mar shampla. Go bunúsach, tá tú ar raon iomlán na litreacha a bheith ann, agus ansin nuair a bhíonn tú ag tógáil focal, Is féidir an litir a cheangal le haghaidh foclóir do réimse leathan d'fhéidearthachtaí. Tús roinnt focal le C ach ansin leanúint ar aghaidh leis A, ach leanfaidh daoine eile a bhfuil O, mar shampla. Is trie ar bhealach físiúil gach ceann de na teaglamaí is féidir na focail sin. Tá trie ag dul súil a choinneáil ar an t-ord na litreacha sin focail seo a leanas, Branching amach nuair is gá, nuair is féidir litir amháin i ndiaidh iolraí de litreacha, agus ag an deireadh in iúl ag gach pointe cibé an bhfuil an focal bailí nó nach bhfuil mar má tá tú ag litriú an MAT focal, tá MA ní dóigh liom go bhfuil focal bailí, ach MAT é. Agus mar sin i do trie, bheadh ​​sé in iúl go bhfuil tar éis MAT é sin i ndáiríre focal bailí. Tá gach nód i ár trie ag dul iarbhír a bhfuil le sraith de leideanna nód, agus táimid ag dul a bheith acu, go sonrach, 27 de na leideanna nód, ceann amháin le haghaidh gach litir san aibítir chomh maith leis an carachtar apostrophe. Tá gach gné san eagar ag dul féin a chur in iúl go dtí ceann eile nód. Mar sin, más rud é go bhfuil nód NULLComment, más rud é níl aon rud tar éis sin, ansin a fhios againn go níl aon litreacha eile sa seicheamh focal. Ach más rud é nach bhfuil nód NULLComment, ciallaíonn sé sin go bhfuil na litreacha níos mó sa seicheamh litir. Agus ansin thairis sin, léiríonn gach nód bíodh sé an carachtar is déanaí de chuid focal nó nach bhfuil. A ligean ar dul isteach i sampla de trie. An Chéad tá mé an tseomra ar feadh 27 nóid sa eagar. Má tá mé an BAR focal - Má tá mé an BAR focal agus ba mhaith liom a chur isteach i, Is é an chéad litir B, mar sin má tá mo trie folamh, Gurb é B an dara litir den aibítir, mar sin mé ag dul a roghnú chun é seo a chur anseo ar an innéacs. Tá mé ag dul B a bheith acu anseo. B ag dul a bheith ina nód go pointe eile sraith de na carachtair is féidir is féidir a leanúint i ndiaidh an litir B Sa chás seo, tá mé ag déileáil leis an BAR focal, mar sin beidh a téigh anseo. Tar éis A, tá mé an litir R, mar sin ansin le pointí anois ar a meascán féin, agus ansin beidh R anseo. BAR Is focal iomlán, mar sin ansin tá mé ag dul ar T pointe eile a ghlacadh nód go deir go bhfuil an focal sin bailí. Sin nód ag dul freisin go bhfuil sraith de nóid, ach d'fhéadfadh sin a bheith NULLComment. Ach go bunúsach, is féidir é a leanúint ar aghaidh mar sin. Beidh an a bheith ina beagán níos soiléire nuair a théann muid chun sampla éagsúla, mar sin iompróidh díreach le liom ansin. Anois, tá muid BAR taobh istigh d'ár foclóir. Anois, a rá ní mór dúinn an Baz focal. Tús a chur againn le B, agus ní mór dúinn cheana féin B mar cheann de na litreacha sin inár fhoclóir. Sin dhiaidh sin le A. Tá A cheana féin. Ach ansin, in ionad, ní mór dúinn Z seo a leanas. Dá bhrí sin tá ansin gné inár eagar ag dul a bheith Z, agus mar sin ansin go bhfuil ceann ag dul go dtí pointe eile deireadh bailí ar an bhfocal. Mar sin, a fheicimid go bhfuil nuair a leanaimid ar aghaidh trí B agus ansin A, tá dhá roghanna éagsúla faoi láthair in ár foclóir focail a thosaíonn le B agus A. Abair bhíomar ag iarraidh a chur isteach ar an Foobar focal. Ansin, ba mhaith linn a dhéanamh ar iontráil ar F. Arb é F nód a dhíríonn ar raon iomlán. Ba mhaith linn a aimsiú O, téigh go dtí O, naisc O ansin le liosta iomlán. Ba mhaith linn a bheith B agus ansin leanúint ar aghaidh, ba mhaith linn a bheith A agus ansin R. Mar sin, ansin Trasnaíonn Foobar léir ar an mbealach síos go dtí go Foobar focal ceart. Agus mar sin ansin bheadh ​​sé seo a bheith ina focal bailí. Anois, a rá go bhfuil ár gcuid focal seo chugainn san fhoclóir iarbhír an focal Foo. Ba mhaith linn a rá F. Seo a leanas F? I ndáiríre cheana féin go bhfuil spás le haghaidh O, mar sin mé ag dul chun leanúint ar aghaidh. Ní gá dom a dhéanamh ar ceann nua. Leanúint ar aghaidh. Foo Is focal bailí i bhfoclóir seo, mar sin ansin tá mé ag dul a chur in iúl go bhfuil bailí. Má mé stad mo ord ann, a bheadh ​​ceart. Ach má leanamar ár ord ó Foo síos go dtí B agus go raibh díreach FOOB, nach bhfuil FOOB focal, agus ní ar sin le fios mar cheann bailí. I trie, tá tú gach nód in iúl cibé acu tá sé ina focal bailí nó nach bhfuil, agus ansin tá gach nód chomh maith le sraith de 27 leideanna nód go ansin pointe do nóid féin. Seo ar bhealach ar conas b'fhéidir gur mhaith leat a shainmhíniú seo. Mar sin féin, díreach cosúil sa sampla tábla hash, nuair a bhí againn ceann * nód a chur in iúl an tús ár liosta nasctha, táimid ag dul freisin chun iarraidh ar bhealach éigin a fhios agam áit a bhfuil an tús na ár trie. Déanann roinnt daoine glaoch crainn, agus sin an áit a thagann fhréamh as. Mar sin, ba mhaith linn an fhréamh ár crann a dhéanamh cinnte go fanacht againn bunaithe go cibé áit a bhfuil ár trie. Againn cheana féin de chineál a chuaigh thar ar an mbealach féidir leat smaoineamh ar luchtú gach focal sa bhfoclóir. Go bunúsach, le haghaidh gach focal tú ag dul a iarraidh a iterate trí do trie agus a fhios agam go bhfuil gach eilimint sa páistí - ar a dtugtar muid é do leanaí sa chás seo - fhreagraíonn do litir éagsúla, tá tú ag dul ag iarraidh a sheiceáil leis na luachanna ag an innéacs ar leith a fhreagraíonn don litir. Mar sin, smaoineamh léir ar an mbealach ar ais go dtí Caesar agus Vigenere, a fhios agam go bhfuil gach litir is féidir leat cineál léarscáil ar ais go dtí innéacs aibítre, cinnte A trí Z ag dul a bheith éasca go leor a mhapáil ar litir aibítre, ach ar an drochuair, tá huaschamóga freisin carachtar glactha i bhfocail. Níl mé fiú cinnte cad é an luach ASCII, amhlaidh chun go más mian leat teacht ar innéacs chun a chinneadh cé acu is mian leat é a bheith an chéad cheann nó an ceann deireanach, beidh ort a dhéanamh le seiceáil crua códaithe don agus a chur ansin i innéacs 26, mar shampla. Mar sin, ansin tá tú ag seiceáil an luach ar pháistí [i] i gcás [i] fhreagraíonn cibé litir go bhfuil tú ag. Más rud é go NULLComment, Ciallaíonn sé sin nach bhfuil ann faoi láthair aon litreacha is féidir eascraíonn as sin ord roimhe seo, mar sin tá tú ag dul a iarraidh a malloc agus a dhéanamh nód nua agus tá go bhfuil leanaí [i] pointe dó ionas go mbeidh tú a chruthú - nuair a cuireadh isteach le linn litir isteach sa dronuilleog - leanaí ag déanamh neamh-NULLComment agus pointe isteach nód nua. Ach más rud é nach bhfuil NULLComment, cosúil inár cás Foo nuair a bhí againn cheana féin Foobar, leanaimid ar aghaidh, agus nach bhfuil muid ag déanamh riamh nód nua ach leagan amháin is_word go fíor ag deireadh na bhfocal sin. Mar sin, ansin mar roimh, mar gheall ar seo tá tú ag déileáil le gach litir ag an am, tá sé ag dul a bheith níos éasca duit do mhéid, in ionad a bheith a ríomh agus dul tríd an crann ar fad agus ríomh cé mhéad páiste atá agam agus Branching ansin amach, cuimhneamh cé mhéad atá ar an taobh clé agus ar an taobh deas agus rudaí mar sin, tá sé ag dul a bheith a lán níos éasca duit má tá tú a choinneáil ach rian de cé mhéad focail atá tú ag cur i nuair a bhíonn tú ag déileáil le ualaigh. Agus mar sin ansin is féidir go méid ar bhealach ar ais ach athróg domhanda méid. Anois, a sheiceáil. Caighdeáin chéanna mar roimh, nuair a ba mhaith linn a cheadú insensitivity cás. Chomh maith, glacadh againn go bhfuil an teaghráin carachtar amháin aibítre nó huaschamóga toisc go bhfuil leanaí le sraith de 27 ar fad, mar sin gach ceann de na litreacha na haibítre móide an apostrophe. Chun seiceáil cad beidh tú ag iarraidh a dhéanamh beidh tú ag iarraidh chun tús a chur ag an fhréamh mar go mbeidh an fhréamh pointe le sraith ina bhfuil gach ceann de na litreacha is féidir tosú ar fhocal. Tá tú ag dul chun tús a chur ann, Is é agus ansin tá tú ag dul a sheiceáil leis an NULLComment luach nó nach bhfuil, mar má tá an luach NULLComment, ciallaíonn sé sin go nach bhfuil an foclóir bhfuil aon luachanna go bhfuil an litir san ord ar leith. Má tá sé NULLComment, ansin Ciallaíonn sé sin go bhfuil an focal mílitrithe ceart ar shiúl. Ach más rud é nach bhfuil sé NULLComment, ansin is féidir leat leanúint ar aghaidh, a rá go bhfuil chéad litir litir is féidir den chéad uair i focal, mar sin anois is mian liom a sheiceáil má tá an dara litir, go bhfuil ord, laistigh de mo foclóir. Mar sin, tá tú ag dul chun dul go dtí an t-innéacs de na leanaí an nód chéad agus seiceáil an bhfuil an litir sin sa dara. Ansin tú arís an phróisis a sheiceáil cibé an bhfuil an t-ord bailí nó nach bhfuil laistigh de do trie. Aon uair na páistí nód ag an pointe innéacs a margadh saothair, tá a fhios agat nach bhfuil ord ann, ach ansin má shroicheann tú an deireadh an fhocail go atá tú ionchur, ansin ba mhaith leat a sheiceáil anois go bhfuil mé críochnaithe an seicheamh seo agus fuair sé laistigh de mo trie, is é an focal sin bailí nó nach bhfuil? Agus mar sin ansin ba mhaith leat a sheiceáil go bhfuil, agus go bhfuil nuair a má tá tú amach go seicheamh, ansin ba mhaith leat a sheiceáil cibé an bhfuil an focal bailí nó nach bhfuil mar gheall ar cuimhneamh ar ais i gcás roimhe seo gur tharraing mé nuair a bhí againn FOOB, go raibh sraith bailí a fuair muid ach nach raibh sé ina focal iarbhír bailí féin. Mar an gcéanna, do Díluchtaigh ar an iarracht a ba mhaith leat a dhíluchtú gach ceann de na nóid i do trie. Tá brón orm. Cosúil leis na táblaí hash áit i Díluchtaigh freed againn go léir an nóid, i iarracht a ba mhaith linn go saor in aisce freisin gach ceann de na nóid. Beidh Díluchtaigh obair iarbhír éasca ó bhun go barr mar go bhfuil na liostaí bunúsach nasctha. Mar sin, ba mhaith linn a dhéanamh cinnte go atá againn ar aghaidh go dtí gach ceann de na luachanna agus saor in aisce ar fad iad go sainráite. Cad a bhfuil tú ag dul a iarraidh a dhéanamh má tá tú ag obair le trie Tá taisteal go dtí an bun agus saor in aisce leis an nód is ísle is féidir an chéad agus ansin dul suas go dtí gach ceann de na leanaí agus ansin saor in aisce gach ceann de na, dul suas agus ansin saor in aisce, etc Cineál cosúil déileáil leis an ciseal bun an chéad trie agus ag dul ansin barr nuair atá tú freed gach rud. Is sampla maith de ina bhféadfadh feidhm athchúrsach teacht i handy. Nuair atá tú a freed an ciseal bun do trie, ansin a ghlaonn tú Díluchtaigh ar an gcuid eile de, ag déanamh cinnte go saor in aisce tú gach mion - Is féidir leat cineál visualize sé mar iarracht a mion. Mar sin, tú do root anseo. Tá mé díreach tar éis é a shimpliú mar sin ní dóigh liom go bhfuil a tharraingt 26 acu. Mar sin, tá tú seo, agus ansin léiríonn na sraitheanna de na focail i gcás ina bhfuil gach ceann de na ciorcail beag litreacha go bhfuil sraitheanna bailí litreacha. A ligean ar aghaidh ach beagán níos mó. Cad a bhfuil tú ag dul a iarraidh a dhéanamh saor in aisce bun anseo agus ansin saor in aisce an ceann seo agus ansin saor in aisce an ceann seo ag bun roimh saor in aisce tú an ceann is fearr suas anseo mar má tá tú rud éigin saor in aisce sa dara leibhéal anseo, ansin tú a bheadh ​​caillfidh iarbhír an luach anseo. Sin an fáth tá sé tábhachtach i Díluchtaigh do trie a dhéanamh cinnte go saor in aisce tú an bun ar dtús. Cad b'fhéidir gur mhaith leat a dhéanamh ná a rá do gach nód Ba mhaith liom a dhíluchtú gach ceann de na leanaí. Anois go atá againn imithe thar Díluchtaigh ar an modh tábla hash chomh maith leis an modh trie, táimid ag dul a iarraidh chun breathnú ar Valgrind. Valgrind tú ar siúl leis na horduithe seo a leanas. Tá tú valgrind-v. Tá tú ag seiceáil do gach leaks nuair a ritheann tú speller tugadh an téacs áirithe mar gheall ar riachtanais speller a ghlacadh i gcomhad téacs. Mar sin, beidh Valgrind a reáchtáil do chlár, is féidir leat insint cé mhéad bytes leithdháileadh ort, cé mhéad bytes freed tú, agus beidh sé insint duit cé acu freed tú díreach go leor nó cibé acu nach raibh tú saor in aisce go leor, nó uaireanta is féidir leat fiú ró-saor in aisce, cosúil le nód saor in aisce le ar sin bhí freed cheana agus mar sin beidh sé tú ar ais earráidí. Má úsáideann tú Valgrind, beidh sé a thabhairt duit roinnt teachtaireachtaí in iúl cibé acu tá tú saor ceachtar níos lú ná go leor, ach go leor, nó níos mó ná uair go leor. A chuid den pset, tá sé roghnach le dúshlán an Bord Big. Ach nuair a bhíonn muid ag déileáil leis na struchtúir sonraí tá sé de chineál ar spraoi a fheiceáil conas tapa agus conas a éifeachtaí a d'fhéadfadh do struchtúir sonraí a bheith. An bhfuil do thoradh fheidhm hash i go leor na n-imbhuailtí? Nó an bhfuil do shonraí méid mór i ndáiríre? An bhfuil sé go leor ama chun Traverse? I logáil speller, aschur sé cé mhéad uair a úsáideann tú a luchtú, a sheiceáil, méid a dhéanamh, agus a dhíluchtú, agus mar sin iad siúd sa phost i an Bord Big, áit ar féidir leat dul san iomaíocht i gcoinne do rang agus roinnt ball foirne a fheiceáil ag a bhfuil an tapúla spell-checker. Rud amháin gur mhaith liom a thabhairt faoi deara faoi na táblaí hash Tá go bhfuil roinnt feidhmeanna simplí go leor hash go raibh muid ábalta smaoineamh ar. Mar shampla, tá tú 26 buicéid, agus mar sin de gach buicéad fhreagraíonn don chéad litir i bhfocal, ach tá go bhfuil dul chun toradh i dtábla go leor neamhchothrom hash toisc go bhfuil focail a lán níos lú a thosú le X ná tús le M, mar shampla. Is bealach amháin chun dul faoi speller más mian leat a fháil ar gach ceann de na feidhmeanna eile síos, ansin bain úsáid as feidhm simplí hash a bheith in ann a fháil ar do cód ag rith agus ansin dul ar ais agus an méid do tábla hash agus sainmhíniú a athrú. Tá a lán na n-acmhainní ar an Idirlíon le haghaidh feidhmeanna hash, agus sin maidir leis an pset bhfuil tú cead chun taighde a feidhmeanna hash ar an Idirlíon le haghaidh roinnt leideanna agus inspioráid chomh fada agus a dhéanann tú cinnte go luann nuair a fuair tú é as. Tá fáilte romhat a chuardach agus a léirmhíniú roinnt feidhm hash go bhfaighidh tú ar an Idirlíon. Ar ais go bhfuil, d'fhéadfá a bheith in ann a fheiceáil má úsáidtear duine éigin a trie cibé an bhfuil a gcur i bhfeidhm níos tapúla ná do tábla hash nó nach bhfuil. Is féidir leat a chur faoi bhráid an Bord Big amanna éagsúla. Beidh sé taifead d'iontráil is déanaí. Mar sin, b'fhéidir leat athrú ar do fheidhm hash agus ansin a thuiscint go tá sé i ndáiríre a lán níos tapúla nó a lán níos moille ná riamh. Sin le beagán de bhealach spraoiúil. Níl i gcónaí 1 nó 2 bhall foirne a iarracht a dhéanamh an foclóir is moille is féidir, mar sin tá sin i gcónaí spraoi chun breathnú ar. Tá an úsáid le haghaidh pset tú ag rith speller le foclóir roghnach agus ansin comhad téacs éigeantach. De réir réamhshocraithe nuair a ritheann tú speller le comhad ach téacs agus nach shonrú foclóir, tá sé ag dul a bhaint as an gcomhad téacs fhoclóir, an ceann mór san fhillteán cs50/pset5/dictionaries. Tá sin ar cheann os cionn 100,000 focal. Tá siad freisin le foclóir beag a bhfuil focail i bhfad níos lú go CS50 déanta ar do shon. Mar sin féin, is féidir leat an-éasca a dhéanamh ach do foclóir féin más mian leat ach a bheith ag obair i samplaí beag - mar shampla, más mian leat gdb a úsáid agus a fhios agat na luachanna ar leith gur mian leat do tábla hash a mhapáil amach. Mar sin, ach is féidir leat a dhéanamh do chomhad téacs féin ach le BAR, Baz, foo, agus Foobar, a dhéanamh go i gcomhad téacs, ar leithligh iad siúd gach ceann acu le 1 líne, agus a dhéanamh ansin do chomhad téacs féin go bhfuil literally ach b'fhéidir 1 nó 2 focail ionas go mbeidh a fhios agat go díreach cad ba cheart an t-aschur a bheith. Tá cuid de na comhaid téacs samplach go mbeidh an Bord Big nuair a ritheann tú dúshlán a sheiceáil Tá Cogadh agus Síocháin agus Austen Jane úrscéal nó rud éigin mar sin. Mar sin, nuair a bhíonn tú ag tosú amach, tá sé i bhfad níos éasca a dhéanamh do chuid comhad téacs féin go bhfuil ach cúpla focal nó b'fhéidir 10 ionas gur féidir leat a thuar cad ba cheart an toradh a agus seiceáil ansin é a aghaidh sin, mar sin níos mó de shampla rialaithe. Agus mar sin ós rud é tá muid ag déileáil le tuar agus ag tarraingt rudaí thart, arís ba mhaith liom a spreagadh duit a úsáid peann agus páipéar mar tá sé ag dul i ndáiríre chun cabhrú leat leis an gceann seo - ag tarraingt na saigheada, conas an tábla hash nó conas tá do trie, nuair a bhíonn tú freeing rud éigin i gcás ina bhfuil na saigheada ag dul, ag a bhfuil tú ar do go leor, a fheiceann tú aon nasc ag imeacht agus a thagann isteach sa abyss de chuimhne leaked. Mar sin, le do thoil, le do thoil déan iarracht chun rudaí a tharraingt amach fiú roimh a gheobhaidh tú a scríobh cód síos. Rudaí a tharraingt amach ionas go dtuigeann tú conas a bhfuil rudaí ag dul ag obair mar gheall ar ansin mé ráthaíocht go mbainfidh tú a reáchtáil i muddles pointeoir níos lú ann. Gach ceart. Ba mhaith liom a mian leat an chuid is fearr de luck leis an pset. Tá sé is dócha an ceann is deacra. Mar sin, iarracht a thosú go luath, rudaí a tharraingt amach, rudaí a tharraingt amach, agus dea-luck. Ba é seo Walkthrough 5. [CS50.TV]