Miundo ya msingi ya data. Dhana ya jumla ya muundo wa data

Hali ya lazima ya kuhifadhi habari kwenye kumbukumbu ya kompyuta ni uwezo wa kubadilisha habari hii kuwa fomu inayofaa kwa kompyuta. Ikiwa hali hii imefikiwa, inahitajika kuamua muundo unaofaa mahsusi kwa habari iliyopo, ambayo itatoa seti inayohitajika ya uwezo wa kufanya kazi nayo.

Orodha ya pete

Hapa, muundo unaeleweka kama njia ya kuwasilisha habari kupitia ambayo seti ya vitu vya mtu binafsi huunda kitu kilichounganishwa, kilichoamuliwa na uhusiano wao na kila mmoja. Inapopangwa kulingana na sheria fulani na kuunganishwa kimantiki kwa kila mmoja, data inaweza kusindika kwa ufanisi sana, kwa kuwa muundo wa kawaida kwao hutoa seti ya uwezekano wa kusimamia - moja ya sababu ambazo matokeo ya juu yanapatikana katika kutatua matatizo fulani.

Lakini sio kila kitu kinawakilishwa kwa fomu ya kiholela, na labda kuna njia moja tu ya tafsiri yake, kwa hiyo, ujuzi wa miundo yote iliyopo ya data itakuwa faida isiyo na shaka kwa programu. Kwa hivyo, mara nyingi unapaswa kufanya uchaguzi kati ya njia tofauti za kuhifadhi habari, na utendaji wa bidhaa hutegemea uchaguzi huu.

Akizungumza kuhusu teknolojia isiyo ya kompyuta, inawezekana kuonyesha si kesi moja ambapo habari ina muundo wazi. Mfano mzuri ni vitabu vya maudhui mbalimbali. Zimegawanywa katika kurasa, aya na sura, na kawaida huwa na jedwali la yaliyomo, ambayo ni, kiolesura cha kuzitumia. Kwa maana pana, kila kiumbe hai kina muundo; bila hiyo, jambo la kikaboni lisingeweza kuwepo.

Inawezekana kwamba msomaji amekutana na miundo ya data moja kwa moja katika sayansi ya kompyuta, kwa mfano, iliyojengwa katika lugha ya programu. Hizi mara nyingi hujulikana kama aina za data. Hizi ni pamoja na: safu, nambari, kamba, faili, nk.

Njia za kuhifadhi habari, zinazoitwa "rahisi", i.e. hazigawanyiki katika sehemu za sehemu, ni vyema kusoma pamoja na lugha maalum ya programu, au kuzama kwa undani kiini cha kazi yao. Kwa hiyo, miundo tu "iliyounganishwa" itazingatiwa hapa, yale ambayo yanajumuisha rahisi, yaani: safu, orodha, miti na grafu.

Safu.

Safu ni muundo wa data na seti ya kudumu na iliyopangwa ya vipengele sawa (vipengele). Upatikanaji wa vipengele vyovyote vya safu hufanywa na jina na nambari (index) ya kipengele hiki. Idadi ya faharasa huamua ukubwa wa safu. Kwa mfano, safu za moja-dimensional (vekta) na mbili-dimensional (matrices) hupatikana mara nyingi.

Wa kwanza wana index moja, ya mwisho - mbili. Acha safu ya mwelekeo mmoja iitwe A, kisha kupata ufikiaji wa kipengee chake cha i-th utahitaji kutaja jina la safu na nambari ya kipengee kinachohitajika: A[i]. Wakati A ni matrix, inawakilishwa kwa namna ya meza, vipengele ambavyo vinapatikana kwa jina la safu, pamoja na nambari za safu na safu kwenye makutano ambayo kipengele iko: A, wapi. i ni nambari ya safu, j ni nambari ya safu.

Kufanya kazi na safu kunaweza kutofautiana kwa njia fulani katika lugha tofauti za programu, lakini kanuni za kimsingi ni sawa kila mahali. Katika lugha ya Pascal, ufikiaji wa safu ya mwelekeo mmoja na pande mbili hutokea kama ilivyoonyeshwa hapo juu, na, kwa mfano, katika C++ safu ya pande mbili inapaswa kubainishwa kama ifuatavyo: A[i][j]. Vipengele vya safu vinahesabiwa kwa mfuatano. Lugha ya programu huathiri thamani ambayo nambari huanza. Mara nyingi thamani hii ni 0 au 1.

Safu za aina iliyoelezwa huitwa tuli, lakini pia kuna safu ambazo hutofautiana nao kwa njia fulani: nguvu na tofauti. Nguvu ya zamani ina sifa ya ukubwa wa kutofautiana, yaani, wakati programu inavyofanya, ukubwa wa safu ya nguvu inaweza kubadilika. Kazi hii inafanya kufanya kazi na data iwe rahisi zaidi, lakini wakati huo huo unapaswa kutoa dhabihu utendaji, na mchakato yenyewe unakuwa ngumu zaidi.

Kigezo cha lazima cha safu tuli, kama ilivyosemwa, ni usawa wa data iliyohifadhiwa ndani yake. Wakati hali hii haijafikiwa, safu ni tofauti. Matumizi yake ni kutokana na hasara zilizopo katika fomu ya awali, lakini ni haki katika matukio mengi.

Kwa hivyo, hata ikiwa umeamua juu ya muundo na kuchagua safu kama hiyo, hii bado haitoshi. Baada ya yote, safu ni jina la jumla tu, jenasi kwa idadi fulani ya utekelezaji unaowezekana. Kwa hiyo, ni muhimu kuamua juu ya njia maalum ya uwakilishi, na safu inayofaa zaidi.

Orodha.

Orodha ni aina ya data dhahania inayotekelezea seti ya thamani zilizopangwa. Orodha hutofautiana na safu kwa kuwa vipengee vyake hufikiwa kwa kufuatana, ilhali safu ni miundo ya data ya ufikiaji nasibu. Aina hii ya mukhtasari ina utekelezaji kadhaa katika mfumo wa miundo ya data. Baadhi yao yatajadiliwa hapa.

Orodha (orodha iliyounganishwa) ni muundo wa data ambao ni seti yenye ukomo wa vipengele vilivyopangwa vilivyounganishwa kwa kila kimoja kupitia viashiria. Kila kipengele cha muundo kina uwanja na habari fulani, pamoja na pointer kwa kipengele kinachofuata. Tofauti na safu, hakuna ufikiaji wa nasibu kwa vipengele vya orodha.

Orodha iliyounganishwa moja kwa moja

Katika orodha iliyounganishwa moja juu, kipengele cha awali ni orodha ya Kichwa (jina la kiholela) na kila kitu kingine kinaitwa mkia. Mkia wa orodha una vipengele vilivyogawanywa katika sehemu mbili: habari (uwanja wa habari) na indexical (uwanja unaofuata). Kipengele cha mwisho, badala ya pointer, kina kiondoa orodha - nil.

Orodha iliyounganishwa moja sio rahisi sana, kwa sababu kutoka kwa hatua moja inawezekana tu kufikia hatua inayofuata, na hivyo kusonga hadi mwisho. Wakati, pamoja na pointer kwa kipengele kinachofuata, pia kuna pointer kwa moja uliopita, basi orodha hiyo inaitwa kuunganishwa mara mbili.

Orodha iliyounganishwa mara mbili

Uwezo wa kusonga mbele na nyuma ni muhimu kwa baadhi ya shughuli, lakini viashiria vya ziada vinahitaji kumbukumbu zaidi kuliko inavyohitajika katika orodha sawa iliyounganishwa moja kwa moja.

Kwa aina mbili za orodha zilizoelezwa hapo juu, kuna aina ndogo inayoitwa orodha ya mviringo. Unaweza kutengeneza orodha ya duara kutoka kwa orodha iliyounganishwa moja kwa moja kwa kuongeza kielekezi kimoja tu kwenye kipengele cha mwisho ili kirejelee cha kwanza. Na kwa moja iliyounganishwa mara mbili, viashiria viwili vinahitajika: kwa vipengele vya kwanza na vya mwisho.

Orodha ya pete

Mbali na aina za miundo ya orodha inayozingatiwa, kuna njia zingine za kupanga data kwa kutumia aina ya "orodha", lakini wao, kama sheria, ni sawa na ile iliyojadiliwa, kwa hivyo itaachwa hapa.

Mbali na tofauti katika viunganisho, orodha zinagawanywa na mbinu za kufanya kazi na data. Baadhi ya njia hizi zinajadiliwa hapa chini.

Rafu.

Rafu

Stack ina sifa ya ukweli kwamba vipengele vyake vinaweza kupatikana tu kutoka mwisho mmoja, unaoitwa juu ya stack, kwa maneno mengine: stack ni muundo wa data unaofanya kazi kulingana na kanuni ya LIFO (ya mwisho katika - ya kwanza). Ni bora kuonyesha muundo huu wa data katika mfumo wa orodha ya wima, kwa mfano, safu ya vitu kadhaa, ambapo ili kutumia moja yao unahitaji kuinua vitu vyote vilivyo juu yake, na unaweza kuweka tu. kipengee kilicho juu ya rafu.

Katika orodha iliyoonyeshwa moja iliyounganishwa, shughuli kwenye vipengele hutokea madhubuti kwa mwisho mmoja: kujumuisha kipengele kinachohitajika kwenye seli ya tano, ni muhimu kuwatenga kipengele ambacho kinachukua nafasi hii. Ikiwa kulikuwa na, kwa mfano, vipengele 6, na kipengele maalum pia kilihitajika kuingizwa kwenye kiini cha tano, basi vipengele viwili vingepaswa kutengwa.

Foleni.

Muundo wa data ya Foleni hutumia kanuni ya shirika ya FIFO (Kwanza Katika, Kwanza). Kwa maana, njia hii ni ya haki zaidi kuliko ile ambayo stack inafanya kazi, kwa sababu sheria rahisi inayozingatia foleni ya kawaida katika maduka na hospitali mbalimbali inachukuliwa kuwa ya haki kabisa, na ni hasa hii ndiyo msingi wa muundo huu. Wacha uchunguzi huu uwe mfano. Kwa kusema kabisa, foleni ni orodha ambayo vipengele vinaweza kuongezwa tu hadi mwisho, na vinaweza kuondolewa kutoka upande mwingine, unaoitwa mwanzo wa orodha.


