This site is not complete. The work to converting the volumes of സര്‍വ്വവിജ്ഞാനകോശം is on progress. Please bear with us
Please contact webmastersiep@yahoo.com for any queries regarding this website.

Reading Problems? see Enabling Malayalam

ഡേറ്റാ സ്ട്രക്ചര്‍ (കംപ്യൂട്ടര്‍)

സര്‍വ്വവിജ്ഞാനകോശം സംരംഭത്തില്‍ നിന്ന്

ഉള്ളടക്കം

ഡേറ്റാ സ്ട്രക്ചര്‍ (കംപ്യൂട്ടര്‍)

Data structure

ഒരു കംപ്യൂട്ടര്‍ സിസ്റ്റത്തില്‍ ഉപയോഗിക്കുന്ന ഡേറ്റയുടെ ക്രമീകരണം, ഡേറ്റാ ഘടകങ്ങളുടെ സ്വഭാവസവിശേഷതകള്‍, പരസ്പര ബന്ധം എന്നിവയുടെ നിര്‍വചനം തുടങ്ങിയവയ്ക്കായി പ്രയോജനപ്പെടുത്തുന്ന സംവിധാനം. ഡേറ്റയുടെ ശരിയായ ഉപയോഗത്തിനും അതിന്റെ ഭദ്രതയ്ക്കും അത്യന്താപേക്ഷിതമായ ഒന്നാണ് ഡേറ്റാ സ്ട്രക്ചര്‍.

ഡേറ്റാ എലിമെന്റുകളുടെ കൂട്ടായ്മയാണ് ഗണം. ഡേറ്റാ ഗണത്തിലെ അംഗങ്ങളായ ഡേറ്റാ എലിമെന്റുകളേയും അംഗങ്ങള്‍ തമ്മില്‍ ഉള്ള ബന്ധത്തേയും നിര്‍വചിക്കുന്നതോടൊപ്പം ഡേറ്റയില്‍ പ്രാവര്‍ത്തികമാക്കാവുന്ന ക്രിയകളേയും ഡേറ്റാ സ്ട്രക്ചറിന്റെ നിര്‍വചനത്തില്‍ വിശദമാക്കാറുണ്ട്. എങ്കിലും ഡേറ്റയെ മാത്രമേ പൊതുവേ ഡേറ്റാ സ്ട്രക്ചര്‍ ആയി പരിഗണിക്കാറുള്ളൂ.

ഡേറ്റാ ഘടകങ്ങള്‍

ഏതൊരു ഡേറ്റാ സ്ട്രക്ചറിന്റേയും മൌലിക ഘടകമാണ് അതിലെ പ്രിമിറ്റീവ് എലിമെന്റുകള്‍ അഥവാ അടിസ്ഥാന ഘടകങ്ങള്‍. ഇവയെ ആറ്റങ്ങള്‍ എന്ന് വിശേഷിപ്പിക്കുന്നു. അടിസ്ഥാന ഘടകങ്ങളെ ഉപയോഗപ്പെടുത്തി സങ്കീര്‍ണങ്ങളായ ഡേറ്റാ സ്ട്രക്ചറുകള്‍ക്കു രൂപം നല്‍കുന്നു.

കെട്ടിട നിര്‍മാണത്തിലെ അടിസ്ഥാന ഘടകങ്ങളാണ് കല്ല്, മണ്ണ്, സിമന്റ്, കമ്പി, തടി മുതലായവ. ഇവ ഉപയോഗിച്ച് പല തരത്തിലുള്ള വീടുകള്‍ പണിയാന്‍ സാധിക്കുന്നതുപോലെയാണ് ഡേറ്റാ സ്ട്രക്ചറുകളുടെ കാര്യവും; വിവിധ ആറ്റങ്ങള്‍ പ്രയോജനപ്പെടുത്തി വ്യത്യസ്ത ഡേറ്റാ സ്ട്രക്ചറുകള്‍ രൂപപ്പെടുത്തുന്നു.

ഡേറ്റാ സ്ട്രക്ചറിലെ എലിമെന്റുകളെ തിരഞ്ഞു കണ്ടെത്താന്‍ 'സെലക്റ്റര്‍' ഓപ്പറേറ്ററെയാണ് പ്രയോജനപ്പെടുത്തുന്നത്.

ഡേറ്റാ സ്ട്രക്ചറുകള്‍

