chetga ega navbat degan ma‟noni bildiradi. Dekning o„ziga xos xususiyati shuki, unga elementlar har ikkala tomondan – chapdan va o„ng tomondan kiritilis hiva chiqarilishi mumkin (2.3-rasm). 2.3-rasm. Dek tuzilmasi
Dek ustida bajariladigan amallar:
Chapdanelementkiritish. 2.
O„ngdanelementkiritish. 3.
Chapdan element chiqarish. 42 4.
O„ngdanelementchiqarish. 5.
Dekbo„shliginitekshirish. 6.
Dek to„laligini tekshirish.
C++tilidadeknistatikko„rinishda,ya’nibiro„lchamlimassivko„rinishid a
amalga oshirishga misol: Berilayotgan butun sonlar ketma-ketligining 1- yarmini dekning chaptomonidan,qolganyarminidekning o„ng tomonidankiriting. Dekningelementlarinibirsafarchapdan,birsafaro„ngdanjuftlikkatekshirib,toq elementlario„chirilsin.
Algoritm
1.
Dekkanechtaelementkiritilishianiqlanadi–n,i=0. 2.
++; agar i i 4-qadamga o„tiladi.3.
gar in/2 A bo„lsa,dekningo„ngtomonidankiritiladi,2-qadamgao„tish. 4.
Agar dek bo„sh bo„lmasa, chapdan element chiqarib olamiz. Agar element juftbo„lsa,b[]massivgajoylaymiz.5-qadamgao„tiladi.Agardekbo„shbo„lsa,6- qadamgao„tish. 5.
Agar dek bo„sh bo„lmasa, o„ngdan element chiqarib olamiz. Agar element juftbo„lsa,b[]massivgajoylaymiz.5-qadamgao„tiladi.Agardekbo„shbo„lsa,6- qadamgao„tish. 6.
b[] massiv elementlarini dekka o„ng tomondan kiritamiz.
7.
Dek tarkibini ekranga chiqaramiz. Dastur kodi #include #include usingnamespacestd; int a[10],n,R=0; boolisEmpty(){ if(R==0) return true; else returnfalse;
} 43
bool isFull(){ if(R>=10) return true; else returnfalse; } int kirit_left(int s){ if(isFull()){cout<<"\ndek to'ldi";n=R;returnEXIT_SUCCESS;} for(inti=R;i>0;i--) a[i]=a[i-1]; a[0]=s;R++; } int olish_left(){ if(isEmpty()){cout<<"\ndek bo'sh";returnEXIT_SUCCESS;} intt=a[0]; for(int i=0;ii=""> a[i]=a[i+1]; R--; returnt; } int kirit_right(int s){ if(isFull()){cout<<"\ndek to'ldi";n=R;return EXIT_SUCCESS;} a[R]=s;R++; } int olish_right(){ if(isEmpty()){cout<<"\ndek bo'sh";returnEXIT_SUCCESS;} R--; returna[R]; } int print(){ cout<ele-tlari="; for(inti=0;ii=""> cout<i="">
Dinamik berilganlar tuzilmasi. - Динамик тузилмалар (руйхат, дарахт)
Uzellar (elementlar) va ularning munosabatlaridan iborat elementlar toplamining ierarxik tuzilmasiga daraxtsimon ma’lumotlar tuzilmasi deyiladi. Daraxt – bu shunday chiziqsiz
bog'langan ma’lumotlar tuzilmasiki, u quyidagi belgilari bilan tavsiflanadi: - daraxtda shunday bitta element borki, unga boshqa elementlardan murojaat yo’q. Bu element daraxt ildizi deyiladi; - daraxtda ixtiyoriy element chekli sondagi ko’rsatkichlar yordamida boshqa tugunlarga murojaat qilishi mumkin; - daraxtning har bir elementi faqatgina o’zidan oldingi
kelgan bitta element bilan bog’langan. Binar daraxtlarni qurish Binar daraxtda har bir tugun- elementdan ko’pi bilan 2 ta shox chiqadi. Daraxtlarni xotirada tasvirlashda uning ildizini
ko’rsatuvchi ko’rsatkich berilishi kerak. Daraxtlarni kompyuter xotirasida tasvirlanishiga ko’ra har bir element (binar daraxt tuguni) to’rtta maydonga ega yozuv shaklida bo’ladi, ya’ni kalit maydon, informatsion maydon, ushbu elementni o’ngida va chapida joylashgan elementlarning xotiradagi adreslari saqlanadigan maydonlar. Daraxt hosil qilinayotganda,
otaga nisbatan chap tomondagi o’g’il qiymati kichik kalitga, o’ng tomondagi o’g’il esa katta qiymatli kalitga ega bo’ladi. Har safar daraxtga yangi element kelib qo’shilayotganda u avvalambor daraxt ildizi bilan solishtiriladi. Agar element ildiz kalit qiymatidan kichik bo’lsa, uning chap shoxiga, aks holda o’ng shoxiga o’tiladi. Agar o’tib ketilgan shoxda tugun mavjud 4-
Amaliy mashg’ulot. Daraxtsimon ma’lumotlar tuzilmasini e’lon qilish va ular ustida bajariladigan amallarga doir masalalar yechish. bo’lsa, ushbu tugun bilan ham solishtirish
amalga oshiriladi, aks holda, ya’ni u shoxda tugun mavjud bo’lmasa, bu element shu tugunga joylashtiriladi.
Dinamik ma‟lumotlar tuzilmasi
Statik ma‟lumotlartuzilmasi vaqt o„tishi bilan o„z o„lchamini o„zgartirmaydi. Biz har doim dastur kodidagi statik ma‟lumotlar tuzilmasiga qarab ularning o„lchamini bilishimiz mumkin. Bunday ma‟lumotlarga teskari ravishda dinamik ma‟lumotlar tuzilmasi mavjud bo„lib, bunda dastur bajarilishi davomida dinamik ma‟lumotlar tuzilmasi o„lchamini o„zgartirishi mumkin. Dinamik ma’lumotlar tuzilmasi – bu qandaydir bir qonuniyatga asoslanib shakllangan, lekin elementlari soni, o„zaro joylashuvi va o„zaro aloqasi dastur bajarilishi davomida shu qonuniyat asosida dinamik o„zgaruvchan bo„lgan ma‟lumotlar tuzilmasidir. Dasturlarda dinamik ma‟lumotlar tuzilmasidan ko„pincha chiziqli ro„yhatlar, steklar, navbatlar va binar daraxtlar ishlatiladi. Bu tuzilmalar bir-biridan elementlarningbog„lanishusulivaularustidabajarilishimumkinbo„lganamallari bilan farqlanadi. Dinamik tuzilmalar massiv va yozuvdan farqli ravishda operativ xotiradaketma- ket sohalarda joylashmaydi. Ixtiyoriy dinamiktuzilmaelementi 2tamaydondantashkiltopadi:tuzilmatashkiletilishigasababbo„layotgan
Dinamik ma‟lumotlat tuzilmasi fayllar matnli toifalashtirilgan toifalashtirilmagan Bog„lanmagan dinamik tuzilmalar Statik MT kabi klassifikasiyalanadi Bog„langan dinamik tuzilmalar chiziqli tuzilmalar Halqasimon tuzilmalar chiziqsiz tuzilmalar Birbog„lamlinavbat stek dek ro„yhat ko„p bog„lamli bir bog„lamlihal- qasimon ro„yhatlar ko„p bog„lamlihal- qasimon ro„yhatlar daraxtlar graflar Ikkilik(binar) tarmoqlanuvchi ko „
p bog „
lamli chiziqli ro „
yhatlar informatsion maydon va elementlarning o„zaro aloqasini ta‟minlovchi ko‘rsatkichlimaydon.Chiziqliro„yhatlardaharbirelemento„zidankeyingisiyoki oldingisibilanhambog„langanbo„lishimumkin.Birinchiholatda,ya‟nielementlar o„zidan keyingi element bilan bog„langan bo„lsa, bunday ro„yhatga bir bog‘lamli ro‘yhat deyiladi. Agar har bir element o„zidan oldingi va o„zidan keyingi element bilan bog„langan bo„lsa, u holda bunday ro„yhatlarga 2 bog‘lamli ro‘yhatlar deyiladi. Agar oxirgi element birinchi element ko„rsatkichi bilan bog„langan bo„lsa, bunday ro„yhatga halqasimon ro‘yhat deyiladi. Ro„yhatning har bir elementi shu elementni identifikatsiyalash uchun kalitga ega bo„ladi. Kalit odatda butun son yoki satr ko„rinishida ma‟lumotlar maydonining bir qismi sifatida mavjudbo„ladi.Ro„yhatlarustidaquyidagiamallarnibajarishmumkin. -
ro„yhatni shakllantirish (birinchi elementini yaratish); -
ro„yhat oxiriga yangi element qo„shish; -
berilgan kalitga mos elementni o„qish; -
ro„yhatning ko„rsatilgan joyiga element qo„shish (berilgan kalitga mos elementdan oldin yoki keyin) -
berilgan kalitga mos elementni o„chirish; -
kalit bo„yicha ro„yhat elementlarini tartibga keltirish. Ro„yhatlar bilan ishlashda dasturda boshlang„ich elementni ko„rsatuvchi ko„rsatkich talab etiladi. Chiziqli bir bog„lamli ro„yhatlar ustida turli amallar bajarish algoritmlari va dasturlarini ko„rib chiqamiz.
Chiziqli bir bog’lamli ro’yhatlar va ular ustida amal bajarish algotirmlari.
Chiziqli bir bog‘lamli ro‘yhatlar
Bir bog‘lamli ro‘yhat deb elementlarning shunday tartiblangan ketma-ketligigaaytiladiki, har bir element 2 ta maydonga: informatsion maydon info va ko‘rsatkich maydoniptr ga ega bo‘ladi (3.2-rasm).
Mazkur ko‘rinishdagi ro‘yhat elementi ko‘rsatkichining o‘ziga xosligi shundan iboratki, u faqatgina ro‘yhatning navbatdagi (o‘zidan keyin keluvchi) elementi adresini ko‘rsatadi. Bir tomonlama yo‘naltirilgan ro‘yhatda eng so‘ngi element ko‘rsatkichi bo‘sh, ya’ni NULL bo‘ladi.
Lst – ro‘yhat boshi ko‘rsatkichi. U ro‘yhatni yagona bir butun sifatida ifodalaydi. Ba’zan ro‘yhat bo‘sh bo‘lishi ham mumkin, ya’ni ro‘yhatda bitta ham element bo‘lmasligi mumkin. Bu holda lst = NULL bo‘ladi. Hozir chiziqli bir bog‘lamli ro‘yhat hosil qilish dasturini ko‘rib chiqsak. Buning uchun biz foydalanuvchi tomonidan yaratiladigan nostandart toifa yaratib olishimiz kerak. Buning birqancha usullari mavjud, ya’ni klasslar yoki strukturalar bilan amalga oshirish mumkin. Masalan,
class Node{
public://klassma’lumotlarigatashqaridanbo‘ladiganmurojaatgaruxsatberish int info; // informatsion maydonNode* next;// ko‘rsatkichli maydon }; Bu yerda biz Node nomli toifa yaratdik va ro‘yhatimiz butun sonlardan iborat. Endi ro‘yhat elementlarini shu toifa orqali e’lon qilsak bo‘ladi, ya’ni
Node *lst = NULL;// ro‘yhat boshi ko‘rsatkichi Node*last=NULL;//ro‘yhatgaoxirgikelibtushganelementningko‘rsatkichi Endi shu belgilashlar orqali ro‘yhat hosil qilamiz Node * p = new Node; int numb = -1; cout<<"son kiriting: "; cin>>numb; p->info = numb; p->next = NULL;
if (lst == NULL) {
lst = p;
last = p;
}
Chiziqsiz malumotlar tuzilmasi haqida tushuncha va klassifikatsiyasi.