SlideShare a Scribd company logo
1 of 41
Цикл жагсаалт

   Лекц №8
                LOGO
Хичээлийн агуулга




Багш: В.Нямсүрэн
Нэг холбоост
жагсаалтын бэрхшээл
 Нэг холбоост жагсаалтын зангилаа бүр нь
  өмнөх(сүүлчийн элемэнтээс бусад нь) болон
  дараагийн(эхний     элемэнтээс   бусад    нь)
  зангилаатай байдаг.
 Тиймээс нэг холбоост жагсаалтад нэг бэрхшээл
  байдаг: Нэг холбоост жагсаалтын аль нэг
  зангилаанаас түүний дараагийн бүх зангилаанд
  хандаж болох боловч түүний өмнө орших нэг ч
  зангилааруу хандаж чадахгүй.
 Аливаа зангилаанд хандахын тулд жагсаалтын
  эхлэлийн заагчийг ашиглан эхнээс нь дараалан
  хандана.
Багш: В.Нямсүрэн
Цикл жагсаалт
 Нэг холбоост жагсаалтын сүүлчийн элемэнтийн
  заагч талбар нь NULL утгыг агуулахын оронд
  буцаад эхний элемэнтийг зааж байхаар өөрчлөн
  зохион байгуулж болно.
 Ингэснээр нэг холбоост жагсаалтаас давуу
  талтай цикл жагсаалт гэсэн бүтцийг бий болгоно.
 Зангилаа бүр нь дараагийн зангилаатай байх
  жагсаалтыг цикл жагсаалт /ЦЖ/ гэнэ.

              100   56    34       456



Багш: В.Нямсүрэн
Цикл холбоост жагсаалтын
зангилааг илэрхийлэх:
 Цикл холбоост жагсаалтын зангилааг дараах
  CLNode классаар тодорхойлъё
class CLNode
{
   Data element;
   CLNode *next;
   CLNode(Data evalue, CLNode *nvalue){
     element=evalue;
     next=nvalue;
   }
   friend class CircularLinkedList;
};

Багш: В.Нямсүрэн
Цикл жагсаалтыг
зохион байгуулах
 Цикл жагсаалтын аль ч зангилаанаас эхэлсэн
  тухайн жагсаалтын бүх элемэнтээр дамжих
  боломжтой.
 Гадаад заагчаар эхний элемэнтийг заалгаснаас
  сүүлчийн элемэнтийг заалгасан нь давуу талтай.
  Ингэснээр эхний болон сүүлчийн хоёр элемэнтэд
  аль нь ч шууд хандах боломжтой.




                   100   56   34   456


Багш: В.Нямсүрэн
ЦЖ-ыг илэрхийлэх
хийсвэр төрлийг тодорхойлох
class CircularLinkedList
{
     CLNode *listData;
public:
     CircularLinkedList ();
     ~CircularLinkedList ();
     bool IsEmpty() ;
     void MakeEmpty();
     void InsertItem (Data item);
     bool FindItem(Data key);
     void DeleteItem(Data item);
     void Print();
};
Багш: В.Нямсүрэн
ЦЖ-ыг үүсгэх
байгуулагч функц:
CircularLinkedList::CircularLinkedList()
{
      listData= NULL;
}
Тайлбар:
CircularLinkedList CList;
// CList нэртэй цикл жагсаалт үүсгэж байна.
                   listData




Багш: В.Нямсүрэн
ЦЖ-ыг санах ойгоос
чөлөөлөх устгагч функц:
CircularLinkedList::~CircularLinkedList(){
    MakeEmpty();
}




Багш: В.Нямсүрэн
ЦЖ-ыг хоослох
void CircularLinkedList::MakeEmpty(){
    CLNode *location=listData;
    while (listData->next != listData){
         location = listData->next;
         listData->next=location->next;
         delete location;
    }
    if(listData->next==listData){
          location=listData;
         listData=NULL;
          delete location;
    }
}
Багш: В.Нямсүрэн
ЦЖ-ыг санах ойгоос
бүрэн чөлөөлөх устгагч функц:



                               location

                                   listData


    100            56   ...   34   456




Багш: В.Нямсүрэн
ЦЖ-ыг санах ойгоос
бүрэн чөлөөлөх устгагч функц:



                               location

                                   listData


    100            56   ...   34   456




Багш: В.Нямсүрэн
ЦЖ-ыг санах ойгоос
  бүрэн чөлөөлөх устгагч функц:



