From Wikipedia, the free encyclopedia
Համակարգչային գիտության մեջ տվյալների կառուցվածքը տվյալների կազմակերպման և պահպանման ձևաչափ է, որը սովորաբար ընտրվում է տվյալների արդյունավետ հասանելիության համար[1][2][3]։ Ավելի ճիշտ, տվյալների կառուցվածքը տվյալների արժեքների, դրանց միջև փոխհարաբերությունների և գործառույթների կամ գործողությունների հավաքածու է, որը կարող է կիրառվել տվյալների վրա [4], այսինքն՝ այն տվյալների վերաբերյալ հանրահաշվական կառուցվածք է:
Տվյալների կառուցվածքները ծառայում են որպես վերացական(աբստրակտ) տվյալների տեսակների (ADT) հիմք: ADT-ն սահմանում է տվյալների տեսակի տրամաբանական ձևը: Տվյալների կառուցվածքը իրականացնում է տվյալների տեսակի ֆիզիկական ձևը[5]։
Տվյալների կառուցվածքների տարբեր տեսակներ հարմար են տարբեր տեսակի հավելվածների համար, իսկ որոշները խիստ մասնագիտացված են կոնկրետ խնդիրներ լուծելու համար: Օրինակ, ռելյացիոն տվյալների բազաները սովորաբար օգտագործում են B-tree ինդեքսներ՝ տվյալներ փնտրելու համար[6], մինչդեռ կոմպիլյատորների իրականացումների մեջ սովորաբար օգտագործում են հեշ աղյուսակներ՝ իդենտիֆիկատորներ փնտրելու համար[7]:
Տվյալների կառուցվածքները թույլ են տալիս արդյունավետ կառավարել մեծ ծավալի տվյալների այնպիսի ծրագրեր, ինչպիսիք են տվյալների բազաները և ինտերնետի ինդեքսավորման ծառայությունները: Որպես կանոն, արդյունավետ տվյալների կառուցվածքները արդյունավետ ալգորիթմների նախագծման բանալին են: Որոշ ֆորմալ նախագծման մեթոդներ և ծրագրավորման լեզուներ կարևորում են տվյալների կառուցվածքները, այլ ոչ թե ալգորիթմները՝ որպես ծրագրային ապահովման մշակման հիմնական գործոն: Տվյալների կառուցվածքները կարող են օգտագործվել ինչպես հիմնական, այնպես էլ երկրորդային հիշողության մեջ պահվող տեղեկատվության պահպանման և որոնման կազմակերպման համար[8]:
Տվյալների կառուցվածքները կարող են իրականացվել տարբեր ծրագրավորման լեզուների միջոցով, սակայն դրանք բոլորն ունեն տվյալների արդյունավետ կազմակերպման և պահպանման ընդհանուր նպատակ[9]: Տվյալների կառուցվածքները սովորաբար հենվում են համակարգչի՝ իր հիշողության մեջ տվյալներ ստանալու և պահելու ունակության վրա, որը նշված է ցուցիչով՝ բիթային տող, որը ներկայացնում է հիշողության հասցե, որն ինքնին կարող է պահվել հիշողության մեջ և կառավարվել ծրագրի կողմից: Այսպիսով, զանգվածի և գչառման տվյալների կառուցվածքները հիմնված են տվյալների տարրերի հասցեների հաշվարկման վրա՝ օգտագործելով թվաբանական գործողությունները, մինչդեռ հարակից տվյալների կառուցվածքները հիմնված են տվյալների տարրերի հասցեները հենց կառուցվածքում պահելու վրա: Տվյալների կառուցվածքի այս մոտեցումը խորը հետևանքներ ունի ալգորիթմների արդյունավետության և մասշտաբայնության վրա: Օրինակ, զանգվածներում հարակից հիշողության բաշխումը հեշտացնում է արագ մուտքի և փոփոխման գործողությունները, ինչը հանգեցնում է օպտիմիզացված հաջորդական մշակմանը[10]:
Տվյալների կառուցվածքի ներդրումը սովորաբար պահանջում է գրել մի շարք պրոցեդուրաներ, որոնք ստեղծում և շահարկում են այդ կառուցվածքի օրինակները: Տվյալների կառուցվածքի արդյունավետությունը չի կարող վերլուծվել այս գործողություններից առանձին: Այս դիտարկումը դրդում է վերացական տվյալների տիպի տեսական հայեցակարգը՝ տվյալների կառուցվածք, որն անուղղակիորեն որոշվում է դրա վրա կատարվող գործողություններով և այդ գործողությունների մաթեմատիկական հատկություններով (ներառյալ դրանց տարածական և ժամանակային ծախսերը)[11]:
Կան բազմաթիվ տեսակի տվյալների կառուցվածքներ, որոնք սովորաբար կառուցված են ավելի պարզ տվյալների տեսակների վրա: Հայտնի օրինակներն են[12]՝
Ասսեմբլերային լեզուների մեծ մասը և որոշ ցածր մակարդակի լեզուներ, ինչպիսիք են BCPL-ը, չունեն տվյալների կառուցվածքների ներկառուցված աջակցություն: Մյուս կողմից, շատ բարձր մակարդակի ծրագրավորման լեզուներ և որոշ ավելի բարձր մակարդակի ասսեմբլերի լեզուներ, ինչպիսիք են MASM-ը, ունեն հատուկ շարահյուսություն կամ այլ ներկառուցված աջակցություն որոշակի տվյալների կառուցվածքների համար, ինչպիսիք են զանգվածները: Օրինակ, C (BCPL-ի անմիջական ժառանգորդը) և Պասկալ լեզուները համապատասխանաբար աջակցում են կառուցվածքներին, բացի վեկտորներից (միաչափ զանգվածներ) և բազմաչափ զանգվածներից[13][14]։
Ծրագրավորման լեզուներից շատերն ունեն գրադարանային մեխանիզմ, որը թույլ է տալիս տվյալների կառուցվածքի իրականացումը վերօգտագործել տարբեր ծրագրերի կողմից: Ժամանակակից լեզուները սովորաբար ունեն ստանդարտ գրադարաններ, որոնք իրականացնում են տվյալների ամենատարածված կառուցվածքները: Օրինակներ են C++ Ստանդարտ Կաղապարների գրադարանը(STL), Java Collections Framework-ը և Microsoft .NET Framework-ը:
Ժամանակակից լեզուները նաև ընդհանուր առմամբ աջակցում են մոդուլային ծրագրավորմանը՝ գրադարանային մոդուլի միջերեսի և դրա իրականացման միջև բաժանումը: Ոմանք տրամադրում են տվյալների անթափանց տեսակներ, որոնք թույլ են տալիս հաճախորդներին թաքցնել իրականացման մանրամասները: Օբյեկտ-կողմնորոշված ծրագրավորման լեզուները, ինչպիսիք են C++-ը, Java-ն և Smalltalk-ը, սովորաբար օգտագործում են դասեր այդ նպատակով:
Շատ հայտնի տվյալների կառուցվածքներ ունեն զուգահեռ տարբերակներ, որոնք թույլ են տալիս մի քանի հաշվողական հոսքերին միաժամանակ հասանելություն ունենալ տվյալների կառուցվածքի մեկ կոնկրետ օրինակին [15]։
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.