Алматы экономика және статистика академиясы



жүктеу 5,39 Kb.
Pdf просмотр
бет14/28
Дата22.02.2018
өлшемі5,39 Kb.
#10536
1   ...   10   11   12   13   14   15   16   17   ...   28

44 
 
  Тізімнің  әрбір  элементінің  оны  анықтайтын    кілті  болады.  Кілт  не  бүтін  сан,  не 
тіркес,  не  мәлімет  ӛрісінің  белгілі  бір  бӛлігі  болуы  мүмкін.  Мысалы,  тізімді  алфа-вит 
бойынша орналастыру үшін кілт рӛлін фамилия атқарса, еңбек ардагерін анықтаудағы кілт 
– стаж (жұмыс ӛтілі) бола алады.    
Тізіммен келесі операцияларды орындауға болады: 
•    тізімнің бастапқы қалыптасуы (1-элементті жасау); 
•    тізімнің соңына элемент қосу; 
•    кілті берілген элементті оқу; 
•    элементті тізімнің берілген жеріне кірістіріп қою; 
•    кілті берілген элементті жою; 
•    кілт кӛмегімен тізімді реттеу. 
     Енді екі бағытты сызықтық тізімді қарастырайық. 
Тізім жасау кезінде оның бас жағына бір нұсқауыш болуы тиіс. Екінші нұсқауыш  – 
сол  тізім  соңына  сілте-ме  ретінде  жасайық.  Тізім  бүтін  сандардан  тұратын  болсын  деп 
есептейміз. Оны құрылым ретінде келесі-дей түрде жазамыз: 
struct Node{ 
int d;  
Node *next;  
Node *prev;  
}; 
Тӛменде 5 саннан тұратын тізім жасалып, оған сан енгізіп және тізімнен санды алып 
тастап, тізімді экранға шығаратын программа  мәтіні келтірілген. Тізім басына нұсқауыш  
pbeg  деп  аталған,  ал  тізім  соңына  нұсқауыш  pend  деп,  қосымша  нұсқауыштар  pv  және  
pkey болып кӛрсетілген. 
#include  
struct Node{ 
  int d; 
  Node *next; 
  Node *prev; 
}; 
//---------------------------------- 
Node * first(int d);  
void add(Node **pend, int d);  
Node * find(Node * const pbeg, int i);  
bool remove(Node **pbeg, Node **pend, int key);  
Node * insert(Node * const pbeg, Node **pend, int key, int d);  
//---------------------------------------- 
int main(){  
  Node *pbeg = first(1);  //Тізімнің  1-элементін қалыптастыру   
  Node *pend = pbeg;   /* Тізім аяқталды,  енді тізім соңына тӛрт элементті  2, 3, 4, 5  
қосамыз:*/  
  for (int i = 2; i<6; i++) add(&pend, i);  
  //   жаңа элементті (200) 2-элементтен соң енгізу:  
  insert(pbeg, &pend, 2, 200);   // Енді  5-элементті ӛшіреміз:  
  if(!remove (&pbeg, &pend, 5)) cout << "табылмады";  
  Node *pv = pbeg;  
  while (pv){                             // тізімді экранға шығару  
    cout << pv->d << ' ';  
    pv = pv->next;  
  }  
  return 0;  



45 
 
//----------------------------------------------------------  
// Бірінші элементті қалыптастыру 
Node * first(int d){ 
  Node *pv = new Node; 
  pv->d = d; pv->next = 0; pv->prev = 0; 
  return pv; 

//--------------------------------------------------------- 
// Тізім соңына қосу 
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 * find(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 = find(*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 = find(pbeg, key)){ 
     Node *pv = new Node; 
     pv->d = d; 
     // 1 – жаңа түйінді келесі түйінмен байланыстыру: 
     pv->next = pkey->next; 
     // 2 - жаңа түйінді алдыңғы түйінмен байланыстыру: 


46 
 
     pv->prev = pkey; 
  //  3 - алдыңғы түйінді жаңа түйінмен байланыстыру: 
     pkey->next = pv; 
     //   4 - келесі түйінді жаңа түйінмен байланыстыру: 
     if( pkey != *pend) (pv->next)->prev = pv; 
     //   Егер түйін тізім соңына қойылатын болса,  
     // нұсқауышты тізім соңына қарай жаңалау : 
     else *pend = pv; 
     return pv; 
  } 
return 0; 

 
Программа жұмысының нәтижесі: 
 
2. Стектер 
Стек – бір бағытты тізімнің жеке бір түрі, оның тӛбесі болып сналатын бір шетінен 
ғана  элементті  таңдап  алуға  және  жаңа  элементті  қосуға  болады.  Стекпен  басқа 
операцияларды орындау қарасты-рылмаған. 
   Элементті таңдау кезінде ол элемент стектен алынып тасталынады. Стек LIFO (last 
in – first out) ―соңынан кірді – бірінші шықты‖ қағидасына сүйенеді деп айтылады. Стекті 
бір жақ шеті  
жабық  түтікше  ретінде  қарастырады.  Оған  бірнеше  допты  салсақ,  оның  біріншісін 
алу үшін 
үстіңгілерін  түгел  алу  керек.  Компьютер  жадын-дағы  стек  сегменті  осылай 
құрылған.  Келесі  бетте  5  бүтін  саннан  құрылған  стек  келтірілген,  оның  элементтері 
экранға шығарылады. 
Мұнда  стекке  орналастыру  –  push-функциясы  және  стектен  алу  (таңдау)  pop  – 
функциясы. Стекпен жұмыс істеуге арналған нұсқауыш оның тӛбесіне (top) сілтеме жасап 
(нұсқап) тұрады. 
Мысалы: стекке нӛмірленген шарларды салайық (1, 2, 3, 4, 5). Сол шарларды стектен 
біртіндеп алып тастау керек (5, 4, 3, 2, 1). 
#include  
struct Node { 
int d; 
Node *p; 
}; 
Node *first(int d); 
void push(Node**top, int d); 
int pop(Node**top); 
//------------------------------------------------------------- 
//------------------------------------------------------ 
int main(){ 


жүктеу 5,39 Kb.

Достарыңызбен бөлісу:
1   ...   10   11   12   13   14   15   16   17   ...   28




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

    Басты бет
рсетілетін қызмет
халықаралық қаржы
Астана халықаралық
қызмет регламенті
бекіту туралы
туралы ережені
орталығы туралы
субсидиялау мемлекеттік
кеңес туралы
ніндегі кеңес
орталығын басқару
қаржы орталығын
қаржы орталығы
құрамын бекіту
неркәсіптік кешен
міндетті құпия
болуына ерікті
тексерілу мемлекеттік
медициналық тексерілу
құпия медициналық
ерікті анонимді
Бастауыш тәлім
қатысуға жолдамалар
қызметшілері арасындағы
академиялық демалыс
алушыларға академиялық
білім алушыларға
ұйымдарында білім
туралы хабарландыру
конкурс туралы
мемлекеттік қызметшілері
мемлекеттік әкімшілік
органдардың мемлекеттік
мемлекеттік органдардың
барлық мемлекеттік
арналған барлық
орналасуға арналған
лауазымына орналасуға
әкімшілік лауазымына
инфекцияның болуына
жәрдемдесудің белсенді
шараларына қатысуға
саласындағы дайындаушы
ленген қосылған
шегінде бюджетке
салығы шегінде
есептелген қосылған
ұйымдарға есептелген
дайындаушы ұйымдарға
кешен саласындағы
сомасын субсидиялау