ഡേറ്റാ സ്ട്രക്ചറില്‍ എലിമെന്റുകളെ തിരഞ്ഞു കണ്ടെത്തുന്ന രീതി, പുതിയ എലിമെന്റുകളെ ഉള്‍പ്പെടുത്താനും പഴയവയെ നീക്കം ചെയ്യാനും പ്രയോജനപ്പെടുത്തുന്ന സംവിധാനം (യഥാക്രമം ക്രിയേഷന്‍, ഡിലീഷന്‍ ഓപ്പറേറ്ററുകള്‍) എന്നിവയെ അടിസ്ഥാനമാക്കി പൊതുവേ ഡേറ്റാ സ്ട്രക്ചറുകളെ എട്ടായി തരം തിരിക്കാറുണ്ട്: അറെ, റെക്കാഡ്, ഗണം (സെറ്റ്), ലിസ്റ്റ്, ട്രീ, സ്റ്റാക്, ഗ്രാഫ്, ക്യൂ എന്നിവയാണിവ.

വര്‍ഗീകരണം

അറെ (array).

ഒരേ നാമത്തില്‍ പരാമര്‍ശിക്കാവുന്ന, ഒരേ ഇനത്തില്‍പ്പെട്ട ക്രമത്തില്‍ നിര്‍വചിച്ചിരിക്കുന്ന ഒരു കൂട്ടം ഡേറ്റകളാണ് അറെ. എലിമെന്റുകളുടെ ക്രമത്തിന് മുന്‍ഗണന നല്‍കുന്ന സംവിധാനമാണിത്. ഒന്നാമത്തെ എലിമെന്റ് മുതല്‍ യഥാക്രമം 1, 2, ..., n[ചിലപ്പോള്‍ 0, 1, 2, ..., (n-1)]എന്ന രീതിയില്‍ സൂചിക ഉപയോഗിച്ച് അവയുടെ ക്രമത്തെ സൂചിപ്പിക്കുന്നു. അതായത് A എന്ന ഏകമാന ഗണത്തിന്റെ പ്രഥമ എലിമെന്റ് A(1) ആണെങ്കില്‍ അഞ്ചാമത്തേതാണ് A(5). ഇവയില്‍ ഓരോന്നിന്റേയും പ്രതിനിധാനത്തിനു വേണ്ടിവരുന്ന സൂചികകളുടെ മൊത്തം എണ്ണമാണ് അറേയുടെ വലുപ്പം അഥവാ ഡൈമെന്‍ഷന്‍. അറെ A യുടെ മാനം ആറ് ആണെങ്കില്‍ അതിലെ ഓരോ എലിമെന്റിനും ആറ് സൂചികകള്‍ A (I,J,K,L,M,N) ഉണ്ടായിരിക്കും. എല്ലാ എലിമെന്റുകളും ഒരേ തരത്തിലുള്ളവയായിരിക്കും. വ്യത്യസ്ത സ്വഭാവങ്ങളുള്ള എലിമെന്റുകളെ ഉള്‍ പ്പെടുത്തി ഒരു അറെ ഘടന നിര്‍വചിക്കുക സാധ്യമല്ല.

റെക്കാഡ് (record)

വ്യത്യസ്ത സ്വഭാവവിശേഷമുള്ള ഡേറ്റാ ഘടകങ്ങളെ ഒരു നിശ്ചിത രീതിയില്‍ ക്രമീകരിക്കുന്നതാണ് റെക്കാഡ്. ഓരോ ഡേറ്റാ ഘടകത്തിന്റേയും സ്വഭാവങ്ങളെ ഒന്നിലേറെ ഫീല്‍ഡുകളിലായിട്ടാണ് റെക്കാഡില്‍ സംഭരിച്ചുവയ്ക്കുന്നത്. ഒരു കമ്പനിയിലെ തൊഴിലാളികളെ സംബന്ധിച്ച വിവരങ്ങള്‍ സൂക്ഷിക്കുന്ന ഒരു ഡേറ്റാബേസില്‍ ഓരോ തൊഴിലാളിയേയും സംബന്ധിക്കുന്ന വിവരങ്ങളായ കോഡ് നമ്പര്‍, പേര്, അടിസ്ഥാന ശമ്പളം, ഡിഎ, എച്ച്ആര്‍എ മുതലായവയെ വിവിധ ഫീല്‍ഡുകളിലായി ഉള്‍ പ്പെടുത്തി റെക്കാഡിന് രൂപം നല്കുന്നു. ഒന്നിലേറെ റെക്കാഡുകള്‍ ചേര്‍ന്നതാണ് ബ്ളോക്: അനേകം ബ്ളോക്കുകള്‍ ഉള്‍ പ്പെടുത്തി രൂപപ്പെടുത്തുന്നതാണ് ഫയല്‍. സംഭരണ ശേഷി വര്‍ധിപ്പിക്കാനാണ് ബ്ളോക് സംവിധാനം.

സെറ്റ് (set)

