void Push (Stack &S, char x) {
PNode NewNode;
NewNode = new Node;// yangi tugun hosil qilish
NewNode->data = x;//tugunga ma’lumot kiritish
NewNode->next = S.Head;
NewNode->prev = NULL;
if (S.Head) // ro’yxat boshidan qo’shish
S.Head->prev = NewNode;
S.Head = NewNode;
if (!S.Tail) S.Tail = S.Head;
}
Stekning cho’qqisidan elementni olish. Pop funktsiyasi yuqoridagi elementni o’chiradi va uning qiymatini qaytaradi.
char Pop (Stack &S){
PNode TopNode = S.Head;
char x;
if (!TopNode )// agar stek bo’sh bo’lsa, u holda
return char(255);//255 kodi bilan belgi qaytarish
x = TopNode->data;
S.Head = TopNode->next;
if (S.Head) S.Head->prev=NULL;
else S.Tail = NULL;
delete TopNode; // xotirani tozalash
return x;
}
Dasturda tizimli stek. Dastur bajarilishi vaqtida dastur steki uchun aniq xotira sohasi bo’shatiladi. Bundan tashqari protsessorda stek cho’qqisi adresi saqlanadigan maxsus yacheyka (registr) mavjud. Dastur stekni quyidagilarni saqlash uchun ishlatadi:
1) protsedura va funktsiyalardan qaytish adreslarini (bu adreslar protsedura yoki funktsiyalar o’z ishni yakunlagandan keyin dasturga qaytishni ta’minlaydi);
2) protsedura va funktsiyalarga taqdim etiladigan parametrlarni;
3) protsedura va funktsiyalarning lokal o’zgaruvchilarini;
4) vaqtincha ma’lumotlarni (assemblerda yozilgan dasturlarda).
Hammasidan ham ko’proq stekda lokal o’zgaruvchilar saqlanadi. Shuning uchun ham katta massivlar uchun dinamik xotira ajratiladi. Bundan tashqari, iloji boricha protseduralarga katta hajmli tuzilmalarni taqdim etmaslik kerak, buning o’rniga ularning adresi yoki ularga ko’rsatkichlarni berish zarur (buning uchun parametr nomi oldidan & belgisini qo’yish zarur bo’ladi).
Do'stlaringiz bilan baham: |