Foleni

Des

Deque (foleni iliyoishia mara mbili) ni rundo lenye ncha mbili. Hakika, licha ya tafsiri maalum, staha inaweza kufafanuliwa sio tu kama foleni ya njia mbili, lakini pia kama safu ambayo ina ncha mbili. Hii ina maana kwamba aina hii ya orodha inaruhusu vipengele kuongezwa kwa mwanzo na mwisho, na sawa ni kweli kwa uendeshaji wa kurejesha.


Des

Muundo huu wakati huo huo hufanya kazi kwa njia mbili za kuandaa data: FIFO na LIFO. Kwa hiyo, inaweza kuhusishwa na kitengo tofauti cha programu kilichopatikana kwa muhtasari wa aina mbili za awali za orodha.

Grafu.

Tawi la hisabati tupu ambalo hujishughulisha na uchunguzi wa grafu huitwa nadharia ya grafu. Nadharia ya grafu inachunguza kwa undani dhana, mali, mbinu za uwakilishi na maeneo ya matumizi ya vitu hivi vya hisabati. Tunavutiwa tu na vipengele vyake ambavyo ni muhimu katika upangaji programu.

Grafu ni mkusanyiko wa pointi zilizounganishwa na mistari. Pointi huitwa wima (nodi), na mistari inaitwa kingo (arcs).

Kama inavyoonyeshwa kwenye takwimu, kuna aina mbili kuu za grafu: iliyoelekezwa na isiyoelekezwa. Katika kwanza, kando kando huelekezwa, yaani, kuna mwelekeo mmoja tu unaopatikana kati ya wima mbili zilizounganishwa, kwa mfano, unaweza kwenda kutoka kwenye vertex 1 hadi vertex 2, lakini si kinyume chake. Katika grafu iliyounganishwa isiyoelekezwa, unaweza kwenda kutoka kwa kila vertex hadi kila na nyuma. Kesi maalum ya aina hizi mbili ni grafu iliyochanganywa. Inajulikana kwa uwepo wa pande zote mbili zilizoelekezwa na zisizo na mwelekeo.

Kiwango cha ndani cha vertex ni idadi ya kingo zinazoingia ndani yake, digrii ya nje ni idadi ya kingo zinazotoka.

Kingo za grafu sio lazima ziwe sawa, na wima huteuliwa kwa nambari, kama inavyoonyeshwa kwenye takwimu. Kwa kuongezea, kuna grafu ambazo kingo zake zimepewa dhamana fulani; zinaitwa grafu zilizo na uzani, na dhamana hii ni uzani wa ukingo. Wakati ncha zote mbili za makali zinapatana, yaani, makali huondoka na kuingia kwenye vertex F, basi makali hayo huitwa kitanzi.

Grafu hutumiwa sana katika miundo iliyoundwa na binadamu, kwa mfano, katika mitandao ya kompyuta na usafiri, na teknolojia za mtandao. Mbinu za uwakilishi maalum huruhusu grafu kutumika katika sayansi ya kompyuta (katika kompyuta). Maarufu zaidi kati yao: "Adjacency Matrix", "Incident Matrix", "Adjacency List", "Edge List". Mbili za kwanza, kama jina linamaanisha, tumia matrix kuwakilisha grafu, na mbili za mwisho hutumia orodha.

Miti.

Mti usio na agizo

Mti kama kitu cha hisabati ni kifupi kutoka kwa vitengo visivyo na majina vinavyopatikana katika asili. Kufanana kwa muundo wa miti ya asili na grafu ya aina fulani inaonyesha dhana ya kuanzisha mlinganisho kati yao. Yaani, na kuunganishwa na wakati huo huo acyclic (bila mizunguko) grafu. Mwisho katika muundo wao unafanana na miti, lakini kuna tofauti kadhaa, kwa mfano, ni kawaida kuonyesha miti ya hisabati na mzizi ulio juu, ambayo ni, matawi yote "yanakua" kutoka juu hadi chini. Inajulikana kuwa kwa asili hii sio hivyo kabisa.

Kwa kuwa mti kimsingi ni grafu, fasili zake nyingi zinapatana na mwisho au zinafanana kimawazo. Kwa hivyo nodi ya mizizi (vertex 6) kwenye muundo wa mti ndio vertex (nodi) pekee inayoonyeshwa na kutokuwepo kwa mababu, i.e., kwamba hakuna vertex nyingine inayorejelea, na kutoka kwa nodi ya mizizi yenyewe unaweza kufikia yoyote ya zilizopo. mti wa vertices, unaofuata kutoka kwa mali ya kuunganishwa kwa muundo huu. Nodes ambazo hazirejelei nodes nyingine yoyote, kwa maneno mengine, hazina watoto, huitwa majani (2, 3, 9), au nodes za mwisho. Vipengele vilivyo kati ya nodi ya mizizi na majani ni nodi za kati (1, 1, 7, 8). Kila nodi ya mti ina babu moja tu, au ikiwa ni nodi ya mizizi, haina.

Mti mdogo ni sehemu ya mti ambayo inajumuisha nodi ya mizizi na nodi zake zote za uzao. Kwa hivyo, kwa mfano, katika takwimu moja ya subtrees ni pamoja na mzizi 8 na vipengele 2, 1, 9.

Unaweza kufanya shughuli nyingi kwenye mti, kama vile kutafuta vipengele, kufuta vipengele na miti midogo, kuingiza miti midogo, kutafuta nodi za mizizi kwa baadhi ya vipeo, n.k. Mojawapo ya shughuli muhimu zaidi ni kuvuka mti. Kuna njia kadhaa za kurekebisha. Maarufu zaidi kati yao ni: ulinganifu, moja kwa moja na reverse bypass. Wakati wa kupita mbele, nodi za mababu hutembelewa kabla ya vizazi vyao, na kinyume chake, hali hiyo inabadilishwa. Katika traversal ulinganifu, subtrees ya mti kuu ni kutazamwa kwa zamu.

Uwasilishaji wa data katika muundo unaozingatiwa ni wa manufaa ikiwa maelezo yana safu ya wazi. Kwa mfano, kufanya kazi na data kuhusu jenara na spishi za kibayolojia, majina ya kazi, vitu vya kijiografia, n.k. kunahitaji muundo ulioonyeshwa kwa mpangilio, kama vile miti ya hisabati.

AINA NA MIUNDO YA DATA

Miongozo ya nidhamu "Algorithms na Miundo ya Data"

Iliyoundwa na O.L. Chagaeva

Imetayarishwa na Idara ya Zana za Programu na Mifumo ya UrFU ya Taasisi ya Kielimu ya Shirikisho

Utangulizi

KATIKA Katika ulimwengu unaotuzunguka kuna aina kubwa ya vitu, vitu, matukio, michakato inayoonyeshwa kupitia habari.

Kila chombo (kitu, jambo) kinachowakilishwa na habari kina idadi ya mali tabia yake (sifa, ishara, vigezo, sifa, wakati). Kwa mfano, sifa za nyenzo ni uzito wake, vipimo, daraja, bei, nambari ya bidhaa, n.k. Alama za sifa zinazoonyesha huluki kama shirika la ununuzi ni jina, uhusiano wa idara, anwani, nambari ya akaunti ya sasa katika Benki ya Serikali. , na kadhalika.

Tabia za chombo cha kimwili zinaonyeshwa kwa kutumia vigezo, ambavyo ni vitengo vya msingi vya habari na huitwa maelezo.

Prop ni kipengele kisichoweza kugawanywa kimantiki cha seti yoyote changamano ya taarifa, inayohusiana na sifa fulani ya kitu au mchakato unaoonyeshwa na taarifa.

KATIKA ya habari iliyochakatwa, maelezo yanawakilishwa kana kwamba na "atomi", ambayo miundo mingine yote, ngumu zaidi ya uundaji wa habari hukusanywa. Na kinyume chake, vitengo vya habari vya ugumu wowote vinaweza, kwa mtengano wa mlolongo katika sehemu zao za msingi, hatimaye kugawanywa katika vipengele vile - idadi tofauti ambayo haiwezi kugawanywa zaidi kimantiki. Vipengele kama hivyo vya msingi vitakuwa maelezo.

Visawe vingine vya propu vinavyopatikana mara kwa mara katika fasihi ni kipengele, uga, istilahi, sifa sifa.

Kila prop ina jina. Wakati algorithmizing na programu kwa madhumuni ya uandishi wa kompakt, vifupisho hutumiwa mara nyingi majina ya vitambulisho, na utekelezaji mahususi kwa kawaida huzuia urefu, alfabeti na upeo wao. Katika hali nyingine, inaruhusiwa pia kutumia visawe kwa majina ya maelezo, pamoja na majina kamili ambayo hutumiwa tu katika hati za nje, kwa mfano, kama vichwa vya safu za ripoti.

Kila sifa ni asili katika seti fulani ya ukomo wa maadili, kulingana na sifa za sifa ya kitu (jambo) ambayo sifa hii huonyeshwa kwa taarifa. Hii ni seti inayoitwa darasa la maadili, moja, kwa mfano, kwa kigezo "joto la mgonjwa" na nyingine kwa sifa "jinsia ya mgonjwa."

Thamani ya sifa, kwa hivyo, kwa kila wakati uliopewa kwa wakati ni moja wapo ya nafasi za darasa la maadili ya sifa hii, ambayo, kama inavyotarajiwa, inaonyesha hali inayolingana (kutoka kwa seti ya majimbo) ya mali ya. kitu (uzushi) ambacho kinaangazia sifa. Kwa hivyo, thamani ya sasa ya kutofautiana kwa "joto la mgonjwa" inaweza kuwa 37.4 °, na "jinsia ya mgonjwa" inaweza kuwa "kiume". Kwa maneno mengine, thamani ya sifa hutumiwa kuwakilisha thamani ya mali inayolingana ya huluki.