അംഗങ്ങള്‍ തമ്മിലുള്ള ക്രമത്തിന് യാതൊരു പ്രാധാന്യവും നല്കേണ്ടാത്ത സന്ദര്‍ഭങ്ങളില്‍ ഉപയോഗിക്കാവുന്ന ഒരു ഡേറ്റാ സ്ട്രക്ചറാണ് ഗണം (സെറ്റ്). എലിമെന്റുകള്‍ക്കുണ്ടാകേണ്ട സ്വഭാവഗുണങ്ങള്‍ മാത്രമേ സെറ്റിന്റെ നിര്‍വചനത്തില്‍ ഉള്‍ പ്പെടുത്താറുള്ളൂ.

ഗണങ്ങളേയും അവ തമ്മിലുള്ള ക്രിയകളേയും പൂര്‍ണമായി വിശദമാക്കാന്‍ സങ്കീര്‍ണങ്ങളായ കംപ്യൂട്ടര്‍ ഭാഷകള്‍ ഉപയോഗിക്കേണ്ടതുണ്ട്.

ലിസ്റ്റ് (list)

ആവശ്യാനുസരണം എലിമെന്റുകളെ ചേര്‍ക്കുവാനും നീക്കം ചെയ്യുവാനും വളരെ സൗകര്യപ്രദമായ ഒരു ഡേറ്റാ ഘടനയാണ് ലിസ്റ്റ്. ഒരു ഘടകത്തില്‍ നിന്ന് തൊട്ടടുത്തതിലേക്ക് ബന്ധപ്പെടുന്നത് ലിങ്കിലൂടെയാണ്. ലിസ്റ്റിന്റെ തുടക്കത്തില്‍ നിന്ന് ആരംഭിച്ച് ആവശ്യമായ ഘടകത്തെ കണ്ടെത്തുന്ന പ്രക്രിയ 'ലിസ്റ്റ് ട്രാവേഴ്സല്‍' എന്നറിയപ്പെടുന്നു.

ലിസ്റ്റുകള്‍ തന്നെ പല തരത്തില്‍ നിര്‍വചിക്കപ്പെടാം. അവസാനത്തേതൊഴിച്ച് മറ്റെല്ലാ ഘടകങ്ങളില്‍ നിന്നും തൊട്ടടുത്ത ഘടകത്തിലേക്ക് ലിങ്ക് സൃഷ്ടിച്ചു തയ്യാറാക്കുന്നവയാണ് ലീനിയര്‍ (രേഖീയ) ലിസ്റ്റ്. ഇതില്‍ അവസാനത്തെ ഘടകത്തിന്റേത് 'നള്‍ ലിങ്ക്' ആയിരിക്കും; അതായത്, അതിന് തൊട്ടു പിന്നിലെ ഘടകവുമായി മാത്രമേ ബന്ധമുണ്ടായിരിക്കൂ. ഇതിനു പകരം അവസാനത്തെ എലിമെന്റിനെ ആദ്യത്തെ എലിമെന്റുമായി ഒരു ലിങ്കു വഴി ബന്ധിപ്പിച്ചാല്‍ സര്‍ക്കുലര്‍ ലിസ്റ്റാണ് ലഭിക്കുക. ഈ രണ്ടിനങ്ങളിലും ലിങ്ക് ഒരേ ദിശയിലേക്കു മാത്രമേ നിര്‍വചിക്കാറുള്ളൂ. പക്ഷേ, ഓരോ എലിമെന്റില്‍ നിന്നും തൊട്ടു മുന്നിലും പിന്നിലും ഉള്ള എലിമെന്റിലേക്ക് ലിങ്കുകള്‍ സൃഷ്ടിക്കുമ്പോള്‍ ദ്വിബന്ധ ലിങ്ക്ഡ് ലിസ്റ്റ് (doubly linked list) രൂപപ്പെടുന്നു. ഇതില്‍ ആദ്യത്തേയും അവസാനത്തേയും എലിമെന്റുകളെ ബന്ധിപ്പിച്ചാല്‍ ദ്വിബന്ധ ലിങ്ക്ഡ് സര്‍ക്കുലര്‍ ലിസ്റ്റ് ലഭിക്കുന്നു.

ട്രീ (tree)

ബൈനറി ട്രീ
ആദ്യത്തേതൊഴികെയുള്ള ഓരോ എലിമെന്റി നും തനതായ മുന്‍ഗാമി ഉള്ള പ്രത്യേകതരം ലിസ്റ്റാണ് ട്രീ. മുന്‍ഗാമി ഇല്ലാത്ത എലിമെന്റിനെ റൂട്ട് അഥവാ റൂട്ട്നോഡ് എന്നു പറയുന്നു. ട്രീയിലെ എലിമെന്റുകളെ നോഡ് എന്നാണ് വിശേഷിപ്പിക്കാറുള്ളത്. ഒരു നോഡിന്റെ പിന്‍ഗാമിയെ അതിന്റെ 'ചൈല്‍ഡ്' എന്നും മുന്‍ഗാമിയെ 'പേരന്റ്' എന്നും സൂചിപ്പിക്കുന്നു. ഒരു നോഡിന് ഒന്നിലേറേ ചൈല്‍ഡ് നോഡുകള്‍ ആവാമെങ്കിലും അവയ്ക്കെല്ലാമായി പേരന്റ് നോഡ് ഒന്നു മാത്രമായിരിക്കും. റൂട്ട് നോഡിന് മുന്‍ഗാമി ഇല്ല.

