Xuddi shu uchi elementlarni qo'shish va o'chirish uchun ishlatiladi.
Bir uchi kiritish uchun, ya'ni orqa uchi, boshqa uchi elementlarni o'chirish uchun, ya'ni old uchi uchun ishlatiladi.
Amaldagi ko'rsatgichlar soni
Bittasi
Ikki (oddiy navbatda)
Amaliyotlar
Push va Pop
Enqueue va dequeue
Bo'sh holatni tekshirish
Top == -1
Old == -1 || Old == Orqa + 1
To'liq holatni tekshirish
Top == Maks - 1
Orqa == Maks - 1
Variantlar
Uning variantlari yo'q.
Uning dumaloq navbat, ustuvor navbat, ikki marta tugagan navbat kabi variantlari mavjud.
Amalga oshirish
Oddiyroq
Nisbatan murakkab
Stek va Navbatni amalga oshirish
Stekni amalga oshirish
Yig'ma ikki usulda qo'llanilishi mumkin:
Statik amalga oshirish stek yaratish uchun massivlardan foydalanadi. Statik amalga oshirish osonlikcha uskuna bo'lsa-da, lekin uni yaratishning moslashuvchan usuli emas, chunki stak hajmini deklaratsiyalash dasturni tuzish paytida amalga oshirilishi kerak, shundan keyin uning o'lchamini o'zgartirish mumkin emas. Bundan tashqari, statik dastur xotiradan foydalanishda unchalik samarali emas. Bir qator (dasturni ishlab chiqish vaqtida) operatsiya boshlanishidan oldin (stekni amalga oshirish uchun) e'lon qilinadi.
Endi stakda saralanadigan elementlar soni juda oz bo'lsa, statik ravishda ajratilgan xotira behuda ketadi. Boshqa tomondan, agar stekda saqlanadigan elementlarning soni ko'proq bo'lsa, biz yangi elementlarni joylashtirishi uchun massivni uning hajmini oshirish uchun o'zgartira olmaymiz.
Dinamik dastur bog'langan ro'yxat vakili deb ham ataladi va ma'lumotlar strukturasining stek turini amalga oshirish uchun ko'rsatgichlardan foydalanadi.
Navbatni amalga oshirish
Navbat ikki usulda amalga oshirilishi mumkin:
Statik amalga oshirish: Agar navbat massivlar yordamida amalga oshirilsa, biz navbatda saqlamoqchi bo'lgan elementlarning aniq sonidan oldin ishonch hosil qilishimiz kerak, chunki massivning kattaligi loyihalash paytida yoki ishlov berish boshlanishidan oldin e'lon qilinishi kerak.
Bunday holda, qatorning boshi navbatning old qismiga aylanadi va massivning oxirgi joylashuvi navbatning orqa qismi sifatida ishlaydi. Quyidagi munosabat massivlar yordamida amalga oshirilganda barcha elementlarning navbatdagi mavjudligini beradi:
old - orqa + 1
Agar "orqa Dinamik dastur: Ko'rsatkichlar yordamida navbatlarni amalga oshirish, asosiy kamchilik shundaki, bog'langan vakolatxonadagi tugun massiv tasviridagi mos keladigan elementga qaraganda ko'proq xotira maydonini sarf qiladi.
Ma'lumotlar maydoni uchun har bir tugunda kamida bittadan maydon mavjud, ikkinchisi esa keyingi tugunning manzilini saqlashi kerak, bog'langan vakolatxonada esa faqat ma'lumotlar maydoni mavjud. yoki boshqa elementlar guruhi o'rtasida elementni o'chirish.
Stek va Navbatdagi operatsuyalar va dasturlar.
Stekdagi operatsiyalar
Yig'mada ishlash mumkin bo'lgan asosiy operatsiyalar quyidagilar:
Durang: to'plamning yuqori qismiga yangi element qo'shilganda PUSH operatsiyasi deb nomlanadi. Elementni stekka bosish elementni qo'shishni talab qiladi, chunki yangi element yuqori qismga kiritiladi. Har bir surish operatsiyasidan keyin tepa bittaga oshiriladi. Agar massiv to'la bo'lsa va unga yangi element qo'shib berilmasa, u STACK-FULL sharti yoki STACK OVERFLOW deb nomlanadi. PUSH OPERATION - funktsiya C:
Stekni ko'rib chiqish quyidagicha e'lon qilinadi
int stack [5], top = -1;
bekor push ()
{
int element;
agar (yuqori <4)
{
printf ("Raqamni kiriting");
skanerlash ("% d", & element);
top = top + 1;
stack [top] = element;
}
boshqa
{
printf ("Stek to'la");
}
}
POP: Agar element stekning yuqori qismidan o'chirilsa, u POP operatsiyasi deb nomlanadi. Har bir pop operatsiyadan keyin stek bittaga kamayadi. Agar stekda hech qanday element qolmasa va pop bajarilsa, bu natijada STACK UNDERFLOW holati kelib chiqadi, bu sizning stekingiz Bo'sh ekanligini anglatadi. POP OPERATION - C funktsiyalari:
Stekni ko'rib chiqish quyidagicha e'lon qilinadi
int stack [5], top = -1;
bekor pop ()
{
int element;
agar (top> = 4)
{
item = stack [top];
top = top - 1;
printf ("O'chirilgan raqam =% d", element);
}
boshqa
{
printf ("Yig'ma bo'sh");
}
}
Navbatdagi operatsiyalar
Navbatda bajarilishi mumkin bo'lgan asosiy operatsiyalar quyidagilardir:
Enqueue: Elementni navbatga kiritish uchun. C-da operatsion funktsiya:
Navbat e'lon qilinadi
int navbat [5], Old = -1 va orqa = -1;
void add ()
{
int element;
agar (orqa <4)
{
printf ("Raqamni kiriting");
skanerlash ("% d", & element);
agar (old == -1)
{
front = 0;
orqa = 0;
}
boshqa
{
orqa = orqa + 1;
}
navbat [orqa] = element;
}
boshqa
{
printf ("Navbat to'la");
}
}
Dequeue: Elementni navbatdan o'chirish uchun. C-da operatsion funktsiya:
Navbat e'lon qilinadi
int navbat [5], Old = -1 va orqa = -1;
bekor qilish ()
{
int element;
agar (old! = -1)
{
element = navbat [old];
agar (old == orqa)
{
front = -1;
orqa = -1;
}
boshqa
{
old = old + 1;
printf ("O'chirilgan raqam =% d", element);
}
}
boshqa
{
printf ("Navbat bo'sh");
}
}
Stack dasturlari
Kompilyatorda tahlil qilish.
Java virtual mashinasi.
Matn protsessorida bekor qiling.
Veb-brauzerda "Orqaga" tugmasi.
Printerlar uchun PostScript tili.
Kompilyatorda funktsiya chaqiruvlarini amalga oshirish.
Navbat dasturlari
Ma'lumotlar buferlari
Asenkron ma'lumotlarni uzatish (fayl IO, quvurlar, rozetkalar).
Umumiy manbada (printer, protsessor) so'rovlar ajratish.
Yo'l harakati tahlili.
Supermarketda bo'lishi kerak bo'lgan kassalar sonini aniqlang.