Kuna idadi ya aina za sifa kulingana na aina za maadili wanazoweza kuwa nazo. Aina za kawaida za props, hata hivyo, ni nambari na maandishi.

Maelezo ya aina ya nambari yanaonyesha mali ya idadi ya vyombo vilivyopatikana kama matokeo ya kuhesabu vitengo vya asili, kupima, uzani, mahesabu kulingana na data zingine za jumla, nk. Kwa hivyo, maadili ya maelezo kama haya ni nambari na tabia zao zote. vipengele na sifa.

Katika uwakilishi maalum, aina kadhaa za idadi ya nambari zinaonekana kulingana na darasa la nambari, mfumo wa nambari, fixation ya uhakika wa decimal, ufungaji na wengine; vikwazo vinawekwa kwa anuwai ya nambari, muundo wa uwakilishi wao kwenye pembejeo/pato na media anuwai, hata ndani ya utekelezaji sawa. Kwa kuwa sifa zote za aina ya nambari hutumiwa kikamilifu katika shughuli mbalimbali za hesabu, na nyingi kwa ujumla huundwa kutokana na shughuli kama hizo, tofauti zilizoonyeshwa na mapungufu yanapaswa kukumbushwa kila wakati, pamoja na hitaji la kifaa sahihi cha ubadilishaji.

Maelezo ya aina ya maandishi yanaelezea, kama sheria, sifa za ubora wa vyombo na kuashiria hali ambayo mchakato ulio chini ya utafiti ulifanyika na fulani au

maadili mengine ya nambari. Kwa hiyo, maelezo hayo huitwa sifa.

Thamani za kipengele ni mlolongo wa herufi (herufi, nambari, herufi mbalimbali na nyadhifa maalum), zinazoitwa mifuatano, au maandishi.

Seti kamili ya alama zote zinazoweza kutofautishwa kwa jozi za mfumo fulani wa habari hujumuisha alfabeti yake, kulingana na asili ya kazi, njia za kiufundi za usindikaji wa data zilizotumiwa na mambo mengine. Aidha, katika hatua tofauti za usindikaji na hata ndani ya mfumo huo wa kompyuta, inawezekana kutumia alfabeti tofauti.

Saizi ya alfabeti (idadi ya alama tofauti ambazo zinaweza kuwa katika nambari moja ya thamani) na muundo wake (seti) zinahusiana moja kwa moja na kutatua shida zifuatazo:

usimbuaji na usimbuaji,

kurekodi kompakt ya maadili ya vitengo vya habari,

uhifadhi bora wa data, kuongeza kasi ya utaftaji wao, usambazaji, pembejeo kwenye kompyuta,

kupokea habari kutoka kwa mashine kwa njia inayofaa zaidi kwa matumizi,

kupunguza gharama za kila aina ya uandishi upya.

Kwa hiyo, uchaguzi wa alfabeti unapewa umuhimu mkubwa.

Kutumia habari katika algorithmization na programu, umuhimu mkubwa hupewa dhana kama vile aina na muundo wa data.

1. AINA ZA DATA

Mchakato wa kompyuta kwenye kompyuta unatekelezwa, kama inavyojulikana, kwa msaada wa programu na data. Programu yenyewe pia inahusu data. Kwa hiyo, tunaweza kusema kwamba data inaelezea habari yoyote ambayo kompyuta inaweza kufanya kazi nayo. Katika kesi hii, habari inaeleweka kama ukweli wowote na maarifa juu ya vitu vya ulimwengu wa kweli, michakato na uhusiano na miunganisho kati yao. Data yote ina sifa ya idadi ya sifa (vipengele, maelezo), ikiwa ni pamoja na thamani.

Mbali na maana, vipengele vile ni pamoja na dhana ya "aina ya data". Aina ya datum imedhamiriwa na seti ya maadili ya datum na seti ya shughuli ambazo zinaweza kufanywa kwa maadili haya kulingana na mali zao zinazojulikana. Kwa hivyo, aina ya thamani fulani huamua shughuli zinazoruhusiwa kwenye thamani inayolingana.

Lugha za programu kwa kawaida hutumia aina za data za kawaida kama vile nambari kamili, halisi, herufi, biti, kielekezi, n.k.

2. MIUNDO YA DATA

Kipengele cha aina hii ni unyenyekevu wa shirika (unstructuredness).

Muundo wa data ni mkusanyo wa vipengele vya data kati ya ambayo kuna uhusiano fulani, na vipengele vya data vinaweza kuwa data rahisi (scalar) au miundo ya data.

Kwa hivyo, muundo unaweza kufafanuliwa kama ifuatavyo: S = (D, R), ambapo D ni seti ya vipengele vya data, R ni seti ya mahusiano kati ya vipengele vya data.

Mahusiano yote ya kipengele kimoja cha data kwa wengine huunda kipengele cha uhusiano kinachohusishwa na kipengele cha data husika.

Uwakilishi wa picha wa muundo unapaswa kuonyesha vipengele vyake vya data na miunganisho (mahusiano kati yao), kwa hivyo ni rahisi kuonyesha muundo kama grafu. Katika kesi hii, vipeo vya grafu vinaweza kufasiriwa kama vipengele vya data, na uhusiano kati ya vipengele vya data vinahusiana na arcs zilizoelekezwa au kingo zisizoelekezwa (Mchoro 1).

Muundo wa data ulioelezewa na kuwakilishwa kwa njia hii huitwa abstract au mantiki, kwani inazingatiwa bila kuzingatia uwakilishi wake katika kumbukumbu ya kompyuta. Lakini muundo wowote wa data lazima uwakilishwe kwenye kumbukumbu ya mashine. Muundo huu wa data unaitwa muundo halisi, muundo wa hifadhi, muundo wa ndani, au muundo wa kumbukumbu.

Mchoro 1. Grafu isiyoelekezwa (a) na iliyoelekezwa (b).

Kwa hivyo, muundo wa kimwili wa data unaonyesha jinsi data inawakilishwa katika kumbukumbu ya kompyuta.

Kwa ujumla, kuna tofauti kati ya muundo wa kimantiki na muundo wake wa kimwili unaofanana, kiwango ambacho kinategemea muundo yenyewe na sifa za mazingira ya kimwili ambayo lazima ionekane.

Kwa mfano, kutoka kwa mtazamo wa lugha za programu, safu mbili-dimensional ni meza ya mstatili, na katika kumbukumbu ni mlolongo wa mstari wa seli, ambayo kila moja huhifadhi thamani ya moja ya vipengele vya safu, na vipengele vya safu. hupangwa kwa safu (au safu).

Bila shaka, lazima kuwe na utaratibu kati ya muundo wa kimantiki na kimwili ambayo inaruhusu muundo wa mantiki kupangwa kwa muundo wa kimwili.

Kwa hivyo, kila muundo wa data unaweza kuwa na sifa ya uwakilishi wake wa kimantiki (abstract) na kimwili (saruji), pamoja na seti ya shughuli katika ngazi hizi mbili za uwakilishi wa muundo (Mchoro 2).

Operesheni kwenye muundo wa mantiki

Muundo wa data wa kimantiki

Operesheni kwenye muundo wa mwili

Muundo wa data ya kimwili

Mchele. 2. Kuchora ramani kati ya uwakilishi wa kimantiki na halisi wa muundo wa data

2.1. Uainishaji wa miundo ya data

KATIKA Kulingana na kutokuwepo au kuwepo kwa miunganisho iliyofafanuliwa kwa uwazi kati ya vipengele vya data, mtu anapaswa kutofautisha kati ya miundo isiyohusiana (vekta, safu, kamba, safu, foleni) na miundo iliyounganishwa (orodha zilizounganishwa).

Kipengele muhimu cha muundo ni kutofautiana kwake - mabadiliko katika idadi ya vipengele na / au uhusiano kati ya vipengele vya muundo. Thamani ya kipengele cha data haimaanishi, kwa kuwa katika kesi hii mali hii itakuwa tabia ya miundo yote ya data, isipokuwa uwezekano wa kudumu na data iliyohifadhiwa katika ROM. Kulingana na kutofautiana, miundo ya tuli, ya nusu-tuli na yenye nguvu inajulikana.

Kipengele muhimu cha muundo wa data ni hali ya kuagiza ya vipengele vyake. Kulingana na kigezo hiki, miundo inaweza kugawanywa katika kupangwa kwa mstari, au mstari, na usio na mstari.

Kulingana na asili ya mpangilio wa jamaa wa vitu kwenye kumbukumbu, miundo ya mstari inaweza kugawanywa katika muundo na usambazaji wa mlolongo wa vitu vyao kwenye kumbukumbu (vekta, kamba, safu, safu, foleni) na miundo iliyo na usambazaji wa kiholela wa vitu ndani. kumbukumbu (iliyounganishwa kwa urahisi, imeunganishwa mara mbili, imeunganishwa kwa mzunguko, orodha za vyama). Mifano ya miundo isiyo ya mstari ni orodha zilizounganishwa nyingi, miundo ya miti, na miundo ya jumla ya grafu.

2.2. Miundo rahisi zaidi ya tuli

KWA Miundo rahisi zaidi ya data kawaida hujumuisha vekta, safu, rekodi na majedwali. Wao ni sifa ya sifa zifuatazo:

uthabiti wa muundo katika kipindi chote cha uwepo wake;

mshikamano wa vitu na mwendelezo wa eneo la kumbukumbu lililotengwa kwa vitu vyote vya muundo mara moja; unyenyekevu na uthabiti wa uhusiano kati ya vitu.

miundo ambayo inakuwezesha kuwatenga habari kuhusu mahusiano haya kutoka kwa eneo la kumbukumbu lililotengwa kwa vipengele vya muundo na kuihifadhi, kwa mfano, katika fomu ya compact katika maelezo.

Kutokana na mali hizi, vectors, safu, rekodi na meza zinachukuliwa kuwa miundo ya tuli.

2.2.1. Vekta

Vekta ni seti fupi iliyopangwa ya data rahisi au scalars za aina moja. Kutoka kwa mtazamo wa kijiometri, vector hufafanua hatua katika nafasi ya multidimensional, kuratibu ambazo ni maadili ya vipengele vya vector.

Vipengele vya vector ni katika uhusiano pekee unaowezekana na kila mmoja - uhusiano wa mfululizo wa haraka. Mlolongo mkali wa mambo ya vector inaruhusu

zihesabu kwa nambari kamili - fahirisi. Muundo wa kimantiki wa vekta unaelezewa kabisa na nambari na aina ya vitu vyake. Kwa mfano, safu ya ndani ni safu kamili inayojumuisha vipengele 10.

Operesheni muhimu zaidi kwenye vector ni upatikanaji wa vipengele vyake. Mara kipengele kinapopatikana, operesheni yoyote ambayo ina maana kwa aina ya data iliyochaguliwa inaweza kufanywa juu yake.

Katika ngazi ya mantiki, kufikia kipengele cha vector, inatosha kutaja jina la vector na thamani ya index ya kipengele sambamba. Kwa mfano: safu + safu.

Muundo wa kimwili wa vector ni mlolongo wa sehemu za kumbukumbu za urefu sawa, inayoitwa mashamba au inafaa, ambayo kila mmoja imeundwa kuhifadhi kipengele kimoja cha vector. Sehemu inaweza kuwa saizi ya seli ya kumbukumbu inayoweza kushughulikiwa au kuendana na kundi zima la seli za kumbukumbu zinazofuatana.

Mara nyingi muundo wa kimwili unahusishwa na maelezo au kichwa ambacho kina habari kuhusu muundo wa kimwili. Descriptor ni muhimu, kwa mfano, katika kesi wakati vipimo vya mpaka wa vector vinajulikana tu katika hatua ya utekelezaji wa programu.

Kielezi pia huhifadhiwa kwenye kumbukumbu ya mashine na ni muundo unaoitwa rekodi. Kwa vekta, kielezi kawaida huhifadhi jina lake, saizi, maadili ya faharisi ya mipaka, aina ya kipengee, uwanja au saizi ya yanayopangwa, na anwani ya kipengele cha kwanza cha vekta (uwanja unaohifadhi kipengele hiki).

2.2.2. Safu

Safu ni vekta ambapo kila kipengele ni vekta. Kwa upande wake, vipengele vya vekta ambayo ni kipengele cha safu pia inaweza kuwa vectors. Mchakato wa kuhama kutoka kipengele hadi kipengele cha kipengele hiki, na kadhalika, mapema au baadaye lazima mwisho na scalar ya aina fulani ya data, na vipengele vyote vya scalar vya safu lazima vinahusiana na aina hii (Mchoro 3).

Mchele. 3. Aina ya safu ya multidimensional

Mchoro wa 3 unaonyesha kuonekana kwa safu nyingi: kila nodi ya kimiani ina kipengele cha safu. Kwa hivyo, mwelekeo wake ni (3,3,2).

Kama ilivyo kwa vekta, operesheni muhimu zaidi ya msingi kwa safu ni ufikiaji wa kipengee chake. Katika kiwango cha muundo wa kimantiki, inatekelezwa kwa kutumia jina la mkusanyiko na seti iliyopangwa ya fahirisi ambazo hutambua kipekee kipengele cha safu. Kwa mfano: safu[i][j].

Tofauti na vector, kwa safu ya jumla mabadiliko ya muundo wa mantiki katika moja ya kimwili ina fomu ngumu zaidi. Ubadilishaji huu unakamilishwa kupitia mchakato wa uwekaji mstari ambao unapanga muundo wa kimantiki wa miraba mingi wa safu hadi muundo wa kimaumbile wenye mwelekeo mmoja. Muundo huu wa kimwili ni mfuatano uliopangwa kwa mstari wa vipengele vya safu. Kwa hivyo, muundo wa kimwili wa safu ya multidimensional ni sawa na muundo wa kimwili wa vector.

Licha ya hili, maelezo ya safu ya multidimensional ni tofauti na maelezo ya vekta. Kwa mfano, inapaswa kuhifadhi habari kuhusu ukubwa wa safu na njia ya kuagiza vipengele (kwa safu au safu).

2.2.3. Rekodi

Rekodi ni seti ya vipengele vilivyopangwa, kwa ujumla vyenye data ya aina mbalimbali.

Vipengele vya rekodi mara nyingi huitwa mashamba. Rekodi ni dhana ya jumla ya vekta ambayo hauhitaji usawa au

Wazo la muundo wa data ni la msingi sana hivi kwamba ni ngumu kupata ufafanuzi wake rahisi. Kazi inakuwa rahisi ikiwa tunajaribu kuunda dhana hii kuhusiana na aina za data na vigezo. Kama unavyojua, mpango ni umoja wa algorithm (taratibu, kazi) na data wanayochakata. Data, kwa upande wake, inafafanuliwa na aina za data za msingi na zinazotokana - uwakilishi "bora" wa vigeu vya kipeo kisichobadilika na seti za utendakazi zinazojulikana juu yake na vipengele vyake. Vigezo huitwa maeneo ya kumbukumbu ambayo aina za data zilizoundwa "huwekwa".
Katika programu, inawezekana kila wakati kutofautisha vikundi vya uhusiano usio wa moja kwa moja (kwa kutumia data katika taratibu na kazi sawa) na kuhusiana moja kwa moja (kwa uwepo wa mahusiano kupitia viashiria) vigezo. Kwa makadirio ya kwanza, zinaweza kuzingatiwa miundo ya data.

Kuna miundo ya data (aina) RAHISI (ya msingi, ya awali) na INTEGRATED (iliyoundwa, yenye mchanganyiko, changamano). Miundo rahisi ya data ni ile ambayo haiwezi kugawanywa katika vipengele vikubwa kuliko biti. Kutoka kwa mtazamo wa muundo wa kimwili, ukweli muhimu ni kwamba katika usanifu wa mashine fulani, katika mfumo fulani wa programu, tunaweza kusema mapema nini ukubwa wa aina rahisi itakuwa na nini muundo wa uwekaji wake. kumbukumbu itakuwa. Kwa mtazamo wa kimantiki, data rahisi ni vitengo visivyoweza kugawanywa. Iliyounganishwa ni miundo ya data ambayo vipengele vyake ni miundo mingine ya data - rahisi au, kwa upande wake, jumuishi. Miundo iliyounganishwa ya data huundwa na mpangaji programu kwa kutumia zana za ujumuishaji wa data zinazotolewa na lugha za programu.

Kulingana na kutokuwepo au kuwepo kwa miunganisho iliyofafanuliwa kwa uwazi kati ya vipengele vya data, mtu anapaswa kutofautisha kati ya miundo ILIYOONDOLEWA (vekta, safu, mifuatano, rafu, foleni) na miundo ILIYOUNGANISHWA (orodha zilizounganishwa).

Kipengele muhimu sana cha muundo wa data ni kutofautiana kwake - mabadiliko katika idadi ya vipengele na (au) uhusiano kati ya vipengele vya muundo. Ufafanuzi wa utofauti wa muundo hauakisi ukweli kwamba thamani za vipengele vya data hubadilika, kwani katika kesi hii miundo yote ya data itakuwa na sifa ya kubadilika. Kulingana na kutofautiana, miundo inajulikana: STATIC, SEMI-STATIC, DYNAMIC. Uainishaji wa miundo ya data kulingana na utofauti umeonyeshwa kwenye Mtini. 1.1. Miundo ya msingi ya data, tuli, nusu-tuli na yenye nguvu, ni tabia ya RAM na mara nyingi huitwa miundo ya uendeshaji. Miundo ya faili inalingana na miundo ya data kwa kumbukumbu ya nje.



Mchele. 1.1. Uainishaji wa miundo ya data

Kipengele muhimu cha muundo wa data ni hali ya kuagiza ya vipengele vyake. Kulingana na kipengele hiki, miundo inaweza kugawanywa katika miundo LINEAR NA ISIYO YA LINEAR.

Kulingana na asili ya mpangilio wa jamaa wa vitu kwenye kumbukumbu, miundo ya mstari inaweza kugawanywa katika muundo na usambazaji wa CONSTIST wa vitu kwenye kumbukumbu (vekta, kamba, safu, safu, foleni) na miundo iliyo na usambazaji wa vitu vilivyounganishwa kwa kumbukumbu (kwa urahisi). zilizounganishwa, orodha zilizounganishwa mara mbili). Mfano wa miundo isiyo ya mstari ni orodha nyingi zilizounganishwa, miti, grafu.

Katika lugha za programu, dhana ya "miundo ya data" inahusiana kwa karibu na dhana ya "aina za data". Data yoyote, i.e. mara kwa mara, vigezo, maadili ya kazi au misemo ni sifa ya aina zao.

Taarifa kwa kila aina inabainisha wazi:

· 1) muundo wa kuhifadhi data wa aina maalum, i.e. kugawa kumbukumbu na kuwakilisha data ndani yake, kwa upande mmoja, na kutafsiri uwakilishi wa binary, kwa upande mwingine;

2) seti ya maadili yanayoruhusiwa ambayo hii au kitu cha aina iliyoelezewa inaweza kuwa nayo;

· 3) seti ya shughuli halali ambazo zinatumika kwa kitu cha aina iliyoelezwa.

DATA STRUCTURE ni seti ya kimwili (aina za data) na kimantiki (algorithm, utendakazi) vigezo vinavyohusiana na thamani zake.

Kumbuka kuwa wazo la muundo wa data halihusiani tu na vijiti vinavyounda, lakini pia na algorithms (kazi) ambazo sio tu zinaunganisha vigezo kwa kila mmoja, lakini pia huamua maadili ya ndani ambayo yanapaswa pia kuwa tabia. ya muundo huu wa data. Kwa mfano, mlolongo wa thamani chanya zilizowekwa katika safu na kuwa na mwelekeo tofauti (muundo wa data) unaweza kuwa na kikomo cha null. Shughuli zote za kuzalisha na kuangalia kikomo hiki zinatekelezwa na utendakazi. Kwa hivyo, tunaweza kusema kwamba sehemu kubwa ya muundo wa data ni "waya ngumu" katika algorithms kwa usindikaji wake.
Njia ya kufafanua vigezo kupitia aina za data zinazojulikana kwetu ni sifa ya ukweli kwamba, kwanza, idadi ya vigezo katika programu ni fasta, na pili, mwelekeo wao hauwezi kubadilishwa wakati programu inaendesha. Ikiwa uhusiano kati ya vigezo hivi ni zaidi au chini ya mara kwa mara, basi miundo hiyo ya data inaweza kuitwa tuli.