ഒരു ട്രീയുടെ പ്രവര്‍ത്തന ക്ഷമത വിലയിരുത്തുക പ്രസ്തുത ട്രീ രൂപകല്പന ചെയ്യാന്‍ ഉപയോഗിക്കുന്ന കംപ്യൂട്ടര്‍ ഭാഷയെ അടിസ്ഥാനമാക്കിയാണ്.

ട്രീ തന്നെ പല വിധത്തിലാകാം. ഒരു പേരന്റ് നോഡിന് പരമാവധി രണ്ട് 'ചൈല്‍ഡ്' നോഡുകള്‍ മാത്രം അനുവദിക്കുന്ന ട്രീയാണ് ബൈനറി ട്രീ. 26, 32, 6, 12, 3, 38, 15, 7 എന്നീ സംഖ്യകളെ ഓരോ നോഡിലും ഇടതുഭാഗത്ത് മൂല്യം കുറഞ്ഞവയും വലതുഭാഗത്ത് മൂല്യം കൂടിയവയും എന്ന രീതിയില്‍ ബൈനറി ട്രീയായി രേഖപ്പെടുത്തിയിരിക്കുന്നത് ചിത്രത്തില്‍ സൂചിപ്പിക്കുന്നു.

ഗ്രാഫ് (graph)

ഒരു കൂട്ടം ഡേറ്റാ ഓബ്ജക്റ്റുകളെ (നോഡുകളെ) അവയ്ക്കിടയില്‍ ചാക്രിക പഥം നിലവില്‍ വരത്തക്കവണ്ണം ക്രമീകരിക്കുന്ന ഡേറ്റാ സ്ട്രക്ചറാണ് ഗ്രാഫ്. രണ്ട് നോഡുകള്‍ക്കിടയിലെ പഥമാണ് എഡ്ജ് അഥവാ അരിക്. ഗ്രാഫിലെ നോഡുകളേയും അരികുകളേയും യഥാക്രമം V,E എന്ന ഗണങ്ങള്‍ കൊണ്ടു സൂചിപ്പിക്കുമ്പോള്‍ "G(V,E)" എന്ന ഫലനം ഗ്രാഫിനെ നിര്‍വചിക്കുന്നു. ഗ്രാഫിലെ നോഡുകളുടേയും അരികുകളുടേയും എണ്ണം നിയതമാണെങ്കില്‍ പ്രസ്തുത ഗ്രാഫിനെ ഫൈനൈറ്റ് ഗ്രാഫ് എന്നു വിശേഷിപ്പിക്കുന്നു. ഗ്രാഫിലെ ഏതാനും നോഡുകളേയും അരികുകളേയും നീക്കം ചെയ്തു രൂപപ്പെടുത്തുന്ന ഗ്രാഫിനെ ആദ്യത്തേതിന്റെ സബ് ഗ്രാഫ് (sub graph) എന്നു വിളിക്കുന്നു. ഏതൊരു ഗ്രാഫിനും അനുബന്ധമായി ഒരു അഡ്ജസെന്‍സിലിസ്റ്റ് തയ്യാറാക്കാന്‍ കഴിയും. ഗ്രാഫിലെ ഓരോ നോഡിനും അതിലെ മറ്റേതെല്ലാം നോഡുകളുമായി നേരിട്ട് പഥ ബന്ധമുണ്ട് എന്നു സൂചിപ്പിക്കുന്ന ലിസ്റ്റാണിത്. ഇതിനെ ക്രമപ്പെടുത്തി ലഭിക്കുന്ന മാട്രിക്സാണ് അഡ്ജസെന്‍സി മാട്രിക്സ്. ചിത്രത്തിലെ ഗ്രാഫിനെ അടിസ്ഥാനമാക്കി തയ്യാറാക്കിയ അഡ്ജസെന്‍സി ലിസ്റ്റും മാട്രിക്സും യഥാക്രമം ചിത്രങ്ങളില്‍ സൂചിപ്പിച്ചിരിക്കുന്നു.

ക്യൂ (queue)

