Мавзу: Steklar va navbatlar. Ularni mantiqiy tasvirlash va ustida amal bajarish algoritmlari


Download 0.74 Mb.
bet3/5
Sana03.02.2023
Hajmi0.74 Mb.
#1150821
1   2   3   4   5
Bog'liq
NXFRPlaDuHno47NFXSpIsPwAF7k75aEylPUwJLi8

Algoritm

  • 1. Agar stek to’lmagan bo’lsa elementlarni kiritamiz. Stekning toq elementlarini saqlab turish uchun yangi b[] massiv e’lon qilamiz.
  • 2. Agar stek bo’sh bo’lmasa, 3-qadamga o’tish, aks holda 4-qadamga o’tish.
  • 3. Stek uchidagi elementni olamiz va juftlikka tekshiramiz. Agar element toq bo’lsa b massivga joylaymiz. 2-qadamga o’tish.
  • 4. b massiv elementlarini teskari tartibda stekka joylash.
  • 5. Stek tarkibini ekranga chiqarish.

#include

  • #include
  • using namespace std;
  • int a[10],R=0,n;//bu yerda n stekka kiritilishi kerak bo'lgan elementlar soni.
  • int kiritish(int s){
  • a[R]=s; R++; }
  • int chiqarish(){ R--;
  • return a[R]; }
  • bool isEmpty(){
  • if(R==0) return true;
  • else return false; }

bool isFull(){

  • bool isFull(){
  • if(R>=10) return true;else return false; }
  • int print(){
  • int i=0,c[n];
  • while(!isEmpty()){
  • c[i]=chiqarish();
  • cout<
  • for(int j=i-1;j>=0;j--) kiritish(c[j]); }

int main(){

  • int main(){
  • int n,s;
  • cout<<"n=";cin>>n;
  • for(int i=0;i
  • if(!isFull()){ cin>>s; kiritish(s);}
  • else{cout<<"stek to'ldi"; n=i;break;} }
  • cout<<"\nstek elementlari: ";
  • print();
  • int b[n],k=0;
  • for(int i=0;i
  • if(s%2!=0) b[k++]=s; }

for(int i=k-1;i>=0;i--) kiritish(b[i]);

  • for(int i=k-1;i>=0;i--) kiritish(b[i]);
  • cout<<"\nnatijaviy stek elementlari: ";
  • print();
  • return 0;
  • }
  • FIFOFirst in - First out. Навбат икки томони очиқ тузилма.
  • En-1
  • E2
  • E1
  • chiqish
  • kirish
  • ёки
  • DEQ - Double Ended Queue. Ikkita cheti ochiq navdat.

Navbat

  • Navbat bu FIFO (First In - First Out - "birinchi kelgan – birinchi ketadi"),shunday o’zgaruvchan uzunlikdagi ketma-ketlik, unda tuzilmaga
  • elementlar faqat navbatning oxiridan qo’shiladi va elementlarni tuzilmadan chiqarish navbat boshidan amalga oshiriladi. Navbat ustida bajariladigan asosiy amallar: yangi element qo’shish, elementni chiqarish, uzunligini aniqlash, navbatni tozalash.

Amallar

  • Navbatga yangi element kiritilayotganda navbat oxiri ko’rsatkichi ko’rsatayotgan adresga yoziladi va shundan keyin navbat oxiri ko’rsatkichi bittaga
  • oshiriladi. Navbatdan elementni o’chirishda navbat boshi ko’rsatkichi ko’rsatayotgan adresdagi element o’chiriladi va shundan keyin bu ko’rsatkichning
  • qiymati bittaga oshiriladi. Navbatga elementlar kiritilganda navbat oxiri ko’rsatkichi shu navbat uchun ajratilgan xotira sohasining oxiriga yetib qoladi.
  • Bunda navbat to’lgan hisoblanadi.

Amallar

  • Agar navbatdan elementlar o’chiriladigan bo’lsa, navbat boshida bo’sh joy ajratiladi. Vaholanki, navbat oxiri ko’rsatkichi chegaraga yetib qolganligi sababli, navbatga yangi element kiritib bo’lmaydi. Shu sababli navbatda har safar element o’chirilganda qolgan barcha elementlar bitta oldinga surilishi kerak bo’ladi. Natijada navbat oxirida bo’sh joy ochiladi. Bu holatda navbat boshi ko’rsatkichiga xojat qolmaydi.

C++ tilida navbatni bir o’lchamli massiv ko’rinishda amalga oshirish

  • Navbat hosil qilish va uni o’zgartirish. 4 ta amal: element kirinish, chiqarish, navbatni bo’shlikka va to’lalikka tekshirish amallari yordamida bajariladi. Masala. Butun sonlardan iborat navbatning juft elementlarini o’chirish dasturini keltiramiz.
  • Algoritm
  • 1. Agar navbat to’lmagan bo’lsa unga element kiritamiz, kiritib bo’lgach keyingi 2-qadamga o’tish, aks holda navbat to’lganligini xabar berib, keyingi
  • 2-qadamga o’tish.

Download 0.74 Mb.

Do'stlaringiz bilan baham:
1   2   3   4   5




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling