void main() {
char br1[3]={’(’, '[', '{' }; //ochiluvchi qavslar
char br2[3]={’)’, ']', '}' }; //yopiluvchi qavslar
char s[80], upper;
int i, k, OK;
Stack S; // belgilar steki
printf("Qavsli satrni kiriting > ”);
gets (s);
S.size=0; // stek bo’sh
OK = 1;
for (i = 0; OK && (s[i] != '\0'); i ++)
for (k = 0; k < 3; k ++) { //3 turdagi qavsni tekshirish
if (s[i] == br1[k]) { // ochiluvchi qavs
Push (S, s[i] ); break;
}
if (s[i] == br2[k]) { // yopiluvchi qavs
upper = Pop (S);
if (upper != br1[k]) OK = 0;
break;
}
}
if (OK && (S.size == 0))
printf("\nIfoda to’g’ri\nP);
else printf("\nIfoda noto’g’ri \n”);
}
Ochiluvchi va yopiluvchi qavslar br1 va br2 massivlariga yoziladi. Eng boshida stek bo’sh va uning o’lchami nolga teng (S.size = 0). Xatolik yuz bersa, OK o’zgaruvchisi tashqi tsikldan chiqishni ta’minlaydi (satrning qolgan qismi qaralmaydi). Bu o’zgaruvchiga nol qiymati ta’minlanadi, agarda stekda boshqa turdagi qavs uchrasa yoki stek bo’sh bo’lsa.
Stekni ro’yxat yordamida tadbiq qilish. Belgilarni saqlovchi stekka misol qarab chiqamiz (bu eng oddiy holat, stek elementlari ixtiyoriy turdagi tuzilma bo’lishi mumkin, xuddi shunday ro’xat bo’lishi ham mumkin). Stekni ikki bog’lamli ro’yxat asosida tadbiq qilamiz. Buning uchun stek elementlari sonini mumkin bo’lgan xotira hajmi bilan chegaralaymiz.
Do'stlaringiz bilan baham: |