ഒരു പ്രത്യേക ഇനം രേഖീയ ലിസ്റ്റാണ് ക്യൂ. പൊതുവേ, ക്യൂവിലെ അവസാനത്തെ എലിമെന്റിനു പിന്നിലായിട്ടാണു പുതിയ എലിമെന്റ് നില്ക്കുന്നത്. അതുപോലെ ക്യൂവിന്റെ മുന്നിലെ എലിമെന്റുകള്‍ക്കാണ് ആദ്യം ക്രിയാ നിര്‍ദേശം ലഭിക്കുന്നത്. ഈ വ്യവസ്ഥയെ ഫിഫൊ (FIFO)-ഫസ്റ്റ് ഇന്‍ ഫസ്റ്റ് ഔട്ട്- എന്നു വിശേഷിപ്പിക്കുന്നു. ഇതില്‍ നിന്നു വ്യത്യസ്തമായി, പിന്‍മുറയിലുള്ളതോ പുറത്തു നിന്നു പുതുതായി നിവേശിച്ചതോ ആയ എലിമെന്റിന് ക്രമം തെറ്റിച്ച് ക്രിയാ നിര്‍ദേശം ലഭ്യമാക്കാവുന്ന ക്യൂവിനെ പ്രയോറിറ്റി ക്യൂ എന്നു വിശേഷിപ്പിക്കുന്നു. ദ്വിബന്ധ (ഡബിള്‍ എന്‍ഡഡ്) ക്യൂ ആണ് മറ്റൊരിനം: ഇതിനെ ഡെക് (deque) എന്നും വിളിക്കുന്നു. ഇതില്‍ ക്യൂവിന്റെ രണ്ടറ്റത്തും പുതിയ എലിമെന്റുകളെ നിവേശിപ്പിക്കാനും നിലവിലുള്ളവയെ നീക്കം ചെയ്യാനും സൗകര്യമുണ്ടായിരിക്കും. ഒരറ്റത്തുനിന്നു മാത്രം എലിമെന്റുകളെ നീക്കം ചെയ്യുകയും പുതിയവയെ രണ്ടറ്റങ്ങളിലുമായി ചേര്‍ക്കുകയും ചെയ്യുന്ന ഡെക്കിനെ ഔട്ട്പുട്ട് നിയന്ത്രിതം (output restricted) എന്നും മറിച്ച് ഒരറ്റത്തു നിന്ന് എലിമെന്റുകളെ ചേര്‍ക്കാനും രണ്ടറ്റത്തില്‍ നിന്നും എലിമെന്റുകളെ നീക്കം ചെയ്യാനും സൗകര്യമുള്ള ഡെക്കിനെ ഇന്‍പുട്ട് നിയന്ത്രിതം (input restricted) എന്നും വിശേഷിപ്പിക്കുന്നു. ഇതിനുള്ള ഒരു പ്രായോഗിക ഉദാഹരണമാണ് തീവണ്ടി സ്വിച്ചിങ് ശൃംഖല (ചിത്രം നോക്കുക). മേല്‍ വിവരിച്ച രണ്ടു രീതിയിലും ഒരു തീവണ്ടി ഡെക്കിന് പ്രവര്‍ത്തിക്കാനാകും.

സ്റ്റാക് (stack)

അവസാനം വന്ന ഡേറ്റാ ഘടകത്തെ ആദ്യം പുറത്തേക്കെടുക്കാവുന്ന രീതിയില്‍ ക്രമീകരിക്കപ്പെട്ടിരിക്കുന്ന ഒരു രേഖീയ ലിസ്റ്റാണ് സ്റ്റാക്. ഇതിന്റെ പ്രവര്‍ത്തന രീതിയെ ലാസ്റ്റ് ഇന്‍ ഫസ്റ്റ് ഔട്ട് (ലിഫൊ - LIFO) എന്നും വിശേഷിപ്പിക്കുന്നു. അതായത്, സ്റ്റാക്കില്‍ അവസാനമായി നിവേശിപ്പിക്കപ്പെട്ട ഡേറ്റയാണ് ആദ്യം നീക്കം ചെയ്യപ്പെടുന്നത്. ഒരു പ്രവൃത്തി ചെയ്തു കൊണ്ടിരിക്കുന്ന സമയത്ത് മുന്‍ഗണന അര്‍ഹിക്കുന്ന മറ്റൊരു പ്രശ്നം സമാഗതമായാല്‍ അതിനെ ഉടനടി കൈകാര്യം ചെയ്യാന്‍ പ്രാപ്തമാക്കുന്ന സജ്ജീകരണമാണ് സ്റ്റാക്. ഉദാഹരണത്തിലൂടെ ഇത് വിവരിക്കാനാകും. തന്റെ സുഹൃത്തുമായി ഒരാള്‍ മൊബൈല്‍ ഫോണിലൂടെ സംഭാഷണത്തില്‍ ഏര്‍പ്പെട്ടിരിക്കുമ്പോള്‍ ലാന്‍ഡ് ഫോണിലൂടെ മറ്റൊരു സന്ദേശം അയാള്‍ക്ക് ലഭിക്കുന്നുവെന്ന് കരുതുക. സുഹൃത്തിനെ പ്രസ്തുത വിവരം ധരിപ്പിച്ച ശേഷം ലാന്‍ഡ് ഫോണ്‍ സന്ദേശം പൂര്‍ത്തിയാക്കുന്നു. തുടര്‍ന്ന് സുഹൃത്തുമായിട്ടുള്ള മൊബൈല്‍ ഫോണ്‍ സംഭാഷണം തുടരുകയും ചെയ്യുന്നു. എന്നാല്‍ തങ്ങള്‍ നേരത്തെ എവിടെ വച്ചാണ് സംഭാഷണം നിറുത്തിയത് എന്ന വസ്തുത ഇരുവരും മറന്നുപോയി എന്നു കരുതുക. ഇവിടെയാണ് സ്റ്റാക്കിന്റെ പ്രസക്തി വെളിവാകുന്നത്. മൊബൈല്‍ ഫോണ്‍ സംഭാഷണം താത്ക്കാലികമായി നിറുത്തുമ്പോള്‍ എവിടെവച്ചാണ് നിറുത്തുന്നത് എന്നതിന്റെ സൂചനയായി ഒരു സംഭാഷണ ശകലം സ്റ്റാക്കില്‍ വച്ചശേഷം ലാന്‍ഡ് ഫോണ്‍ സംഭാഷണം ആരംഭിക്കുന്നു. അതിനിടയില്‍ വീണ്ടും ഒരു തടസ്സം എന്ന മട്ടില്‍ ആരെങ്കിലും വാതിലില്‍ തട്ടി വിളിച്ചെന്നു കൂടി കരുതുക. ലാന്‍ഡ് ഫോണ്‍ സംഭാഷണത്തിന്റെ ഒരു സൂചന കൂടി 'സ്റ്റാക്കില്‍' വച്ചിട്ട് വാതില്‍ തുറന്ന് കാര്യം തിരക്കുന്നു. മൂന്നാമത്തെ പ്രവൃത്തി പൂര്‍ത്തിയാക്കിയാലുടന്‍ തിരിച്ചുവന്ന് സ്റ്റാക്കില്‍ അവസാനം വച്ച 'ഡേറ്റ' (ലാന്‍ഡ് ഫോണ്‍ സംഭാഷണത്തിനെ സംബന്ധിച്ചത്) പുറത്തെടുത്ത് ഫോണ്‍ സംഭാഷണം പൂര്‍ത്തിയാക്കുന്നു. തുടര്‍ന്ന് സ്റ്റാക്കില്‍ ആദ്യം വച്ച സൂചന പുറത്തെടുത്ത് സുഹൃത്തുമായുള്ള മൊബൈല്‍ ഫോണ്‍ സംഭാഷണം തുടരുന്നു. ഇത്തരത്തില്‍, ഒരു ജോലി ചെയ്തുകൊണ്ടിരിക്കെ, മുന്‍ഗണന നല്കേണ്ട മറ്റു ജോലികള്‍ വന്നു ചേര്‍ന്നാല്‍, അവ അര്‍ഹിക്കുന്ന പ്രാധാന്യത്തോടെ പൂര്‍ത്തിയാക്കി, എല്ലാ ജോലികളും മുറയ്ക്കു ചെയ്യാന്‍ സഹായിക്കുന്ന ഒരു ക്രമീകരണമാണ് സ്റ്റാക്. ഇത് ഏറ്റവും പ്രയോജനപ്പെടുന്നത് കംപ്യൂട്ടറിലെ കേന്ദ്ര പ്രോസസറിന്റെ പ്രവര്‍ത്തനത്തിലാണ്. കേന്ദ്ര പ്രോസസര്‍ (CPU) ഒരു പ്രവൃത്തി കൈകാര്യം ചെയ്യുന്ന സമയത്ത് കംപ്യൂട്ടറിലെ മറ്റുപകരണങ്ങള്‍ കേന്ദ്ര പ്രോസസറിന്റെ ശ്രദ്ധ ക്ഷണിക്കുന്നത് ഇന്‍ട്രപ്റ്ററുകളിലൂടെയാണ്. ഓരോ പ്രാവശ്യം ഇന്‍ട്രപ്റ്റ് വരുമ്പോഴും, തത്സമയത്ത് ക്രേന്ദ്ര പ്രോസസറിന്റെ രജിസ്റ്ററിലുള്ള വിവരത്തെ കംപ്യൂട്ടറിന്റെ മെമ്മറിയിലുള്ള സ്റ്റാക്കില്‍ സംഭരിച്ച ശേഷം, ഇന്‍ട്രപ്റ്ററിനെ കൈകാര്യം ചെയ്യുന്നു. ഇതു പൂര്‍ത്തിയാകുമ്പോള്‍ സ്റ്റാക്കില്‍ അവസാനമായി വച്ച 'മെമ്മറി രജിസ്റ്റര്‍' ഡേറ്റയെ തിരികെ രജിസ്റ്ററുകളില്‍ കൊണ്ടുവന്ന് കേന്ദ്ര പ്രോസസര്‍ തടസ്സപ്പെട്ട പ്രവൃത്തി തുടരുന്നു.