STATIC DATA STRUCTURE - seti ya idadi isiyobadilika ya vigezo vya mwelekeo wa mara kwa mara na asili isiyobadilika ya miunganisho kati yao.
Kinyume chake, ikiwa mojawapo ya vigezo vya muundo wa data—idadi ya vigeu, ukubwa wao, au uhusiano kati yao—kibadilika wakati programu inaendeshwa, basi miundo kama hiyo ya data inaitwa dynamic.

DYNAMIC DATA STRUCTURE - seti ya vigezo, idadi, mwelekeo au asili ya mahusiano kati ya ambayo mabadiliko wakati wa uendeshaji wa programu.

Miundo ya data inayobadilika inategemea vipengele viwili vya lugha ya programu:

· vigezo vinavyobadilika, idadi ambayo inaweza kubadilika na hatimaye kuamuliwa na programu yenyewe. Kwa kuongeza, uwezo wa kuunda safu za nguvu hutuwezesha kuzungumza juu ya data ya vipimo vya kutofautiana;

· viashiria vinavyotoa uhusiano wa moja kwa moja kati ya data na uwezo wa kubadilisha miunganisho hii.

Kwa hivyo, ufafanuzi ufuatao ni karibu na ukweli: miundo ya data yenye nguvu ni vigezo vya nguvu na safu zilizounganishwa na viashiria.
Kuzungumza juu ya muundo wa data, hatupaswi kusahau kuwa vigezo vya kawaida viko kwenye RAM (kumbukumbu ya ndani ya kompyuta). Kwa hivyo, miundo ya data kawaida pia ina kitu cha kufanya na kumbukumbu. Hata hivyo, pia kuna kumbukumbu ya nje, ambayo kwa lugha inapatikana kwa njia isiyo ya moja kwa moja kupitia waendeshaji (Pascal) au kazi (C) zinazofanya kazi na faili. Katika hali ya ufikiaji wa nasibu ya binary, faili yoyote ni sawa na eneo la kumbukumbu lisilo na kikomo linaloweza kushughulikiwa, ambayo ni, kutoka kwa mtazamo wa programu, inaonekana sawa na kumbukumbu ya kawaida. Kwa kawaida, programu inaweza kunakili vigezo kutoka kwa kumbukumbu hadi eneo la kiholela kwenye faili na nyuma, na kwa hiyo kuandaa miundo yoyote ya data (ikiwa ni pamoja na nguvu) kwenye faili.
Muundo wa data ni mtekelezaji ambaye hupanga kazi na data, ikiwa ni pamoja na kuhifadhi, kuongeza na kufuta, kurekebisha, utafutaji, nk. Muundo wa data hudumisha mpangilio fulani wa ufikiaji wake. Muundo wa data unaweza kuzingatiwa kama aina ya ghala au maktaba. Wakati wa kuelezea muundo wa data, unahitaji kuorodhesha seti ya vitendo vinavyowezekana kwake na ueleze kwa uwazi matokeo ya kila kitendo. Tutaita vitendo vile maagizo. Kutoka kwa mtazamo wa programu, mfumo wa maagizo ya muundo wa data unafanana na seti ya kazi zinazofanya kazi kwa vigezo vya kawaida.
Miundo ya data hutekelezwa kwa urahisi zaidi katika lugha zinazolenga kitu. Ndani yao, muundo wa data unafanana na darasa, data yenyewe huhifadhiwa katika vigezo vya wanachama wa darasa (au data hupatikana kupitia vigezo vya wanachama), na seti ya mbinu za darasa inafanana na mfumo wa maagizo. Kama sheria, katika lugha zenye mwelekeo wa kitu, miundo ya data inatekelezwa kwa namna ya maktaba ya madarasa ya kawaida: hizi ni zinazojulikana kama kontena za lugha ya C ++, iliyojumuishwa katika maktaba ya kawaida ya darasa la STL, au madarasa ambayo hutekeleza anuwai. miundo ya data kutoka kwa maktaba ya Java Developer Kit ya lugha ya Java.
Walakini, miundo ya data inaweza kutekelezwa kwa mafanikio katika lugha za kitamaduni za programu kama vile Fortran au C. Katika kesi hii, unapaswa kuzingatia mtindo wa programu unaolenga kitu: tambua wazi seti ya kazi zinazofanya kazi na muundo wa data, na uweke kikomo ufikiaji wa data kwa seti hii ya kazi pekee. Data yenyewe inatekelezwa kama vigezo tuli (si vya kimataifa). Wakati wa kupanga katika lugha ya C, muundo wa data unalingana na faili mbili zilizo na maandishi ya chanzo:
1. kichwa, au h-faili, ambayo inaelezea interface ya muundo wa data, i.e. seti ya prototypes za kazi zinazolingana na mfumo wa maagizo ya muundo wa data;
2. faili ya utekelezaji, au faili ya C, ambayo inafafanua vigeu tuli ambavyo huhifadhi na kufikia data, na pia hutekelezea vitendaji vinavyolingana na mfumo wa mahitaji ya muundo wa data.
Muundo wa data kawaida hutekelezwa kulingana na muundo rahisi wa msingi ambao tayari umetekelezwa, au kulingana na safu na seti ya vigeu rahisi. Tofauti ya wazi inapaswa kufanywa kati ya kuelezea muundo wa data kutoka kwa mtazamo wa kimantiki na kuelezea utekelezaji wake. Kunaweza kuwa na utekelezaji mwingi tofauti, lakini kutoka kwa mtazamo wa mantiki (yaani, kutoka kwa mtazamo wa mtumiaji wa nje), wote ni sawa na hutofautiana, labda, tu kwa kasi ya utekelezaji wa maagizo.

Hali ya lazima kwa ajili ya kujenga algorithm ni urasimishaji wa data, i.e. kupunguza taarifa kwa baadhi mfano wa habari(sentimita. " Mifano ya habari"), tayari imeelezewa na kusoma. Wakati mfano huo unapatikana, inasemekana kufafanuliwa muundo wa data dhahania.

Muundo wa data ya muhtasari inaelezea sifa na sifa za kitu, uhusiano kati ya vipengele vya kitu, pamoja na iwezekanavyo shughuli juu ya kitu fulani au darasa la vitu.

Moja ya kazi za sayansi ya kompyuta ni kupata aina za uwakilishi wa habari ambazo zinafaa kwa usindikaji wa kompyuta. Sayansi ya kompyuta kama sayansi halisi hufanya kazi na vitu rasmi (vilivyoelezwa kihisabati kwa ukali). Vitu vile - msingi miundo ya data dhahania kutumika katika sayansi ya kompyuta ni:

· nambari nzima;

· nambari halisi;

· alama;

· maadili ya kimantiki.

Kwa usindikaji wa kompyuta wa vitu hivi katika lugha za programu, zinafaa aina za data(sentimita. " Aina za data"). Vitu vya msingi vinaweza kuunganishwa kuwa miundo ngumu zaidi kwa kuongeza shughuli kwenye muundo kwa ujumla na sheria za ufikiaji kwa vipengele vya kibinafsi vya muundo huu wa data dhahania.

Miundo hii ya data dhahania ni pamoja na:

· vekta (safu za mwisho);

· meza (matrices), na kwa ujumla - safu za multidimensional;

· miundo inayobadilika:

Mlolongo wa alama, nambari;

Foleni;

Miti;

Uchaguzi wa mafanikio wa muundo wa data mara nyingi ni ufunguo wa kuunda algorithm yenye ufanisi na programu inayotekeleza: kwa kutumia mlinganisho wa miundo ya data na vitu halisi, unaweza kupata ufumbuzi wa ufanisi wa matatizo.

Kumbuka kwamba miundo iliyoorodheshwa ipo bila kujali utekelezaji wao wakati wa programu. Walifanya kazi na miundo hii ya data katika karne ya 18 na 19, wakati mashine ya kompyuta ilikuwa bado haijavumbuliwa. Tunaweza kuunda algoriti kulingana na muundo wa data dhahania, lakini ili kutekeleza algoriti katika lugha mahususi ya programu tunahitaji kutafuta njia ya kuiwakilisha kulingana na masharti. aina za data Na waendeshaji inayoungwa mkono na lugha hii ya programu (tazama " Waendeshaji lugha ya programu"). Kwa uwakilishi wa kompyuta wa miundo ya abstract, tunatumia miundo ya data, ambazo ni seti ya vigeu, ikiwezekana vya aina tofauti za data, vilivyounganishwa kwa njia fulani. Kuunda miundo kama vile vekta, meza, kamba, mlolongo, lugha nyingi za programu zina kiwango. aina za data: safu ya mwelekeo mmoja, safu ya pande mbili, kamba, faili (mara chache ni orodha), mtawalia. Shirika la miundo mingine ya data, kwanza kabisa miundo yenye nguvu, ukubwa wa ambayo mabadiliko wakati wa utekelezaji wa programu, programu inapaswa kutekeleza kwa kujitegemea, kwa kutumia aina za data za msingi. Hebu fikiria miundo hiyo kwa undani zaidi.

Orodha

Orodha ya mstari- mlolongo wa vipengele vinavyohusiana kwa mstari ambavyo shughuli za kuongeza vipengele kwenye nafasi ya kiholela katika orodha na kufuta kipengele chochote kinaruhusiwa. Orodha ya mstari inatambuliwa kwa njia ya kipekee na kielekezi hadi mwanzo wa orodha. Uendeshaji wa kawaida kwenye orodha ni: kupitia orodha, kutafuta kipengele fulani, kuingiza kipengele mara baada ya au kabla ya kipengele maalum, kufuta kipengele fulani, kuunganisha orodha mbili katika moja, kugawanya orodha moja katika orodha mbili au zaidi, nk.

Katika orodha ya mstari kwa kila kipengele isipokuwa kwanza, Kuna uliopita kipengele; kwa kila kipengele isipokuwa mwisho, Kuna ijayo kipengele. Kwa hivyo, vipengele vyote vya orodha vinaamriwa. Walakini, usindikaji wa orodha iliyounganishwa moja kwa moja sio rahisi kila wakati, kwa sababu hakuna uwezekano wa kuhamia kinyume - kutoka mwisho wa orodha hadi mwanzo. Katika orodha ya mstari, unaweza kupitisha vipengele vyote tu kwa kusonga kwa mtiririko kutoka kwa kipengele cha sasa hadi kingine, kuanzia kutoka kwa kwanza, kufikia moja kwa moja. i kipengele th haiwezekani.

Mfano 1. Mpangilio wa rekodi za majina ya wasomaji katika kompyuta ya msimamizi wa maktaba huamua uhusiano wa "uliopita-ujao". Kama sheria, rekodi zenyewe zina mali ya ziada - zimeagizwa kwa alfabeti. Shughuli za kuongeza msomaji mpya na, ikiwa ni lazima, kufuta ya zamani zinatekelezwa kwenye orodha hii. Ikiwa, kwa kuongeza, kumbukumbu za vitabu vilivyotolewa kwa kila msomaji huhifadhiwa, basi ni rahisi kuwakilisha kila rekodi hiyo, tena kwa kutumia orodha ya vitabu iliyotolewa.

Orodha za pete- muundo sawa na orodha ya mstari, lakini kwa uhusiano wa ziada kati ya kipengele cha mwisho na cha kwanza, yaani, kipengele kinachofuata baada ya kipengele cha mwisho ni kipengele cha kwanza.

Katika orodha ya mviringo kinyume na mstari vipengele vyote ni sawa(kwa kuwa kwa kila kipengele vipengele vyote vilivyotangulia na vinavyofuata vimefafanuliwa). Uchaguzi wa vipengele vya "kwanza" na "mwisho" katika orodha ya pete ni ya kiholela, kwani kwa kweli. muundo wa orodha hauna vipengele vilivyotengwa kwa uwazi!

Mfano 2. Katika michezo mingi, watoto hutumia counters kuchagua kiongozi, kugawanya katika timu, nk. Kama sheria, vihesabu ni vya muda mrefu, na watoto (bila kujua wenyewe) hupanga orodha ya mviringo. Uhusiano "uliopita-ujao" unatambuliwa na mwelekeo gani kiongozi anahesabu. Operesheni ya kawaida katika muundo huo ni kuondoa kipengele kutoka kwenye orodha wakati wa kudumisha muundo wake wa mviringo.

Orodha za mstari, ambazo shughuli za kuingizwa, kufuta na kufikia maadili ya kipengele hufanywa tu kwa vipengele vya nje (kwanza au mwisho), vimepokea majina maalum.

Rafu- kesi maalum ya orodha ya mstari iliyounganishwa moja kwa moja ambayo shughuli mbili zinafafanuliwa: kuongeza kipengele kwenye sehemu ya juu ya safu (kabla ya kipengele cha kwanza) na kuondoa kipengele kutoka juu ya stack (kuondoa kipengele cha kwanza).

Mfano 3. Wacha tuchunguze shida ya kuamua usawa wa mabano ya aina anuwai katika usemi wa hesabu. Kwa mfano, unataka kuchanganua ikiwa mabano katika usemi ulio na mabano na mabano ya mraba yana mizani: ? Ili kutatua tatizo hili tutatumia muundo wa nguvu data msururu. Hebu tuwasilishe algorithm ya kutatua tatizo hili hatua kwa hatua. Tutatumia nukuu ifuatayo:

i- idadi ya ishara iliyochambuliwa;

n- idadi ya wahusika katika usemi.

1. i = 0.

2. i = i + 1.

3. Ikiwa in, kisha nenda kwa hatua (4), vinginevyo ikiwa stack ni tupu, basi tunaonyesha ujumbe "mabano yana usawa," vinginevyo tunaonyesha ujumbe " mabano hayana usawa" Mwisho wa algorithm.

4. Ikiwa i Alama ya th ni tofauti na alama za mabano, kisha nenda kwa hatua (2).

5. Ikiwa i Alama ya th ni sawa na "(" au "[", kisha tunaiweka kwenye stack, nenda kwa hatua (2).

6. Kama i Alama ya th ni ")", kisha tunaangalia sehemu ya juu ya safu: ikiwa kuna "(" juu ya safu, basi tunaiondoa kwenye safu; nenda kwa hatua (2), vinginevyo tunaonyesha ujumbe. " mabano hayana usawa" Mwisho wa algorithm.

7. Ikiwa i Tabia ya th ni "]", basi tunaangalia juu ya stack: ikiwa kuna "[" juu ya stack, basi tunaiondoa kwenye stack; nenda kwa hatua (2), vinginevyo tunaonyesha ujumbe " mabano hayana usawa" Mwisho wa algorithm.

Foleni- kesi maalum ya orodha iliyounganishwa moja kwa moja ambayo shughuli mbili tu zinaruhusiwa: kuongeza kipengele hadi mwisho (mkia) wa foleni na kuondoa kipengele kutoka mwanzo (kichwa) cha foleni.

Wazo la foleni kwa hakika liko karibu sana na neno la kila siku "foleni". Foleni ya wateja katika duka imeelezewa vyema kulingana na muundo huu wa data.

Miti

Mti ni mkusanyiko wa vipengele vinavyoitwa nodi, ambamo kipengele kimoja kimechaguliwa ( mzizi), na vitu vilivyobaki vimegawanywa katika seti zilizotengana (subtrees), ambayo kila moja ni mti, na mzizi wa kila mti mdogo ni. mjukuu mzizi wa mti, i.e. vipengele vyote vimeunganishwa na uhusiano (babu-mzao). Matokeo yake, muundo wa hierarchical wa nodes huundwa. Nodes ambazo hazina watoto huitwa majani. Shughuli zifuatazo zinafafanuliwa kwenye mti: kuongeza kipengele kwenye mti, kuondoa kipengele kutoka kwa mti, kuvuka mti, kutafuta kipengele kwenye mti.

Mfano 4. Mti ni muundo wa data unaofaa zaidi kwa kuwakilisha mti wa familia, ambayo inaweza kutumika kutatua matatizo ya kuamua kiwango cha uhusiano kati ya watu wawili.