location

                                    listData


                    56   ...   34   456




 Багш: В.Нямсүрэн
ЦЖ-ыг санах ойгоос
бүрэн чөлөөлөх устгагч функц:



            location

                                  listData


                       ...   34   456




Багш: В.Нямсүрэн
ЦЖ-ыг санах ойгоос
бүрэн чөлөөлөх устгагч функц:



                   location

                                   listData


                              34   456




Багш: В.Нямсүрэн
ЦЖ-ыг санах ойгоос
бүрэн чөлөөлөх устгагч функц:



                      location

                                 listData


                                  456




Багш: В.Нямсүрэн
ЦЖ-ыг хоосон
эсэхийг шалгах
bool CircularLinkedList::IsEmpty(){
    if( listData == NULL )
          return true;
    return false;
}




Багш: В.Нямсүрэн
Цикл жагсаалтад
 элемэнт нэмэх
void CircularLinkedList::InsertItem(Data item)
{
   if(IsEmpty()==true){
      CLNode *location=new CLNode(item,location);
      location->next=location;
      listData=location;
   }
   else{
      CLNode*location=new CLNode(item,listData->next)
      listData->next=location;
      listData=location;
   }
}


 Багш: В.Нямсүрэн
Цикл жагсаалтад
элемэнт нэмэх
                   listData              location


                                            100


                                               location
                                    listData


    100             56        ...      34         456


Багш: В.Нямсүрэн
ЦЖ-ын элемэнтүүдийг хэвлэх
void CircularLinkedList::Print(){
    if(IsEmpty()==false){
         CLNode *location=listData;
         cout<<"CircularLinkedList: ";
         if(location==listData){
                  cout<<location->element<<"->";
                  location=location->next;
         }
         while(location!=listData){
                  cout<<location->element<<"->";
                  location=location->next;
         }
         cout<<endl;
    }else
         cout<<"CircularLinkedList is empty"<<endl;
}Багш: В.Нямсүрэн
ЦЖ-ын элемэнтүүдийг хэвлэх
                                   location
                               listData


        100        56   456   42    34


CircularLinkedList: 34->




Багш: В.Нямсүрэн
ЦЖ-ын элемэнтүүдийг хэвлэх
                                     location
                                 listData


        100        56   456   42      34


CircularLinkedList: 34-> 100->




Багш: В.Нямсүрэн
ЦЖ-ын элемэнтүүдийг хэвлэх
   location

                               listData


        100        56   456   42     34


CircularLinkedList: 34-> 100->56->




Багш: В.Нямсүрэн
ЦЖ-ын элемэнтүүдийг хэвлэх
                   location

                                     listData


        100         56        456   42    34


CircularLinkedList: 34-> 100->56->456->




Багш: В.Нямсүрэн
ЦЖ-ын элемэнтүүдийг хэвлэх
                        location

                                    listData


        100        56   456        42    34


CircularLinkedList: 34-> 100->56->456-> 42->




Багш: В.Нямсүрэн
ЦЖ-ын элемэнтүүдийг хэвлэх
                              location

                                 listData


        100        56   456     42       34


CircularLinkedList: 34-> 100->56->456-> 42->




Багш: В.Нямсүрэн
ЦЖ-аас өгөгдсөн
 элемэнт хайх
bool CircularLinkedList::FindItem(Data key){
   if(IsEmpty()==false){
      CLNode *location = listData;
      while (location->element!=key &&
                     location->next!=listData)
      {
           location=location->next;
      }
      if (location->element == key)
           return true;
      return false;
    }else
      return false;
}

Багш: В.Нямсүрэн
ЦЖ-аас өгөгдсөн
элемэнт хайх
                                   location
                               listData


        100        56   456   42    34


                                    56




Багш: В.Нямсүрэн
ЦЖ-аас өгөгдсөн
элемэнт хайх
                                   location
                               listData


        100        56   456   42    34


                                    56




Багш: В.Нямсүрэн
ЦЖ-аас өгөгдсөн
элемэнт хайх
   location

                                      listData


        100        56     456      42         34


         56



                   Хайсан элемэнт олдлоо!!!

Багш: В.Нямсүрэн
ЦЖ-аас өгөгдсөн
 элемэнтийг устгах
