Программалау оқулық Алматы, 012 Қазақстан Республикасы Білім жəне ғылым министрлігінің «Оқулық»



Pdf көрінісі
бет201/642
Дата30.03.2022
өлшемі3,66 Mb.
#29231
түріПрограмма
1   ...   197   198   199   200   201   202   203   204   ...   642
Байланысты:
pavlovskaia-jogargy-dengeili

Node *pv = pbeg;

while (pv){             // тізімді экранға шығару

cout << pv->d << ' ';

pv = pv->next;

}

return 0;

}

//--------------------------------------------------

// Алғашқы элементті қалыптастыру

Node * fi rst(int d){

Node *pv = new Node;

pv->d = d; pv->next = 0; pv->prev = 0;

return pv;

}


126

//--------------------------------------------------

// Тізімнің соңына қосу

void add(Node **pend, int d){

Node *pv = new Node;

pv->d = d;  pv->next = 0;  

pv->prev = *pend;

(*pend)->next = pv;

*pend = pv;

}

//--------------------------------------------------

// Элементті кілті бойынша іздеу

Node * fi nd(Node * const pbeg, int d){

Node *pv = pbeg;

while (pv){

if(pv->d == d)break;

pv = pv->next;

}

return pv;

}

//--------------------------------------------------

// Элементті жою

bool remove(Node **pbeg, Node **pend, int key){

if(Node *pkey = fi nd(*pbeg, key)){       // 1

      if (pkey == *pbeg)}                  // 2

         *pbeg = (*pbeg)->next;

         (*pbeg)->prev =0;}

      else if (pkey == *pend){   

      // 3

         *pend = (*pend)->prev; 

         (*pend)->next =0;}

      else{ 

 

 

 

 

      // 4

         (pkey->prev)->next = pkey->next;

         (pkey->next)->prev = pkey->prev;}

      delete pkey;

      return true;   

 

 

      // 5

}

return 

false; 

    // 

6

}

//--------------------------------------------------

// Элементті кірістіру

Node * insert(Node * const pbeg, Node **pend, int key, int d){

if(Node *pkey = fi nd(pbeg, key)){

Node *pv = new Node;

pv->d = d;


127

/* 1 – жаңа түйіннің келесі түйінмен  байланысын  

   орнату: */

pv->next = pkey->next;

/* 2 - жаңа түйіннің алдыңғы түйінмен байланысын

   орнату: */

pv->prev = pkey;

/* 3 - алдыңғы түйіннің жаңа түйінмен байланысын

   орнату: */

pkey->next = pv;

/* 4 - келесі түйіннің жаңа түйінмен байланысын

   орнату: */

if( pkey != *pend) (pv->next)->prev = pv;

// Егер түйін тізім соңына қойылса,

// тізім соңына нұсқауышты жаңарту.

else *pend = pv;

return pv;

}

return 0;

}

Программаның жұмысының нəтижесі:



1 2 200 3 4

Функция ішінде өзгертілмейтін барлық параметрлер



 const 

модифика-

торы арқылы берілуі тиіс. Өзгеруі мүмкін нұсқауыштар, (мысалы, тізімнен 

соңғы элементті өшірген кезде тізім соңына нұсқауышты өзгерту керек) адрес 

бойынша беріледі.

remove

 тізімнен элементті өшіру функциясын толығырақ қарастырайық. 

Оның параметрлері ретінде тізім басына жəне тізім соңына нұсқауыштар жəне 

өшірілуі тиіс элементтің кілті қабылданады. 1 жолында 

pkey

 жергілікті (ло-

калды) нұсқауышына жады бөлінеді, оған 

fi nd 

элементті кілті бойынша табу 

функциясының нəтижесі меншіктеледі. Егер іздестіру нəтижесі сəтті болса, 

бұл функция элементке нұсқауышты, ал мұндай кілті бар элемент табылмаған 

жағдайда 0 мəнін қайтарады. Егер 



Достарыңызбен бөлісу:
1   ...   197   198   199   200   201   202   203   204   ...   642




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет