Struktura haqidagi ma'lumotni kiriting:
Sign=sigma
Weight=16
Sign=omega
Weight=44
Sign=alfa
Weight=0
Ruyhatni chiqarish
Sign=sigma weight=16
Sign=omega weight=44
Dasturda ma'lumotlarni kiritish tsikl orqali bajariladi. Tsikl tugatilishi sharti navbatdagi strukturaning int weight elementiga kiritilgan nol qiymatdir.
Strukturalar ro’yhati dinamik tashkil etiladi. Beg va end ko’rsatkichlar nol qiymati orqali initsializatsiya qilingan. Dasturda (struct cell*) tip o’zgartirishidan foydalanilgan chunki malloc funktsiyasi har doim void tipidagi ko’rsatkich qaytaradi.
66 - DARS. RUYHATLAR BILAN ISHLASHDA REKURSIYADAN FOYDALANISH.
Ruyhatning har bir buginida ma'lumot va keyingi element adresi joylashgan.Agar bu ko’rsatkich nol qiymatga ega bo’lsa ro’yhat ohirigacha o’qib bo’lingan. Ruyhatni kurib chiqishni boshlash uchun birinchi elementining adresini bilish etarlidir. Ruyhatni yaratish rekursiv funktsiyasi va ruyhatning elementlarini ekranga chiqarish rekursiv funktsiyasini kurib chiqamiz. Ruyhatni rekursiv tuldirish funktsiyasi quyidagi prototipga ega:
Struct cell* input(void);
Bu funktsiya klaviatura orqali kiritilgan ma'lumotlar bilan to’ldirilgan ro’yhatga ko’rsatkich qaytaradi. Funktsiyaga har gal murojaat qilinganda yangi ruyhat yaratiladi. Agar ruyhatning navbatdagi strukturasining weight o’zgaruvchisiga nol qiymat berilsa funktsiya o’z ishini to’htatadi. Aks holda klaviatura orqali tuldirilgan struktura ruyhatga ulanadi va uning struct cell*pc elementining qiymati funktsiya tanasidan rekursiv chaqirilgan input() funktsiyasi qaytargan qiymatga teng bo’ladi.
Funktsiya tanasi:
Struct cell
{
char sign[10];
int weight;
struct cell*pc;
};
#include
#include
struct cell * input(void)
{
struct cell*p;
p=(struct cell*) malloc(sizeof(struct sell));
printf(“sign=”);
scanf(“%s”,&p->weight);
if (p->weight==0)
{
free(p);
return NULL;
}
p->pc=input();
return p;
/* */
void output(struct cell * p)
{
if (p==NULL)
{
printf(“\nRuyhat tugadi”);
return;
}
printf(“\nsign=%s\tweight=%d”,p->sign,p->weight);
output(p->pc);
}
void main()
{
struct cell * beg=NULL;
printf(“\Ruyhat elementlarini kiriting:\n”);
beg=input();
printf(“\n Ruyhatni chikarish:”);
output(beg);
}
Dastur bajarilishiga misol:
Ruyhat elementlarini kiriting:
Sign=Zoro
Weight=1938
Sign=Zodiac
Weight=1812
Sign=0
Weight=0
Ro’yhatni chiqarish:
Sign=Zoro weight=1938
Sign=Zodiac weight=1812
Ruyhat tugadi
Dostları ilə paylaş: |