void CircularLinkedList::DeleteItem(Data item)
{
   if(IsEmpty()==false){
      CLNode *predLoc=listData;
      CLNode *location=listData;
      while(location->element!=item &&
                     location->next!=listData){
           predLoc=location;
           location=location->next;
      }
      if(location->next==listData)
         cout<<"Ugugdsun element bhguia bna"<<endl;



Багш: В.Нямсүрэн
ЦЖ-аас өгөгдсөн
    элемэнтийг устгах
       else
                   if(location->element==item){
                        if(location==listData){
                             while(predLoc->next!=location)
                                  predLoc=predLoc->next;
                                  listData=listData->next;
                        }
                        predLoc->next=location->next;
                        delete location;
       }

     }else
        cout<<"CircularLinkedList is empty"<<endl;
}

Багш: В.Нямсүрэн
ЦЖ-аас өгөгдсөн
элемэнтийг устгах
                                          location

                                         predLoc
                                     listData


        100        56    456       42      34




                    Устгах элемэнт: 34
Багш: В.Нямсүрэн
ЦЖ-аас өгөгдсөн
элемэнтийг устгах
                                          location

                                         predLoc
                                     listData


        100        56    456       42       34




                    Устгах элемэнт: 34
Багш: В.Нямсүрэн
ЦЖ-аас өгөгдсөн
элемэнтийг устгах
                                         location

   predLoc

                                     listData


        100        56    456       42     34




                    Устгах элемэнт: 34
Багш: В.Нямсүрэн
ЦЖ-аас өгөгдсөн
элемэнтийг устгах
                                           location

                   predLoc

                                       listData


        100         56       456     42     34




                      Устгах элемэнт: 34
Багш: В.Нямсүрэн
ЦЖ-аас өгөгдсөн
элемэнтийг устгах
                                         location

                        predLoc

                                     listData


        100        56    456       42     34




                    Устгах элемэнт: 34
Багш: В.Нямсүрэн
ЦЖ-аас өгөгдсөн
элемэнтийг устгах
                                          location

                                predLoc

                                     listData


        100        56    456       42      34




                    Устгах элемэнт: 34
Багш: В.Нямсүрэн
ЦЖ-аас өгөгдсөн
элемэнтийг устгах
                                          location

                                         predLoc
                                     listData


        100        56    456       42      34




                    Устгах элемэнт: 56
Багш: В.Нямсүрэн
ЦЖ-аас өгөгдсөн
элемэнтийг устгах
   location

                                         predLoc
                                     listData


        100        56    456       42       34




                    Устгах элемэнт: 56
Багш: В.Нямсүрэн
ЦЖ-аас өгөгдсөн
элемэнтийг устгах
   location

    predLoc

                                     listData


        100        56    456       42     34




                    Устгах элемэнт: 56
Багш: В.Нямсүрэн

More Related Content

Viewers also liked

Dsi lec2
Dsi lec2Dsi lec2
Dsi lec2ggmo86
 
Dsi lec3
Dsi lec3Dsi lec3
Dsi lec3ggmo86
 
Dsi lec4
Dsi lec4Dsi lec4
Dsi lec4ggmo86
 
Dsi lec5
Dsi lec5Dsi lec5
Dsi lec5ggmo86
 
Dsi lec14
Dsi lec14Dsi lec14
Dsi lec14ggmo86
 
Dsi lec1
Dsi lec1Dsi lec1
Dsi lec1ggmo86
 
Sodko111
Sodko111Sodko111
Sodko111sodko27
 
Өгөгдлийн бүтэц
Өгөгдлийн бүтэцӨгөгдлийн бүтэц
Өгөгдлийн бүтэцMuuluu
 

Viewers also liked (10)

Dsi lec2
Dsi lec2Dsi lec2
Dsi lec2
 
Dsi lec3
Dsi lec3Dsi lec3
Dsi lec3
 
Dsi lec4
Dsi lec4Dsi lec4
Dsi lec4
 
Dsi lec5
Dsi lec5Dsi lec5
Dsi lec5
 
Dsi lec14
Dsi lec14Dsi lec14
Dsi lec14
 
Dsi lec1
Dsi lec1Dsi lec1
Dsi lec1
 
Blog ds-tod
Blog ds-todBlog ds-tod
Blog ds-tod
 
Sodko111
Sodko111Sodko111
Sodko111
 
Өгөгдлийн бүтэц
Өгөгдлийн бүтэцӨгөгдлийн бүтэц
Өгөгдлийн бүтэц
 
Datastructure algoritm
Datastructure algoritmDatastructure algoritm
Datastructure algoritm
 

Dsi lec8-copy