Miti pia hutumiwa kuamua mikakati ya kushinda katika michezo (tazama nakala " Michezo. Mikakati ya Ushindi"), na kwa ajili ya kujenga mifano mbalimbali ya habari (tazama " Mifano ya habari”).

Jukumu muhimu sana katika sayansi ya kompyuta linachezwa na kinachojulikana miti ya binary.

Mti wa binary- kesi maalum ya mti ambayo kila node inaweza kuwa na uzao zaidi ya mbili, ambayo ni mizizi ya subtree kushoto na kulia.

Ikiwa, kwa kuongeza, hali imeridhika kwa nodi za mti kwamba maadili yote ya vipengele vya mti mdogo wa kushoto ni chini ya thamani ya mzizi wa mti, na maadili yote ya vipengele vya mti mdogo wa kulia ni. kubwa kuliko thamani ya mzizi, basi mti kama huo unaitwa binary search mti na imeundwa kutafuta vipengele kwa haraka. Algorithm ya utaftaji kwenye mti kama huu hufanya kazi kama hii: thamani inayotafutwa inalinganishwa na thamani ya mzizi wa mti, na kulingana na matokeo ya kulinganisha, utaftaji unaisha au unaendelea tu kushoto au kulia tu. subtree, kwa mtiririko huo. Jumla ya idadi ya shughuli za kulinganisha haitazidi kinachojulikana urefu wa mti- idadi kubwa ya vipengele kwenye njia kutoka kwenye mizizi ya mti hadi moja ya majani. Kwa hivyo, urefu wa mti ulioonyeshwa kwenye takwimu ni 4.

Grafu

Grafu ni seti ya vipengele vinavyoitwa vilele grafu pamoja na seti ya uhusiano kati ya wima hizi, inayoitwa mbavu grafu. Ufafanuzi wa kielelezo wa muundo huu wa data ni seti ya pointi zinazolingana na wima, baadhi ya jozi ambazo zimeunganishwa na mistari au mishale inayolingana na kingo. Katika kesi ya mwisho, grafu inaitwa iliyoelekezwa(tazama pia makala " Mifano ya picha"Na" Mifano ya Tabular”).

Kutokana na ukweli kwamba vitu vya muundo wa kiholela vinaweza kuelezewa kwa kutumia grafu, grafu ni njia kuu za kuelezea miundo ya vitu ngumu na utendaji wa mifumo. Kwa mfano, kuelezea mtandao wa kompyuta, mfumo wa usafiri, muundo wa hierarchical (mti ni moja ya aina za grafu). Chati za mtiririko wa algorithm (tazama " Njia za kuandika algorithms”) pia ni grafu.

Ikiwa kila makali pia yamepewa nambari fulani ( uzito), basi grafu kama hiyo inaitwa yenye uzito. Kwa mfano, wakati wa kuelezea mfumo wa barabara wa Kirusi kwa kutumia grafu, urefu wa barabara (uzito wa makali ya grafu) kuunganisha makazi fulani (vipeo vya grafu) ni muhimu. Kwa kuongezea, katika takwimu, urefu wa kingo zinazolingana sio lazima zilingane na uzani uliopewa, tofauti na ramani ya barabara.

Mfano 5. Ni rahisi kutatua shida ifuatayo kwa suala la grafu yenye uzani. Serikali ya Urusi inaandaa mpango wa kujenga barabara kuu za kisasa zinazounganisha miji yenye wakazi zaidi ya milioni moja. Ni barabara za aina gani zinazopaswa kujengwa ili kutoka kwa jiji lolote kama hilo mtu aweze kufika kwa njia nyingine yoyote kupitia barabara kuu mpya, na urefu wa jumla wa barabara ungekuwa mdogo?

Tatizo hili katika nadharia ya grafu lina suluhisho rahisi na halisi. Tunaweza kuanza kupanga mtandao wa barabara, kuanzia jiji lolote, kwa mfano, St. Hebu tuunganishe na jiji la karibu zaidi la milioni. Kisha, kwa kila hatua, barabara fupi zaidi huongezwa kwenye mtandao uliopo, ambao unaweza kuunganisha jiji ambalo halijaunganishwa kwenye mtandao na moja ya miji iliyojumuishwa tayari kwenye mtandao. Kwa hivyo idadi ya barabara itakuwa moja chini ya idadi ya miji.

Muundo wa data ya kufikirika - grafu - inaweza kuwakilishwa katika mpango kwa njia kadhaa, i.e. kutumia aina tofauti za data. Kwa mfano, grafu inaweza kuelezewa kwa kutumia orodha ya kingo, ikifafanua kila makali na jozi ya wima na, kwa hiari, uzito. Uhifadhi wa grafu ya jedwali umeenea zaidi (tazama “ Mifano ya Tabular"), pia huitwa matrix ya karibu, i.e. safu mbili-dimensional, sema A, ambapo kwa grafu isiyo na uzito (au 1), ikiwa makali kati ya wima i Na j ipo, na (au 0) vinginevyo. Kwa grafu yenye uzito A[i][j] ni sawa na uzito wa makali yanayolingana, na kutokuwepo kwa makali katika idadi ya matatizo kunaonyeshwa kwa urahisi na infinity. Kwa grafu ambazo hazijaelekezwa, matriki ya karibu kila wakati ni ya ulinganifu juu ya diagonal kuu ( i = j) Kwa kutumia matrix ya kukaribiana, ni rahisi kuangalia ikiwa kuna ukingo kwenye grafu inayounganisha vertex. i na juu j. Ubaya wake kuu ni kwamba matrix ya karibu inahitaji kwamba kiwango cha kumbukumbu kiwe cha kutosha kuhifadhi. N Thamani 2 za grafu iliyo na N wima, hata kama kuna kingo chache zaidi kwenye grafu kuliko N 2 .

Wakati wa kuelezea dhana miundo ya data Unaweza kutumia kielelezo kifuatacho.

Wakati wa kutatua tatizo lolote, kuna haja ya kufanya kazi nayo data na kufanya operesheni juu yao. Seti ya shughuli hizi kwa kila kazi, kwa ujumla, ni tofauti. Hata hivyo, ikiwa seti fulani ya shughuli hutumiwa mara nyingi kutatua matatizo mbalimbali, basi ni muhimu kuja na njia ya kupanga data ambayo inakuwezesha kufanya shughuli hizi kwa ufanisi iwezekanavyo. Baada ya njia kama hiyo kugunduliwa, wakati wa kutatua shida fulani, tunaweza kudhani kuwa tuna "sanduku nyeusi" (tutaiita muundo wa data), ambayo inajulikana kuwa data ya aina fulani imehifadhiwa ndani yake, na ambayo inaweza kufanya shughuli fulani kwenye data hii. Hii inakuwezesha kuepuka maelezo na kuzingatia vipengele maalum vya kazi. Ndani (yaani kwenye kompyuta) hii "sanduku nyeusi" inaweza kutekelezwa kwa njia mbalimbali, lakini mtu anapaswa kujitahidi kwa ufanisi zaidi (haraka na kumbukumbu ya ufanisi) utekelezaji iwezekanavyo.

Kiwango cha elimu cha serikali hutoa kwa ajili ya utafiti wa miundo mbalimbali ya data katika kozi ya msingi ya shule ya msingi na shule ya upili. Katika kozi ya msingi ya programu ya shule, Mpango wa Sampuli hutaja misururu ya vibambo (mifuatano), nambari, orodha, miti, na grafu kama vitu vilivyochakatwa. Walakini, katika kazi za vitendo, ni safu tu iliyotajwa kutoka kwa data ya muundo tata (tazama kifungu " Uendeshaji wa safu"). Katika shule ya msingi, inaonekana ina mantiki kusoma miundo iliyobaki kwanza kabisa wakati wa kuunda miundo ya picha na mifano mingine (tazama sehemu ya IV ya ensaiklopidia).

Programu ya takriban ya shule maalum inahusisha kufanya kazi na nambari, matrices, strings, orodha na miti. Kama kielelezo rahisi cha kufanya kazi na orodha, unaweza kuchagua kupanga rafu kwa kutumia safu ya mwelekeo mmoja na tofauti kamili inayoelekeza juu ya rafu ("chini" ya rafu kila wakati huwa katika kipengele cha kwanza cha safu. ) Kwa kuongezea shida ya kuangalia mabano kwa usawa uliopewa katika kifungu, unaweza kusoma utendakazi wa kihesabu cha rafu kwa kutumia mfano wa algorithm ya kubadilisha usemi wa hesabu kuwa nukuu ya Kipolishi ya nyuma ( kurekebisha post kurekodi) kutoka kwa ile tuliyoizoea infix kurekodi na kuhesabu zaidi thamani ya usemi wa hesabu.

Mti wa binary unaweza pia kuwakilishwa kwa urahisi katika kumbukumbu ya kompyuta kwa kutumia safu ya mwelekeo mmoja, na kipengele cha kwanza cha safu huhifadhi mzizi wa mti, na vizazi vya nodi ya mti iliyohifadhiwa ndani. i-th kipengele cha safu itakuwa iko katika 2 i-m na (2 i+ 1) vitu, mtawaliwa. Ikiwa nodi haina kizazi, basi kipengele kinacholingana kitakuwa sawa, kwa mfano, 0. Utaratibu wa kupitisha mti unaorudiwa. t na kuchapisha vitu vyake katika kesi hii itaonekana kama hii:

utaratibu utaratibu (i: integer);

kama t[i]<> 0 basi

Unaweza kusoma kuhusu utekelezaji wa orodha na safu kwa kutumia vigezo vya nguvu, kwa mfano, katika kitabu cha classic cha N. Wirth "Algorithms na Miundo ya Data".

Programu ya shule maalum pia inajumuisha algoriti za grafu. Hasa, utafutaji wa njia fupi zaidi katika grafu imetajwa. Kwa grafu isiyo na uzito, tatizo hili linaweza kutatuliwa, kwa mfano, kwa kutumia algorithm ya "utafutaji wa upana-kwanza", wakati wima za grafu zilizounganishwa kwa makali kwenye kipeo cha asili zimewekwa alama, kisha vipeo vyote vilivyounganishwa na vilivyowekwa alama, nk. . Kwa grafu yenye uzito, algorithm ya Dijkstra hutumiwa mara nyingi (tazama, kwa mfano, makala ya E.V. Andreeva "Olympiads katika Informatics. Njia za Juu", "Informatics" No. 8/2002). Ujuzi wa algorithms kama hizo ni muhimu ili kufanikiwa kutatua shida za Olympiad katika sayansi ya kompyuta. Kwa hivyo, katika hatua ya IV ya wilaya ya shirikisho ya Olympiad ya All-Russian katika Informatics mnamo 2007, shida ya "Trench na Trenches" ilipendekezwa, suluhisho ambalo lilipikwa hadi kupata njia fupi zaidi kwenye grafu yenye uzito.

Hapo awali, mchakato wa upangaji ulihusisha mpanga programu kuandika algoriti zote moja kwa moja katika lugha ya mashine. Mbinu hii iliongeza kazi ambayo tayari ilikuwa ngumu ya kutengeneza algoriti na mara nyingi sana ilisababisha makosa ambayo ilibidi yagunduliwe na kusahihishwa [mchakato unaojulikana kama utatuzi] kabla ya kazi kuchukuliwa kuwa kamili.

Hatua ya kwanza kuelekea kurahisisha kazi ya upangaji programu ilikuwa ni kuacha kutumia nambari kuandika maagizo na uendeshaji moja kwa moja katika namna ambayo hutumiwa kwenye mashine. Kwa kusudi hili, wakati wa kuunda programu, nukuu ya mnemonic ya amri mbalimbali ilianza kutumiwa sana badala ya uwakilishi wao wa hexadecimal. Kwa mfano, badala ya msimbo wa kidijitali wa amri ya rejista ya mzigo, mtayarishaji programu anaweza sasa kuandika LOD, na badala ya msimbo wa amri ya rejista ya nakala kwenye kumbukumbu, mtayarishaji programu anaweza kutumia mnemonic STO. Kwa shughuli za uandishi, sheria zilitengenezwa kulingana na ambayo mpangaji programu angeweza kugawa majina ya maelezo kwa maeneo fulani ya kumbukumbu [mara nyingi huitwa vitambulisho] na kuyatumia wakati wa kuandika maagizo ya programu badala ya anwani za seli za kumbukumbu zinazolingana. Vitambulisho hivyo kawaida huitwa vigeuzo. Hii inasisitiza kwamba tunapobadilisha thamani iliyotengwa kwa eneo fulani la kumbukumbu, tunabadilisha thamani inayohusishwa na kitambulisho kilichopewa eneo hilo wakati wa utekelezaji wa programu.

Tofauti inapotangazwa katika programu, aina yake kawaida huamuliwa kwa wakati mmoja. Aina ya data huamua tafsiri zote za data maalum na shughuli zinazoweza kufanywa juu yake. Aina za data ni pamoja na Integer, Real, Character, na Boolean.

Aina ya Nambari hutumika kuwakilisha data ya nambari ambayo ni nambari kamili. Katika kumbukumbu mara nyingi huwakilishwa katika nambari inayosaidia ya binary. Unaweza kufanya shughuli za kawaida za hesabu na kulinganisha kwenye data ya Nambari kamili.

Aina Halisi inakusudiwa kuwakilisha data ya nambari ambayo inaweza kuwa na nambari zisizo kamili. Kawaida huhifadhiwa kwenye kumbukumbu kama nambari za sehemu zinazoelea za binary. Operesheni zinazoweza kufanywa kwenye data Halisi ni sawa na zile zinazoweza kufanywa kwenye data ya Nambari kamili. Hata hivyo, upotoshaji unaohitajika ili kuongeza vipengele viwili vya data Halisi ni tofauti na upotoshaji unaohitajika ili kufanya shughuli kwenye vigeu vya Nambari kamili.

Aina ya Tabia hutumika kwa data inayojumuisha herufi ambazo zimehifadhiwa kwenye kumbukumbu kama misimbo ya ASCII au UNICODE. Data ya aina hii inaweza kulinganishwa na kila mmoja [amua ni ipi kati ya herufi mbili inayotangulia nyingine kwa mpangilio wa alfabeti]; angalia ikiwa safu moja ya herufi ni nyingine, na pia unganisha nyuzi mbili kuwa safu moja, ndefu zaidi, ukiambatanisha moja yao baada ya nyingine [operesheni ya uunganishaji].

Boolean inarejelea data inayoweza kuchukua tu thamani mbili: Kweli na Si kweli. Mfano wa data kama hiyo ni matokeo ya operesheni ya kulinganisha kati ya nambari mbili. Uendeshaji kwenye data ya Boolean inahusisha kuangalia kama thamani ya sasa ya kigeugeu ni Kweli au Si kweli.

Kumbukumbu kuu ya mashine imepangwa kwa namna ya seli tofauti na anwani zinazoongezeka kwa mfululizo. Hata hivyo, seli hizi mara nyingi hutumiwa kama msingi wa kutekeleza njia nyingine za kuhifadhi data. Kwa mfano, maandishi kwa kawaida hutazamwa kama mfuatano mrefu wa herufi, ilhali maelezo ya mauzo yanaweza kutazamwa kama jedwali la mstatili lenye thamani za nambari, kila moja ikiwakilisha idadi ya miamala iliyokamilishwa na mfanyakazi mahususi kwa siku mahususi. Kusudi ni kumpa mtumiaji njia ya kudhibiti miundo kama hiyo ya dhahania badala ya kulazimika kuzama katika maelezo ya shirika halisi la data kwenye kumbukumbu kuu ya mashine. Ili kutumia kompyuta kwa usahihi, unahitaji kuwa na ujuzi mzuri wa mahusiano ya kimuundo kati ya data, mbinu za msingi za kuwakilisha miundo ndani ya kompyuta, pamoja na mbinu za kufanya kazi nao. Miundo ifuatayo ya habari hutumiwa kwa miunganisho kati ya data kwenye kompyuta: safu, rekodi, orodha, mti, safu, foleni.

Safu

Safu ni muundo unao na vipengele kadhaa vya aina moja. Fahirisi hutumiwa kuagiza vipengele vya safu. Fahirisi zimeandikwa kwa mabano baada ya jina la safu. Safu iliyo na index moja inaitwa moja-dimensional, na mbili - mbili-dimensional, nk.

Rekodi

Rekodi ni muundo unaojumuisha vipengele si lazima vya aina moja. Vipengele vya kibinafsi vya rekodi huitwa nyanja. Sehemu, kwa upande wake, inaweza pia kuwa rekodi.

Mwanafunzi wa rekodi (
Jina la kwanza,
Jina la familia,
Kikundi
)

Orodha

Orodha ni seti ya rekodi, ambayo kila moja ina uwanja maalum - index. Kielekezi huunganisha rekodi na rekodi nyingine au kina thamani ya Null, ambayo inaonyesha kwamba thamani ya pointer haijafafanuliwa.

Maingizo katika orodha iliyounganishwa moja kila moja yana kielekezi kimoja, na yameunganishwa kwa mnyororo:

Mshale kwenye takwimu unaonyesha yaliyomo kwenye pointer, na neno Data inaashiria mkusanyiko wa sehemu ambazo data huhifadhiwa. Orodha inaweza kupangwa kwa kutumia safu ya pande mbili, vipengele vyote ambavyo vikiwa na fahirisi ya kwanza sawa na 0 vinakusudiwa kuhifadhi data, na vipengele vyote vilivyo na fahirisi ya kwanza sawa na 1 ni viashiria.


Katika orodha hii, maingizo yaliyo na herufi za alfabeti ya Kiingereza yamepangwa kwa mpangilio wa alfabeti. Ingizo la kwanza kwenye orodha lina herufi "A", ya pili - "B", nk.

Ili kufanya kazi na orodha unahitaji kuwa na uwezo wa kufanya shughuli tatu za msingi:

Pass() - kupita au kusonga kwenye orodha;
Ongeza () - kuongeza kiingilio kipya kwenye orodha;
Futa () - huondoa kiingilio kutoka kwenye orodha.

Kwa kuongeza shughuli, kufanya kazi na orodha kunahitaji vijiti viwili zaidi:

Tofauti ya kichwa, ambayo huhifadhi habari kuhusu ingizo la kwanza kwenye orodha
Tofauti ya sasa, ambayo inaelekeza kwenye ingizo la sasa kwenye orodha

Jedwali linatoa muhtasari wa maelezo ya baadhi ya shughuli kwenye orodha, mfano wa utekelezaji ambao umetolewa hapo juu.

Jina la operesheniMsimbo wa uongo
Sogeza chini kwenye orodha hatua moja

kazi Pass (Sasa) (
ikiwa (M Null) basi Sasa:=M;
kurudi (Sasa);
}

kazi Ongeza (Sasa, Mpya) (
M:= M;
M:=Mpya;
kurudi;
}

Ongeza kwenye orodha ingizo lililoelekezwa na Tofauti Mpya

kazi Futa (Sasa) (
ikiwa (M Null) basi
M:=M];
kurudi;
}

Maingizo katika orodha iliyounganishwa maradufu yamefungwa pamoja, lakini yana sehemu mbili za vielelezo. Mmoja wao anaonyesha kipengele kilichotangulia kwenye orodha, kingine kwa kipengele kinachofuata. Muundo huu hukuruhusu kusonga kupitia orodha kwa njia mbili: mbele na nyuma.

Orodha ambayo ingizo lake la mwisho linaelekeza kwenye ya kwanza inaitwa orodha ya duara. Hakuna kiingilio kilicho na kielekezi tupu katika orodha hizi.


Mti ni orodha ya matawi, ambayo kila kiingilio kinaweza kuwa na viashiria kadhaa. Maingizo yaliyojumuishwa kwenye mti huitwa nodi. Nodi ambazo viashiria vyote ni tupu huitwa majani. Nodi ya juu ya kuanzia ya mti inaitwa nodi ya mizizi. Katika matatizo mengi, ni ya kutosha kutumia miti ya binary, nodes ambazo hazina zaidi ya vidokezo viwili.

Mfano. Unahitaji kuhesabu usemi wa hisabati (3+7)*(2/(3-1)). Wacha tufikirie usemi huu kama mti:

Kila nodi ya mti huu ni rekodi ya fomu ifuatayo:

Njia ya rekodi (
Operesheni
Nambari
LeftPointer
RightPointer
)

Majani ya mti yana namba, nodes zilizobaki zina alama za uendeshaji.

Baada ya kutekeleza mti ulioelezewa kwenye safu ya pande mbili, tunapata picha ifuatayo:


Ili kuhesabu thamani ya mti, unahitaji kuhesabu maadili ya miti ndogo ya kulia na ya kushoto, na kisha ufanyie operesheni inayotokana nayo. Pseudocode ya algorithm inayosuluhisha shida itaonekana kama:

kazi ya Kukokotoa (Ya Sasa) (
ikiwa (M=Null) basi
Matokeo:= M;
mwingine (
R1:=Hesabu(M);
R2:=Hesabu(M);
Matokeo:=R1(M)R2;
}
kurudi (matokeo);
}

Rafu ni muundo wa data uliopangwa kwa msingi wa mwisho, wa kwanza. Data iliyohifadhiwa kwenye rafu hupatikana kupitia sehemu ya juu. Data inasukumwa kwenye rafu kwa kufuatana. Kipengele kinachosukumwa kwenye rafu kwanza kiko sehemu ya chini, na ili kuitoa kwenye rafu, lazima kwanza uibue data yote ambayo ilisukumwa kwenye rafu baadaye.

Wakati wa kufanya kazi na stack, hali mbili za dharura zinawezekana: jaribio la kusoma data kutoka kwa stack tupu; jaribio la kusukuma kipengele kwenye rafu wakati idadi ya vipengele kwenye rafu imefikia idadi ya juu inayoruhusiwa.

Foleni ni muundo wa data uliopangwa kwa msingi wa kwanza, wa kwanza. Kuna kiasi tofauti cha data kwenye foleni. Wakati wa kupanga foleni, data huongezwa kwenye mkia; inaporejeshwa, inachukuliwa kutoka kwa kichwa.

Jedwali la hash

Hashing ni mbinu ambayo inaruhusu ufikiaji wa moja kwa moja kwa rekodi bila matumizi ya miundo yoyote ya ziada. Mchakato unaweza kuelezewa kwa ufupi kama ifuatavyo. Nafasi ambayo data imehifadhiwa imegawanywa katika sehemu kadhaa. Rekodi husambazwa kwenye ndoo hizi kulingana na algoriti inayoitwa hashing algorithm, ambayo hubadilisha thamani ya sehemu muhimu kuwa nambari ya ndoo. Kila rekodi huhifadhiwa katika sehemu iliyofafanuliwa na mchakato huu. Kwa hivyo, rekodi inaweza kupatikana kwa kutumia algorithm ya hashing kwa thamani ya uwanja wake muhimu na kusoma rekodi za sehemu inayolingana. Muundo wa data ulioundwa kwa njia hii unaitwa jedwali la hashi.

Kwa mfano, ikiwa unahitaji kupanga jedwali la hashi ili kuhifadhi herufi kubwa za alfabeti ya Kiingereza, basi unaweza kuchagua misimbo ya herufi ya ASCII kama funguo, na algoriti ya hashing itakata biti tano za mpangilio wa chini na kuzitumia kuunda faharasa. ya safu ya kipengee cha kuhifadhi tabia:

Kwa ujumla, algoriti ya hashing lazima, kulingana na thamani kuu, itoe thamani ya faharasa ndani ya mipaka ya safu na isambaze vitufe kwa usawa katika vipengele vya safu. Kukosa kufuata mahitaji ya mwisho husababisha hali ambapo rekodi nyingi huanguka katika sehemu sawa. Hali hizi huitwa migongano.