C++ tilida stekni statik ko‘rinishda, ya’ni bir o‘lchamli massiv ko‘rinishida amalga oshirishga misol:
Masalaning qo‘yilishi: Elementlari butun sonlardan iborat stekning juft qiymatli elementlari o‘chirilsin. Aytaylik, stek uchun 10 ta joy ajratilgan bo‘lsin, bunda dastlab stek bo‘shligi sababli R=0 bo‘ladi. Stekga yangi element qo‘shish va chiqarish, stek bo‘shligini va to‘laligini tekshirish funksiyalaridan foydalanib shu masalani yechamiz.
Algoritm
Agar stek to‘lmagan bo‘lsa elementlarni kiritamiz. Stekning toq elementlarini saqlab turish uchun yangi b[] massiv e’lon qilamiz.
Agar stek bo‘sh bo‘lmasa, 3-qadamga o‘tish, aks holda 4-qadamga o‘tish.
Stek uchidagi elementni olamiz va juftlikka tekshiramiz. Agar element toq bo‘lsa b massivga joylaymiz. 2-qadamga o‘tish.
b massiv elementlarini teskari tartibda stekka joylash.
Stek tarkibini ekranga chiqarish.
Dastur kodi
#include
using namespace std;
struct STEK
{
int D[255];
int SU;
STEK(){ SU=0; }
void ADD(int SON) {
D[SU]=SON; SU++;
}
void DEL() {
if (SU>=0) {SU--; D[SU] = NULL; }
}
int TOP() { return D[SU-1];
}
void PRINT(){
for (int i=SU-1; i>=0; i--)
cout<
cout<
}
int SIZE() { return SU;
}
};
int main()
{
STEK A,B,C;
string X,Y;
cin>>X>>Y;
int n=X.length(), m=Y.length(), p=0;
for(int i=0; i
A.ADD(X[i]-48);
for(int i=0; i
B.ADD(Y[i]-48);
for( ; A.SIZE()>0 || B.SIZE()>0; )
{
int a = (A.SIZE()>0)?A.TOP():0;
int b = (B.SIZE()>0)?B.TOP()+p:p;
int r = a+b;
if (r>9) { p=1; r-=10;}
else p=0;
C.ADD(r);
A.DEL(); B.DEL();
}
if(p) C.ADD(p);
cout <
return 0;
}
Deklar
Dek so‘zi (DEQ - Double Ended Queue) ingliz tilidan olingan bo‘lib 2 ta chetga ega navbat degan ma’noni bildiradi. Dekning o‘ziga xos xususiyati shuki, unga elementlar har ikkala tomondan – chapdan va o‘ng tomondan kiritilishi va chiqarilishi mumkin (2.3-rasm).
2.3-rasm. Dek tuzilmasi
Do'stlaringiz bilan baham: |