a[h ++] =k;
Stek boshiga element qo’shish uchun qiymatni yozamiz va h ko’rsatkichni oshiramiz:
Bo’sh stekning boshidagi ko’rsatkichi h = 0 ga teng. Massivga element qo’shish va o’chirish davomida stek boshi massiv bo’ylab ko’chib turadi.
k = a[ -- h];
Stek boshidan elementni chiqarish uchun teskari amaldan foydalanish lozim:
Stek tuguni ro’yxat tugunidan farqi shundaki, o’zidan oldingi tugun adresini saqlovchi ko’rsatkich ishlatilgan.
struct slist_node
{
void* info;
struct slist_node* pred;
};
Universal stek har bir tuguni axborot qismi void turidagi ko’rsatkichdan iborat strukturadir
stackda end oxirgi tugunga ko’rsatkich, width ma’lumot hajmi, size navbatdagi elementlar soni.
struct stack
{
struct slist_node* end;
int size;
int width;
};
Stek o’zi alohida struktura sifatida kiritilgan
Stek (asosiy funksiyalar)
void pop(struct stack*p) – stek oxiridagi elementni o’chirish.
void push(struct stack*p, void* val) –stek oxiriga element qo’shish. Bu yerda val kiritilayotgan ma’lumotga ko’rsatkich.
char* top(struct stack p) – stek oxiridagi tugun axborot qismiga ko’rsatkich qaytarish.
int empty(struct stack p) – stek bo’shligini tekshirish.
int size (struct stack p) – stek elementlari soni.
Kiritishga misol
|
2 ()
|
6 ([{}])
|
6 ([{})]
|
Misol. 0156 Uzunligi N ga teng, aylanali, kvadratli va figurali qavslardan tashkil topgan ketma-ketlik berilgan. Shu berilgan ketma-ketlikka sonlar va arifmetik amallar qo’shish yordamida to’g’ri ifoda hosil qilish mumkinmi yo’qligii aniqlovchi dastur tuzing. (1 <= N <= 100 000). Kiruvchi ma'lumotlar: Birinchi qatorda qavslar soni N berilgan. Ikkinchi qatorda esa- (, ), [, ], {, } to’plamdan olingan N ta simvollar ketma-ketligi berilgan. Chiquvchi ma'lumotlar: Agar to’g’ri ifoda hosil qilib bo’lsa "Yes", aks holda "No" so’zini chiqaring.
Stek ( misol)
Do'stlaringiz bilan baham: |