സ്റ്റാക്കില്‍ ഒരു ഡേറ്റാ ഘടകം വയ്ക്കുക, സ്റ്റാക്കില്‍ നിന്ന് ഏറ്റവും മുകളിലുള്ള ഘടകത്തെ പുറത്തെടുക്കുക എന്നീ പ്രവൃത്തികള്‍ യഥാക്രമം പുഷ്, പോപ്പ് എന്നീ പേരുകളില്‍ അറിയപ്പെടുന്നു.

സ്റ്റാറ്റിക്, ഡൈനാമിക് ഡേറ്റാ സ്ട്രക്ചര്‍

ഒരു കംപ്യൂട്ടര്‍ പ്രോഗ്രാമിന്റെ പ്രവര്‍ത്തനത്തിനാവശ്യമായ സ്റ്റാക് പൊതുവേ, കംപ്യൂട്ടര്‍ മെമ്മറിയിലെ നിശ്ചിത ഭാഗങ്ങളിലായിട്ടാകും ക്രമീകരിക്കപ്പെടുക. പ്രോഗ്രാം ചിട്ടപ്പെടുത്തുമ്പോള്‍ത്തന്നെ സ്റ്റാക്കിന്റെ ആവശ്യത്തിനായി നിശ്ചിത അളവ് മെമ്മറി നിശ്ചിത ഭാഗത്ത് കരുതി വയ്ക്കാവുന്നതാണ്. ഇവിടെ സ്റ്റാക് സൃഷ്ടിക്കല്‍ ഒരു സ്റ്റാറ്റിക് സംവിധാനമായി മാറുന്നു. 'സി' ഭാഷയിലെ int A[50] എന്ന നിര്‍വചനം ഇത്തരത്തിലുള്ള ഒരു ഉദാഹരണമാണ്. A എന്ന 'ഇന്റെജര്‍' അറെയില്‍ പരമാവധി 50 അംഗങ്ങളുണ്ടായിരിക്കും എന്നാണിതിന്റെ അര്‍ഥം. തന്മൂലം പ്രോഗ്രം നടപ്പാക്കപ്പെടുമ്പോള്‍ ('റണ്‍' ചെയ്യുമ്പോള്‍) അറെയിലെ ഘടകങ്ങള്‍ 50-ല്‍ കൂടുതലായി വന്നാല്‍ മെമ്മറി അപര്യാപ്തം എന്ന കാരണത്താല്‍ പ്രോഗ്രാം പ്രവര്‍ത്തനം 'അബോര്‍ട്ട് ചെയ്യപ്പെടും'. ഇതിനു പകരം, ആവശ്യം വരുന്ന മുറയ്ക്ക് സ്റ്റാക്കിനു വേണ്ട മെമ്മറി ലഭ്യമാക്കത്തക്ക രീതിയില്‍ ക്രമീകരിക്കുന്നതാണ് ഡൈനാമിക് ഡേറ്റാ സ്ട്രക്ചര്‍ സംവിധാനം. കംപ്യൂട്ടര്‍ സിസ്റ്റം അതിന്റെ ഡിസ്കില്‍ ഫയല്‍ രൂപത്തില്‍ ഡേറ്റ സൂക്ഷിക്കുന്നത് ഈ രീതിയിലാണ്. പ്രോഗ്രാം നടപ്പാക്കപ്പെട്ട് ഡിസ്കില്‍ ഫയല്‍ രൂപത്തില്‍ ഡേറ്റ സൂക്ഷിക്കപ്പെടേണ്ട സന്ദര്‍ഭം വരുമ്പോള്‍ മാത്രമേ ഫയലിന്റെ വലുപ്പത്തെക്കുറിച്ച് സിസ്റ്റം ശ്രദ്ധിക്കാറുള്ളൂ. തന്മൂലം മിക്കപ്പോഴും ഡിസ്കില്‍ എത്രമാത്രം സ്ഥലം ലഭ്യമാണോ അത്രത്തോളം വലുപ്പവും ഫയലിനുണ്ടാകാം. ഇവിടെ 'റണ്‍ ടൈമില്‍'ആവശ്യം വരുന്ന മുറയ്ക്ക് സ്റ്റാക്കിന് സ്ഥലം ലഭ്യമാക്കുന്നതിന് ഡൈനാമിക് ഡേറ്റാ സ്ട്രക്ചര്‍ സംവിധാനം പ്രയോജനപ്പെടുന്നു.

ഉപയോഗങ്ങള്‍

ഡേറ്റാ ഘടകങ്ങള്‍ തമ്മിലുള്ള പരസ്പര ബന്ധം നിര്‍വചിക്കുന്നതോടൊപ്പം ഉപയോക്താവിനെ ഏതു രീതിയില്‍ ഡേറ്റ കൈകാര്യം ചെയ്യാന്‍ അനുവദിക്കാം എന്നു നിശ്ചയിക്കുന്നതിനും ഡേറ്റാ സ്ട്രക്ചര്‍ പ്രയോജനപ്പെടുന്നു. ഡേറ്റാ ഘടകങ്ങളെ പുതിയതായി ചേര്‍ക്കാനും നീക്കം ചെയ്യാനും ഡേറ്റയില്‍ അനുവദനീയ ക്രിയകള്‍ പ്രാവര്‍ത്തികമാക്കാനും ഉപയോക്താവിന് സൗകര്യം ഉണ്ടായാല്‍ മാത്രം മതിയാകും. മറിച്ച്, കംപ്യൂട്ടറില്‍ ഏതു രീതിയിലാണ് പ്രസ്തുത ഡേറ്റ സംഭരിച്ചു വച്ചിരിക്കുന്നത്, ഡേറ്റയുടെ ആന്തരിക ഘടന എത്തരത്തിലുള്ളതാണ് തുടങ്ങിയ കാര്യങ്ങളെക്കുറിച്ച് ഉപയോക്താക്കള്‍ അറിയണമെന്നില്ല. ഉദാഹരണമായി അമൂര്‍ത്ത രൂപത്തിലുള്ള സ്റ്റാക് ഡേറ്റയില്‍ (abstract stack data) പുഷ്, പോപ്പ്, ടെസ്റ്റ് എംപ്റ്റി (സ്റ്റാക് ഒഴിഞ്ഞിരിക്കുകയാണോ എന്ന് തിരക്കുക) എന്നീ ക്രിയകള്‍ മാത്രമേ ഉപയോക്താവിനു ചെയ്യേണ്ടതായിട്ടുള്ളൂ. പൊതുവേ ഡേറ്റാ പ്രതിനിധാനം ഉപയോക്താവില്‍ നിന്നു മറച്ചു പിടിക്കുകയാണു പതിവ്. ഈ നടപടികളെല്ലാം ഡേറ്റയുടെ സുരക്ഷയ്ക്കു വേണ്ടിയാണ് രൂപം കൊണ്ടിട്ടുള്ളത്.


ഓരോ ഡേറ്റാ സ്ട്രക്ചറിലും ഡേറ്റാ എലിമെന്റുകളെ പുതിയതായി ചേര്‍ക്കാനും നീക്കം ചെയ്യാനും അവയുടേതായ രീതികള്‍ ഉണ്ടായിരിക്കും. അതുപോലെ എല്ലാ പ്രോഗ്രാമിങ് ഭാഷകളിലും എല്ലാവിധ ഡേറ്റാ സ്ട്രക്ചറുകളും പ്രാവര്‍ത്തികമാക്കാനുമാകില്ല. ഡേറ്റാ സ്ട്രക്ചറിന് അനുയോജ്യമായ കംപ്യൂട്ടര്‍ ഭാഷ തിരഞ്ഞെടുക്കുകയാകും ഉത്തമം. ഉദാഹരണമായി റെക്കാഡ് രീതിയ്ക്ക് സൗകര്യപ്രദം കോബോള്‍ ആണെങ്കില്‍ ലിസ്റ്റ് രീതിക്കനുയോജ്യം ലിസ്പ്(LISP) ആണ്. തന്മൂലം ഒരു പ്രോഗ്രാമിങ് ഭാഷയ്ക്ക് ഏതെല്ലാം തരം ഡേറ്റാ സ്ട്രക്ചര്‍ കൈകാര്യം ചെയ്യാനാകുമെന്നതിനെ അടിസ്ഥാനമാക്കിയാണ് മിക്കപ്പോഴും അതില്‍ ഉപയോഗിക്കേണ്ട ഡേറ്റാ സ്ട്രക്ചര്‍ ഏതായിരിക്കണമെന്ന് നിശ്ചയിക്കാറുള്ളത്.

താളിന്റെ അനുബന്ധങ്ങള്‍
സ്വകാര്യതാളുകള്‍