SlideShare a Scribd company logo
1 of 143
Нэг холбоост жагсаалт

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




Багш: Т.Гантөр
Жагсаалт
 Элемэнтүүд нь санах ойд дэс дараалан байрлах
  албагүй бөгөөд элемэнтүүд нь санах ойд
  динамикаар     үүсдэг     шугаман     зохион
  байгуулалттай    элемэнтүүдийн    олонлогийг
  жагсаалт гэнэ.

 Динамикаар үүссэн элемэнтүүдийн дарааллыг
  холбоос буюу заагчаар тодорхойлдог.




Багш: Т.Гантөр
Жагсаалтын ангилал

   Жагсаалтыг холбоосоор нь дараах
         байдлаар ангилдаг:

                  Нэг холбоост жагсаалт
                    /Singly Linked List/

                  Цикл жагсаалт /Circular
                        Linked List

                 Давхар холбоост жагсаалт
                    /Doubly Linked List/
Багш: Т.Гантөр
Нэг холбоост жагсаалт
 Нэг холбоост жагсаалтын элемэнт буюу
  зангилаа нь өгөгдөл ба холбоос/заагч/ гэсэн
  хоѐр хэсгээс тогтоно.

                  100
                 Өгөгдөл




                           100




Багш: Т.Гантөр
Нэг холбоост жагсаалт
 Зангилаа бүрийн заагч нь дараачийн зангилааг
  заадаг өгөгдлүүдийн цэгцлэгдсэн тогтоцыг нэг
  холбоост жагсаалт /НХЖ/ буюу шугаман
  жагсаалт гэнэ.
                 100   56   34   456



 Өөрөөр хэлбэл дэс дараалан ар         араасаа
  холбогдсон элемэнтүүдийн тогтоц юм.



Багш: Т.Гантөр
Нэг холбоост жагсаалт
 Жагсаалтын зангилааны өгөгдөл нь өгөгдөл
  буюу утгыг агуулах бөгөөд тухайн утгын төрөл
  бүхэл тоо, бодит тоо, тэмдэгт мөр зэрэг үндсэн
  өгөгдлийн    төрлүүдээс   гадна    хэрэглэгийн
  тодорхойлсон ямар ч төрөлтэй байж болно.
    typedef int Data;

                 100   56   34   456

      typedef char Data;
                 c     k    a      d


Багш: Т.Гантөр
Нэг холбоост жагсаалт
 Жагсаалтын зангилааны холбоос буюу заагч нь
  дараачийн зангилааг заах буюу санах ойн
  үүрний хаягийг агуулах учраас заах зангилааны
  төрөлтэй ижил төрлийнх байна
 Жагсаалтын хамгийн сүүлийн зангилааны заагч
  нь NULL гэсэн утгыг заавал агуулсан байх ѐстой


            100   56     34      456




Багш: Т.Гантөр
Нэг холбоост жагсаалтын
зангилааг илэрхийлэх:
 Нэг холбоост жагсаалтын зангилааг   дараах
  SLNode классаар тодорхойлъѐ

class SLNode{
Data element;
SLNode *next;
SLNode(Data evalue;SLNode* nvalue)
     {
             element=evalue; next=nvalue;
     }
  friend class SinglyLinkedList;
};

Багш: Т.Гантөр
Нэг холбоост жагсаалтын
зангилааг илэрхийлэх:

Data element;             Өгөгдөл агуулах талбар




                  100
SLNode *next;             Дараагийн зангилааг
                          заах заагч талбар


     SLNode      SLNode         SLNode
      100        100             100




Багш: Т.Гантөр
Нэг холбоост жагсаалтыг
зохион байгуулах
 Нэг холбоост жагсаалтад дараах гадаад заагчуудыг
  тодорхойлж, ашиглах шаардлагатай
   1. Жагсаалтын эхний зангилааны санах ойн
      үүрний хаягийг агуулах толгой заагч буюу
      эхлэл заагч юм. Нэг холбоост жагсаалтын
      аливаа зангилаанд хүрэхийн тулд жагсаалтын
      эхний    зангилаанаас   эхлэн    холбоосуудын
      тусламжтайгаар дараалан хандаж хүссэн
      зангилаагаа олж авдаг. Иймд толгой буюу эхлэл
      заагч нь ямагт жагсаалтын эхний зангилааг зааж
      байх ѐстой.

      100        56    34       456

Багш: Т.Гантөр
Нэг холбоост жагсаалтыг
зохион байгуулах
     2. Жагсаалтын төгсгөлийн зангилааны санах
        ойн үүрний хаягийг агуулах сүүл заагч буюу
        төгсгөл    заагч    юм.    Энэ    заагчийн
        тусламжтайгаар      жагсаалтын      төгсгөл
        хязгаарлагдана. Иймд сүүл буюу төгсгөл
        заагч нь ямагт жагсаалтын төгсгөлийн
        зангилааг зааж байх ѐстой.




                 100   56    34      456

Багш: Т.Гантөр
Нэг холбоост жагсаалтыг
зохион байгуулах
     3. Идэвхтэй элемэнтийн санах ойн үүрний
        хаягийг агуулах идэвхтэй элемэнтийн
        заагч буюу туслах заагч. Энэ заагчийн
        тусламжтайгаар    жагсаалтад    хийгдэх
        үйлдлүүдийг гүйцэтгэнэ. Тиймээс энэхүү
        заагчид тогтсон байрлал байхгүй бөгөөд
        тухайн эгшинд идэвхтэй байх элемэнтийг
        заана.



                 100   56   34    456

Багш: Т.Гантөр
Нэг холбоост жагсаалтад
хийгдэх үйлдлүүд
                 Жагсаалтын эхэнд
                                    Өгөгдсөн элемэнтийн
                  элемэнт нэмэх
                                           өмнө
                 InsertFirst()      InsertBefore()
   НХЖ-д                            Өгөгдсөн элемэнтийн
  элемэнт        Жагсаалтын дунд           хойно
   нэмж           элемэнт нэмэх
  оруулах                            InsertAfter()

                    Жагсаалтын
                                     Өгөгдсөн байрлалд
                 төгсгөлд элемэнт
                       нэмэх        InsertPosition()
                 InsertLast()

Багш: Т.Гантөр
Нэг холбоост жагсаалтад
хийгдэх үйлдлүүд
                                    Өгөгдсөн элемэнтийн
                   Жагсаалтын              өмнөх
                 эхлэлээс устггах    DeleteBefore()
                 DeleteFirst()
                                    Өгөгдсөн элемэнтийн
                                           ардах
    НХЖ-аас                           DeleteAfter()
                   Жагсаалтын
    элемэнт
                  дундаас устгах
     устгах                          Өгөгдсөн байрлал
                                           дахь
                                    DeletePosition()
                  Жагсаалтын
                  төгсгөлөөс
                     устгах           Өгөгдсөн утгатай
                 DeleteLast()         DeleteItem()

Багш: Т.Гантөр
Нэг холбоост жагсаалтад
хийгдэх үйлдлүүд
НХЖ-аас элемэнт хайх – FindItem()

НХЖ хоосон эсэхийг шалгах – IsEmpty()

НХЖ-ыг хоослох – MakeEmpty()
НХЖ-ын эхний элемэнтийн утгыг буцаах –
                                  First()
Жагсаалтын төгсгөлийн элемэнтийн утгыг буцаах–
                                  Last()
Жагсаалтын элемэнтийн тоог буцаах – Count()

Жагсаалтын элемэнтүүдийг хэвлэх – Print()

Багш: Т.Гантөр
НХЖ-ыг илэрхийлэх
хийсвэр төрлийг тодорхойлох
class SinglyLinkedList
{
     SLNode *head;
     SLNode *tail;
public:
     SinglyLinkedList ();
     ~SinglyLinkedList ();
     bool IsEmpty() ;
     void MakeEmpty();
     const Data First () ;
     const Data Last () ;
     void InsertFirst (Data item);
     void InsertLast (Data item);
Багш: Т.Гантөр
НХЖ-ыг илэрхийлэх
хийсвэр төрлийг тодорхойлох
  void InsertBefore(Data key,Data item);
   void InsertAfter(Data key,Data item);
   void InsertPosition(int pos,Data item);
   void FindItem(Data key);
   void DeleteFirst();
   void DeleteLast();
   void DeleteBefore(Data item);
   void DeleteAfter(Data item);
   void DeletePosition(int pos);
   void DeleteItem(Data key);
   int Count();
   void Print();
};
Багш: Т.Гантөр
НХЖ-ыг үүсгэх
байгуулагч функц:
SinglyLinkedList::SinglyLinkedList (){
        head=tail= NULL;
}
Тайлбар:
SinglyLinkedList list;
// list нэртэй нэг холбоост жагсаалт үүсгэж байна.
                      head tail




Багш: Т.Гантөр
НХЖ-ыг санах ойгоос
бүрэн чөлөөлөх устгагч функц:
SinglyLinkedList::~SinglyLinkedList (){
    MakeEmpty();
}
void SinglyLinkedList::MakeEmpty()
{
    SLNode *curr=NULL;
    while (head != NULL){
         curr = head;
         head = head->next;
         delete curr;
    }
    tail = NULL;
}
Багш: Т.Гантөр
НХЖ-ыг санах ойгоос
бүрэн чөлөөлөх устгагч функц:
Тайлбар:
 Устгагч функц нь MakeEmpty() функцийг
дуудна.
 MakeEmpty() функц нь үүсгэсэн нэг холбоост
жагсаалтын элемэнтүүдийг санах ойгоос чөлөөлөх
буюу нэг холбоост жагсаалтыг хоослоно.
 MakeEmpty() функц нь туслах заагч/curr/-ийг
ашиглан      эхлэлийн      элемэнтээс      эхлэн
элемэнтүүдийг нэг нэгээр санах ойгоос чөлөөлнө.
 Бүх элемэнтүүдийг чөлөөлсний дараа хоосон
жагсаалт үлдэнэ.


Багш: Т.Гантөр
НХЖ-ыг санах ойгоос
бүрэн чөлөөлөх устгагч функц:

  head                            tail


100              56   ...    34   456
                      curr




Багш: Т.Гантөр
НХЖ-ыг санах ойгоос
бүрэн чөлөөлөх устгагч функц:


 head                             tail


100              56   ...    34   456



                      curr




Багш: Т.Гантөр
НХЖ-ыг санах ойгоос
 бүрэн чөлөөлөх устгагч функц:


curr              head              tail


                  56     ...   34   456




 Багш: Т.Гантөр
НХЖ-ыг санах ойгоос
бүрэн чөлөөлөх устгагч функц:


            curr    head        tail


                   ...     34   456




Багш: Т.Гантөр
НХЖ-ыг санах ойгоос
бүрэн чөлөөлөх устгагч функц:


                 curr    head   tail


                         34     456




Багш: Т.Гантөр
НХЖ-ыг санах ойгоос
бүрэн чөлөөлөх устгагч функц:


                      curr       tail
                                head


                                456




Багш: Т.Гантөр
НХЖ-ыг санах ойгоос
бүрэн чөлөөлөх устгагч функц:


                                    tail
                                curr head




Багш: Т.Гантөр
Нэг холбоост жагсаалт
Устгагч функц:
Тайлбар:
Устгагч функц нь байгуулагч функцээр болон
тухайн    хийсвэр     төрлөөр  санах    ойд
хуваарилагсдсан   хувьсагчдыг санах  ойгоос
чөлөөлнө.

                                 currtail
                                      head




Багш: Т.Гантөр
НХЖ-ыг хоосон
эсэхийг шалгах
bool SinglyLinkedList::IsEmpty(){
     if( head == NULL && tail==NULL)
           return true;
     return false;
}
Тайлбар:
Эхлэлийн заагч /head/ болон төгсгөлийн заагч
/tail/-ууд нь хоосон/NULL/ утгатай бол нэг
холбоост жагсаалт хоосон байна буюу true утга,
хоосон/NULL/-оос ялгаатай бол хоосон биш буюу
false утга буцаана.


Багш: Т.Гантөр
НХЖ-ыг хоосон
эсэхийг шалгах
          head       tail




                 true

           head


             100        56   ...
             false

Багш: Т.Гантөр
НХЖ-ын эхэнд
 элемэнт нэмэх


void SinglyLinkedList::InsertFirst(Data item)
{
     SLNode *curr = new SLNode(item, head);
      if (IsEmpty()==true)
       tail = curr;
      head = curr;
}




Багш: Т.Гантөр
НХЖ-ын эхэнд
элемэнт нэмэх
Тайлбар:
1. Шинэ элемэнтийг санах ойд хуваарилна. Уг
   зангилааны заагч талбар нь эхлэлийн заагчийг
   зааж байгаа утгыг заана.
2. А. Хэрвээ жагсаалт хоосон бол эхлэлийн заагч
      болон төгсгөлийн заагчаар шинэ элемэнтийг
      заалгана.
2. В. Харин жагсаалт хоосон биш буюу элемэнттэй
      бол эхлэлийн заагчийг шинэ элемэнтэд
      шилжүүлнэ.



Багш: Т.Гантөр
НХЖ-ын эхэнд
элемэнт нэмэх
                  curr   head   tail


                  100



    curr head                          tail


 100             56      ...      34   456


Багш: Т.Гантөр
НХЖ-ын төгсгөлд
 элемэнт нэмэх


void SinglyLinkedList::InsertLast (Data item)
{
      SLNode *curr = new SLNode (item, NULL);
      if (IsEmpty()==true)
          head = curr;
      else
          tail->next = curr;
      tail = curr;
}



Багш: Т.Гантөр
НХЖ-ын төгсгөлд
элемэнт нэмэх
Тайлбар:
1. Шинэ элемэнтийг санах ойд хуваарилна. Уг
   зангилааны заагч талбар нь хоосон утгыг заана.
2. А. Хэрвээ жагсаалт хоосон бол эхлэлийн заагч
      болон төгсгөлийн заагчаар шинэ элемэнтийг
      заалгана.
2. В. Харин жагсаалт хоосон биш буюу элемэнттэй
      бол төгсгөлийн элемэнтийн заагч талбараар
      шинэ    элемэнтийг    заалган,   төгсгөлийн
      заагчийг шинэ элемэнтэд шилжүүлнэ.



Багш: Т.Гантөр
НХЖ-ын төгсгөлд
 элемэнт нэмэх
                 head   tail    curr


                                100



head                           tail    curr


 100             56      ...   456     34


Багш: Т.Гантөр
НХЖ-ын өгөгдсөн элемэнтийн
 өмнө элемэнт нэмж оруулах
void SinglyLinkedList::InsertBefore(Data key,
Data item){
SLNode *prevCurr=NULL;
SLNode *nextCurr=head;
if(IsEmpty()==false){
     while(nextCurr->element!=key &&
                             nextCurr!=NULL){
          prevCurr=nextCurr;
          nextCurr=nextCurr->next;
     }




Багш: Т.Гантөр
НХЖ-ын өгөгдсөн элемэнтийн
    өмнө элемэнт нэмж оруулах
                 if (nextCurr == NULL)
                      cout<<"ugugdsun element
                                        oldsongui";
                 if(nextCurr->element==key){
                      SLNode *curr=new SLNode (item,
                                        nextCurr);
                      prevCurr->next= curr;
                  }
         }
         else
             cout<<"SinglyLinkedList is
                               empty"<<endl;
}

Багш: Т.Гантөр
НХЖ-ын өгөгдсөн элемэнтийн
өмнө элемэнт нэмж оруулах
prevCurr
                      Өгөгдсөн элемэнт:     156
                      Шинэ элемэнт:         42



nextCurr
   head                                   tail


      100        56   ...     456         34


Багш: Т.Гантөр
НХЖ-ын өгөгдсөн элемэнтийн
өмнө элемэнт нэмж оруулах

                            Өгөгдсөн элемэнт:     56
                            Шинэ элемэнт:         42



prevCurr         nextCurr
   head                                         tail


      100        56         ...     456         34


Багш: Т.Гантөр
НХЖ-ын өгөгдсөн элемэнтийн
өмнө элемэнт нэмж оруулах

                         Өгөгдсөн элемэнт:     56
                         Шинэ элемэнт:         42



                 prevCurr
                        nextCurr
   head                                      tail


      100        56      ...       456       34


Багш: Т.Гантөр
НХЖ-ын өгөгдсөн элемэнтийн
өмнө элемэнт нэмж оруулах

                      Өгөгдсөн элемэнт:    56
                      Шинэ элемэнт:        42



                      prevCurr
                             nextCurr
   head                               tail


      100        56   ...     456         34


Багш: Т.Гантөр
НХЖ-ын өгөгдсөн элемэнтийн
өмнө элемэнт нэмж оруулах

                      Өгөгдсөн элемэнт:    56
                      Шинэ элемэнт:        42



                              prevCurr
                                     nextCurr
   head                               tail


      100        56   ...     456         34

          Өгөгдсөн элемэнт олдсонгүй!!!
Багш: Т.Гантөр
НХЖ-ын өгөгдсөн элемэнтийн
 хойно элемэнт нэмж оруулах
void SinglyLinkedList::InsertBefore(Data key,
Data item){
SLNode *prevCurr=NULL;
SLNode *nextCurr=head;
if(IsEmpty()==false){
     while(prevCurr->element!=key &&
                             nextCurr!=NULL){
          prevCurr=nextCurr;
          nextCurr=nextCurr->next;
     }




Багш: Т.Гантөр
НХЖ-ын өгөгдсөн элемэнтийн
    хойно элемэнт нэмж оруулах
                 if (nextCurr == NULL)
                      cout<<"ugugdsun element
                                        oldsongui";
                 if(prevCurr->element==key){
                      SLNode *curr=new SLNode (item,
                                        nextCurr);
                      prevCurr->next= curr;
                  }
         }
         else
             cout<<"SinglyLinkedList is
                               empty"<<endl;
}

Багш: Т.Гантөр
НХЖ-ын өгөгдсөн элемэнтийн
хойно элемэнт нэмж оруулах
Тайлбар:
1. Жагсаалт хоосон эсэхийг шалгана.
2. А. Жагсаалт хоосон бол өгөгдсөн элемэнт
   олдохгүй бөгөөд энэ үйлдлийг гүйцэтгэх
   боломжгүй.
2. В. Хоосон биш бол дараах алхамуудыг
   гүйцэтгэнэ.
   2. 1. Өгөгдсөн элемэнтийг олохын тулд
      жагсаалтын эхлэлээс зангилаа болгоны
      элемэнт талбартай өгөгдсөн утгыг жиших
      замаар дараалан хайна.


Багш: Т.Гантөр
НХЖ-ын өгөгдсөн элемэнтийн
хойно элемэнт нэмж оруулах
Тайлбар:
  2. 2. Хэрвээ өгөгдсөн элемэнт олдохгүйгээр
     жагсаалтын элемэнтийн төгсгөлд хүрвэл
     жагсаалт элемэнт нэмэх боломжгүй
  2. 3. Харин өгөгдсөн элемэнт олдвол шинэ
     элемэнтийн санах ойд хуваарилж, түүний
     заагч талбараар шинэ элемэнтийг заалгана.
     Мөн өгөгдсөн элемэнтийн өмнөх элемэнтийн
     заагч талбараар шинэ элемэнтийг заалгана.




Багш: Т.Гантөр
НХЖ-ын өгөгдсөн элемэнтийн
хойно элемэнт нэмж оруулах
prevCurr
                      Өгөгдсөн элемэнт:   456
                      Шинэ элемэнт:       42



nextCurr
   head                       tail


      100        56   456     34


Багш: Т.Гантөр
НХЖ-ын өгөгдсөн элемэнтийн
хойно элемэнт нэмж оруулах

                            Өгөгдсөн элемэнт:   456
                            Шинэ элемэнт:       42



prevCurr         nextCurr
   head                            tail


      100         56        456     34


Багш: Т.Гантөр
НХЖ-ын өгөгдсөн элемэнтийн
хойно элемэнт нэмж оруулах

                                Өгөгдсөн элемэнт:   456
                                Шинэ элемэнт:       42



                 prevCurr nextCurr
   head                           tail


      100           56    456        34


Багш: Т.Гантөр
НХЖ-ын өгөгдсөн элемэнтийн
 хойно элемэнт нэмж оруулах

Өгөгдсөн элемэнт: 456
Шинэ элемэнт:    42            curr


                               42
                       prevCurr nextCurr
    head                         tail


       100        56     456      34


 Багш: Т.Гантөр
НХЖ-ын өгөгдсөн элемэнтийн
хойно элемэнт нэмж оруулах
Өгөгдсөн элемэнт:456
Шинэ элемэнт: 42              curr


                             42
                      prevCurr nextCurr
   head                        tail


      100        56     456      34


Багш: Т.Гантөр
НХЖ-ын өгөгдсөн элемэнтийн
хойно элемэнт нэмж оруулах

                             Өгөгдсөн элемэнт:   456
                             Шинэ элемэнт:       42



                      prevCurr          nextCurr
   head                          curr   tail


      100        56    456       42       34


Багш: Т.Гантөр
НХЖ-ын өгөгдсөн байрлалд
элемэнт нэмж оруулах
void SinglyLinkedList::InsertPosition( int
pos, Data item)
{
  if(IsEmpty()==false){
     SLNode* prevCurr=NULL;
     SLNode*nextCurr=head;
     int i=1;
     while(i!=pos && nextCurr!=NULL){
         prevCurr=nextCurr;
         nextCurr=nextCurr->next;
         i++;
     }

Багш: Т.Гантөр
НХЖ-ын өгөгдсөн байрлалд
элемэнт нэмж оруулах
        if (nextCurr == NULL)
                cout<<"bairlal buruu";
        if(i==pos){
            SLNode *curr=new SLNode(item,
                                  nextCurr);
            prevCurr->next= curr;
        }
       }
       else
            cout<<"SinglyLinkedList is
                             empty"<<endl;
}

Багш: Т.Гантөр
НХЖ-ын өгөгдсөн байрлалд
элемэнт нэмж оруулах
Тайлбар:
1. Жагсаалт хоосон эсэхийг шалгана.
2. А. Жагсаалт хоосон бол өгөгдсөн элемэнт
   олдохгүй бөгөөд энэ үйлдлийг гүйцэтгэх
   боломжгүй.
2. В. Хоосон биш бол дараах алхамуудыг
   гүйцэтгэнэ.
   2. 1. Өгөгдсөн байрлалыг тодорхойлохын тулд
      жагсаалтын эхлэлээс зангилаануудыг тоолно.




Багш: Т.Гантөр
НХЖ-ын өгөгдсөн байрлалд
элемэнт нэмж оруулах
Тайлбар:
  2. 2. Хэрвээ өгөгдсөн байрлал олдохгүйгээр
     жагсаалтын элемэнтийн төгсгөлд хүрвэл
     жагсаалт элемэнт нэмэх боломжгүй
  2. 3. Харин өгөгдсөн байрлал олдвол шинэ
     элемэнтийн санах ойд хуваарилж, түүний
     заагч талбараар шинэ элемэнтийг заалгана.
     Мөн өгөгдсөн элемэнтийн өмнөх элемэнтийн
     заагч талбараар шинэ элемэнтийг заалгана.




Багш: Т.Гантөр
НХЖ-ын өгөгдсөн байрлалд
элемэнт нэмж оруулах
prevCurr
                      Өгөгдсөн байрлал:   4
                      Шинэ элемэнт:       42
                      i=1


nextCurr
   head                       tail


      100        56   456     34


Багш: Т.Гантөр
НХЖ-ын өгөгдсөн байрлалд
элемэнт нэмж оруулах

                            Өгөгдсөн байрлал:   4
                            Шинэ элемэнт:       42
                            i=2

prevCurr         nextCurr
   head                           tail


      100         56        456     34


Багш: Т.Гантөр
НХЖ-ын өгөгдсөн байрлалд
элемэнт нэмж оруулах

                                Өгөгдсөн байрлал:   4
                                Шинэ элемэнт:       42
                                i=3


                 prevCurr nextCurr
   head                           tail


      100           56    456        34


Багш: Т.Гантөр
НХЖ-ын өгөгдсөн байрлалд
элемэнт нэмж оруулах
Өгөгдсөн байрлал: 4
Шинэ элемэнт:     42        curr
i=4

                              42
                      prevCurr nextCurr
   head                       tail


      100        56     456        34


Багш: Т.Гантөр
НХЖ-ын өгөгдсөн байрлалд
элемэнт нэмж оруулах

                              curr


                             42
                      prevCurr nextCurr
   head                        tail


      100        56     456      34


Багш: Т.Гантөр
НХЖ-ын өгөгдсөн байрлалд
элемэнт нэмж оруулах

                             Өгөгдсөн элемэнт:   456
                             Шинэ элемэнт:       42



                      prevCurr          nextCurr
   head                          curr   tail


      100        56    456       42       34


Багш: Т.Гантөр
НХЖ-ын элемэнтүүдийг хэвлэх
void SinglyLinkedList::Print(){
    if(IsEmpty()==false){
         SLNode *curr=head;
         cout<<"SinglyLinkedList: ";
         while(curr!=NULL){
             cout<<curr->element<<"->";
             curr=curr->next;
         }
    }
    else
         cout<<"SinglyLinkedList is
                          empty"<<endl;
}
Багш: Т.Гантөр
НХЖ-ын элемэнтүүдийг хэвлэх
Тайлбар:
1. Жагсаалт хоосон эсэхийг шалгана.
2. А. Жагсаалт хоосон бол SinglyLinkedList
   is empty мэдээллийг хэвлэнэ.
2. В. Хоосон биш бол дараах алхамуудыг
   гүйцэтгэнэ.
   2. 1. жагсаалтын эхлэлээс төгсгөл хүртэл бүх
      зангилаанд туслах заагчийн тусламжтайгаар
      дараалан хандаж, зангилаа бүрийн element
      талбарын утгыг хэвлэнэ.



Багш: Т.Гантөр
НХЖ-ын элемэнтүүдийг хэвлэх
head curr                         tail


    100           56   456   42    34




SinglyLinkedList: 100->




 Багш: Т.Гантөр
НХЖ-ын элемэнтүүдийг хэвлэх
head curr                         tail


    100           56   456   42    34




SinglyLinkedList: 100-> 56->




 Багш: Т.Гантөр
НХЖ-ын элемэнтүүдийг хэвлэх
head              curr              tail


    100           56     456   42    34




SinglyLinkedList: 100-> 56-> 456->




 Багш: Т.Гантөр
НХЖ-ын элемэнтүүдийг хэвлэх
head                    curr        tail


    100           56   456     42    34




SinglyLinkedList: 100-> 56-> 456-> 42->




 Багш: Т.Гантөр
НХЖ-ын элемэнтүүдийг хэвлэх
head                         curr tail


    100           56   456   42    34




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




 Багш: Т.Гантөр
НХЖ-ын элемэнтүүдийг хэвлэх
head                              tail
                                    curr


    100           56   456   42    34




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




 Багш: Т.Гантөр
НХЖ-аас өгөгдсөн
 элемэнтийг хайх
bool SinglyLinkedList::FindItem(Data key){
     if(IsEmpty()==false){
     SLNode *curr = head;
     while (curr!=NULL && curr->element!=key){
               curr=curr->next;
      }
     if (curr->element == key) return true;
     return false;
      }
     else
      return false;
}



Багш: Т.Гантөр
НХЖ-аас өгөгдсөн
элемэнтийг хайх
Тайлбар:
1. Жагсаалт хоосон эсэхийг шалгана.
2. А. Жагсаалт хоосон бол SinglyLinkedList
   is empty мэдээллийг хэвлэнэ.
2. В. Хоосон биш бол дараах алхамуудыг
   гүйцэтгэнэ.
   2. 1. жагсаалтын эхлэлээс туслах заагчийн
      тусламжтайгаар өгөгдсөн утгыг зангилаа
      бүрийн элемэнт талбарын утгатай жиших
      замаар элемэнт олдох хүртэл эсвэл төгсгөл
      хүртэл зангилаануудад дараалан хандах
      замаар хайлтыг явуулна.

Багш: Т.Гантөр
НХЖ-аас өгөгдсөн
элемэнтийг хайх
Тайлбар:
  2. 2. Хайлтыг явуулж буй давталт дуусах үед
     туслах заагчын утга хоосон/NULL/ байвал
     өгөгдсөн элемэнт жагсаалтад байхгүй байна.
  2. 3. Хайлтыг явуулж буй давталт дуусах үед
     туслах заагчын зааж буй зангилааны элемэнт
     талбарын утга өгөгдсөн элемэнттэй тэнцүү
     үед өгөгдсөн утга жагсаалтад байна.




Багш: Т.Гантөр
НХЖ-аас өгөгдсөн
 элемэнтийг хайх
                       Хайх утга: 10


head curr                                   tail


     100          56       456         42    34
      10




 Багш: Т.Гантөр
НХЖ-аас өгөгдсөн
 элемэнтийг хайх
                       Хайх утга: 10


head curr                                   tail


     100          56       456         42    34
      10




 Багш: Т.Гантөр
НХЖ-аас өгөгдсөн
 элемэнтийг хайх
                      Хайх утга: 10


head             curr                      tail


    100          56       456         42    34
                 10




Багш: Т.Гантөр
НХЖ-аас өгөгдсөн
 элемэнтийг хайх
                      Хайх утга: 10


head                       curr            tail


    100          56       456         42    34
                          10




Багш: Т.Гантөр
НХЖ-аас өгөгдсөн
 элемэнтийг хайх
                      Хайх утга: 10


head                                  curr tail


    100          56       456         42    34
                                      10




Багш: Т.Гантөр
НХЖ-аас өгөгдсөн
 элемэнтийг хайх
                      Хайх утга: 10


head                                       tail
                                             curr


    100          56       456         42    34
                                            10




Багш: Т.Гантөр
НХЖ-аас өгөгдсөн
 элемэнтийг хайх
                      Хайх утга: 10


head                                       tail
                                             curr


    100          56       456         42    34
                                            10

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

Багш: Т.Гантөр
НХЖ-аас өгөгдсөн
 элемэнтийг хайх
                       Хайх утга: 56


head curr                                   tail


     100          56       456         42    34
      56




 Багш: Т.Гантөр
НХЖ-аас өгөгдсөн
 элемэнтийг хайх
                       Хайх утга: 56


head curr                                   tail


     100          56       456         42    34
      56

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

 Багш: Т.Гантөр
НХЖ-ын элемэнтийн
 тоог буцаах
int SinglyLinkedList::Count(){
     if(IsEmpty()==false){
          SLNode *curr=head;
          int counter=0;
          while(curr!=NULL){
               counter++;
               curr=curr->next;
          }
          return counter;
     }
     else
          return 0;
}


Багш: Т.Гантөр
НХЖ-ын элемэнтийн
тоог буцаах
Тайлбар:
1. Жагсаалт хоосон эсэхийг шалгана.
2. А. Жагсаалт хоосон бол 0 гэсэн утгыг буцаана.
2. В. Хоосон биш бол туслах туслах заагчийн
   тусламжтайгаар жагсаалтын эхлэлээс төгсгөл
   хүртэл элемэнтүүдэд дараалан хандах замаар
   тоолон, тоог буцаана.




Багш: Т.Гантөр
НХЖ-ын элемэнтийн
 тоог буцаах
head curr                           tail


    100           56   456     42    34




                       counter=0




 Багш: Т.Гантөр
НХЖ-ын элемэнтийн
 тоог буцаах
head curr                           tail


    100           56   456     42    34




                       Counter= 1




 Багш: Т.Гантөр
НХЖ-ын элемэнтийн
 тоог буцаах
head curr                           tail


    100           56   456     42    34




                       Counter= 2




 Багш: Т.Гантөр
НХЖ-ын элемэнтийн
 тоог буцаах
head              curr                tail


    100           56     456     42    34




                         Counter= 3




 Багш: Т.Гантөр
НХЖ-ын элемэнтийн
 тоог буцаах
head                    curr        tail


    100           56   456     42    34




                       Counter= 4




 Багш: Т.Гантөр
НХЖ-ын элемэнтийн
 тоог буцаах
head                           curr tail


    100           56   456     42    34




                       Counter= 5




 Багш: Т.Гантөр
НХЖ-ын элемэнтийн
 тоог буцаах
head                                tail
                                      curr


    100           56   456     42    34




                       Counter=5




 Багш: Т.Гантөр
НХЖ-ын эхний элемэнтийн
 утгыг буцаах
Data SinglyLinkedList::First ()
{
       if (IsEmpty()==true)
           cout<<"SinglyLinkedList is empty";
       return head->element;
}
Тайлбар:
1. Жагсаалт хоосон эсэхийг шалгана.
2. А. Жагсаалт хоосон бол SinglyLinkedList is
   empty мэдээллийг хэвлэнэ.
2. В. Хоосон биш бол эхлэлийн заагчийн зааж буй
   зангилааны элемэнт талбарын утгыг буцаана.


Багш: Т.Гантөр
НХЖ-ын эхний элемэнтийн
утгыг буцаах



head                                 tail


      100        56   456     42      34

                 head->element=100




Багш: Т.Гантөр
НХЖ-ын төгсгөлийн
 элемэнтийн утгыг буцаах
Data SinglyLinkedList::Last ()
{
       if (tail == NULL)
             cout<<"SinglyLinkedList is
empty";
       return tail->element;
}
Тайлбар:
1. Жагсаалт хоосон эсэхийг шалгана.
2. А. Жагсаалт хоосон бол SinglyLinkedList is
   empty мэдээллийг хэвлэнэ.
2. В. Хоосон биш бол төгсгөлийн заагчийн зааж буй
   зангилааны элемэнт талбарын утгыг буцаана.

Багш: Т.Гантөр
НХЖ-ын төгсгөлийн
элемэнтийн утгыг буцаах



head                                 tail


      100        56    456     42     34

                  tail->element=34




Багш: Т.Гантөр
НХЖ-ын эхний
 элемэнтийг устгах
void SinglyLinkedList::DeleteFirst()
{
      if(IsEmpty()==false){
           SLNode* curr = head;
           head=curr->next;
           delete curr;
      }
      else
          cout<<"SinglyLinkedList is
                            empty"<<endl;
}



Багш: Т.Гантөр
НХЖ-ын эхний
 элемэнтийг устгах
Тайлбар:
1. Жагсаалт хоосон эсэхийг шалгана.
2. А. Жагсаалт хоосон бол SinglyLinkedList is
   empty мэдээллийг хэвлэнэ.
2. В. Хоосон биш бол дараах алхамуудыг гүйцэтгэнэ.
   2. 1. Туслах заагчийг зарлан, түүгээр эхний зангилааг
       заалгана.
   2. 2. Эхлэлийн заагчийг дараагийн буюу хоѐр дахь
       зангилаанд шилжүүлнэ.
   2. 3. Туслах заагчийн зааж буй зангилааг санах ойгоос
       чөлөөлөх буюу устгана.



 Багш: Т.Гантөр
НХЖ-ын эхний
элемэнтийг устгах


     head
  curr                           tail


        100      56   456   42    34




Багш: Т.Гантөр
НХЖ-ын төгсгөлийн
 элемэнтийг устгах
void SinglyLinkedList::DeleteLast()
{
      if(IsEmpty()==false){
           SLNode* prevCurr = NULL;
           SLNode* curr = head;
           while (curr!= tail )
           {
               prevCurr = curr;
               curr = curr->next;
           }




Багш: Т.Гантөр
НХЖ-ын төгсгөлийн
    элемэнтийг устгах
                 if (curr == tail){
                     prevCurr->next=curr->next;
                     tail = prevCurr;
                 }
                 delete curr;
         }
         else
             cout<<"SinglyLinkedList is
                               empty"<<endl;
}




Багш: Т.Гантөр
НХЖ-ын төгсгөлийн
 элемэнтийг устгах
Тайлбар:
1. Жагсаалт хоосон эсэхийг шалгана.
2. А. Жагсаалт хоосон бол SinglyLinkedList is
   empty мэдээллийг хэвлэнэ.
2. В. Хоосон биш бол дараах алхамуудыг гүйцэтгэнэ.
   2. 1. Туслах заагч/curr/-ийг зарлан, түүгээр эхний
       зангилааг заалгана.
   2. 2. Туслах заагчийн зааж буй зангилааны өмнөх
       зангилааг заах өөр нэг туслах заагч/prevCurr/-ийг
       зарлан, түүгээр хоосон/NULL/-ыг заалгана.
   2. 3. Туслах заагч/curr/ болон төгсгөлийн заагчууд нэг
       зангилаа заах хүртэл дээрх заагчийг дараалуулан
       шилжүүлнэ.

 Багш: Т.Гантөр
НХЖ-ын төгсгөлийн
 элемэнтийг устгах
Тайлбар:
  2. 4. Туслах заагч/curr/ болон төгсгөлийн заагчууд нэг
      зангилаа заах үед prevCurr заагчийн заагч
      талбараар curr заагчийн заагч талбарын зааж буй
      утгыг заалгана.

   2. 5. Төгсгөлийн заагчийг prevCurr заагчийг зааж буй
         зангилаанд шилжүүлнэ.

   2. 6. curr заагчийн зааж буй зангилааг устгах буюу
         санах ойгоос чөлөөлнө.



 Багш: Т.Гантөр
НХЖ-ын төгсгөлийн
элемэнтийг устгах
 prevCurr




head curr                         tail


     100         56   ...   456      34



Багш: Т.Гантөр
НХЖ-ын төгсгөлийн
элемэнтийг устгах
prevCurr




head curr                         tail


     100         56   ...   456      34



Багш: Т.Гантөр
НХЖ-ын төгсгөлийн
элемэнтийг устгах




prevCurr
head             curr               tail


     100         56     ...   456      34



Багш: Т.Гантөр
НХЖ-ын төгсгөлийн
элемэнтийг устгах




                 prevCurr
head                        curr         tail


     100           56       ...    456      34



Багш: Т.Гантөр
НХЖ-ын төгсгөлийн
элемэнтийг устгах




                      prevCurr
head                             currtail


     100         56     ...      456    34



Багш: Т.Гантөр
НХЖ-ын төгсгөлийн
элемэнтийг устгах




                            prevCurr
head                                tail
                                       curr


     100         56   ...     456      34



Багш: Т.Гантөр
НХЖ-ын өгөгдсөн элемэнтийн
 өмнөх элемэнтийг устгах
void SinglyLinkedList::DeleteBefore(Data key)
{
  if(IsEmpty()==false){
  SLNode *prevCurr = NULL;
  SLNode *curr = NULL;
  SLNode *nextCurr=head;
  while(nextCurr!=NULL && nextCurr->element!=key)
      {
          prevCurr = curr;
          curr=nextCurr;
          nextCurr = nextCurr->next;
      }
      if (nextCurr == NULL)
          cout<<"key element oldsongui"<<endl;

Багш: Т.Гантөр
НХЖ-ын өгөгдсөн элемэнтийн
    өмнөх элемэнтийг устгах
        if (nextCurr == head)
             cout<<"key elementiin umnu element bhgui
                                      bna"<<endl;
        else if (nextCurr->element == key){
             if(curr==head)
                  head=nextCurr;
             else
                  prevCurr->next=nextCurr;
             delete curr;
        }
       }
        else
             cout<<"SinglyLinkedList is empty"<<endl;

}
Багш: Т.Гантөр
НХЖ-ын өгөгдсөн элемэнтийн
 өмнөх элемэнтийг устгах
Тайлбар:
1. Жагсаалт хоосон эсэхийг шалгана.
2. А. Жагсаалт хоосон бол SinglyLinkedList is
   empty мэдээллийг хэвлэнэ.
2. В. Хоосон биш бол дараах алхамуудыг гүйцэтгэнэ.
   2. 1. Өгөгдсөн элемэнтийг хайна. Үүний тулд гурван
       туслах заагчийг ашиглана.
      • curr – устгах зангилааг заалгана.
      • prevCurr – устгах элемэнтийн өмнөх зангилааг
          заалгана.
      • nextCurr – өгөгдсөн элемэнт буюу устгах
          элемэнтийн дараагийн зангилааг заалгана.


 Багш: Т.Гантөр
НХЖ-ын өгөгдсөн элемэнтийн
 өмнөх элемэнтийг устгах
Тайлбар:
  2. 2. Хайлт зогссон үед хэрвээ nextCurr заагч NULL
      утгыг зааж байвал өгөгдсөн элемэнт жагсаалтад
      байхгүй байна.

   2. 3. Хайлт зогссон үед хэрвээ nextCurr болон эхлэлийн
         заагчуудын зааж буй утга    адил үед эхний
         элемэнтийн өмнө зангилаа байхгүй тул үйлдэл
         гүйцэтгэх боломжгүй.




 Багш: Т.Гантөр
НХЖ-ын өгөгдсөн элемэнтийн
 өмнөх элемэнтийг устгах
Тайлбар:
  2. 3. Хайлт зогссон үед хэрвээ nextCurr заагчийн
      element талбарын утга өгөгдсөн элемэнттэй тэнцүү
      буюу хайсан зангилаа олдсон бол:
      2. 3. 1. Хэрвээ curr болон head заагчуудын зааж буй
      зангилаа нь адил үед эхлэлийн заагчийг дараагийн
      элемэнтэд шилжүүлнэ.
      2. 3. 2. Хэрвээ curr болон head заагчуудын зааж буй
      зангилаа нь адил биш үед prevCurr заагчийн зааж
      буй зангилааны заагч талбараар nextCurr заагчийн
      зааж буй зангилааг заалгана.
  2. 4. curr заагчийн зааж буй зангилааг санах ойгоос
      чөлөөлөх буюу устгана.

 Багш: Т.Гантөр
НХЖ-ын өгөгдсөн элемэнтийн
өмнөх элемэнтийг устгах
prevCurr
     curr




    nextCurr
   head                          tail


      100        56   456   42    34


Багш: Т.Гантөр
НХЖ-ын өгөгдсөн элемэнтийн
өмнөх элемэнтийг устгах
prevCurr
     curr                   Өгөгдсөн элемэнт:   100




    nextCurr
   head                                tail


      100        56   456       42       34


Багш: Т.Гантөр
НХЖ-ын өгөгдсөн элемэнтийн
өмнөх элемэнтийг устгах
prevCurr
     curr                   Өгөгдсөн элемэнт:   456




    nextCurr
head                                   tail


      100        56   456       42       34


Багш: Т.Гантөр
НХЖ-ын өгөгдсөн элемэнтийн
өмнөх элемэнтийг устгах
prevCurr




                 nextCurr
head
   curr                                tail


      100         56        456   42    34


Багш: Т.Гантөр
НХЖ-ын өгөгдсөн элемэнтийн
 ардах элемэнтийг устгах
void SinglyLinkedList::DeleteAfter(Data key)
{
    if(IsEmpty()==false){
      SLNode *prevCurr = NULL;
      SLNode *curr = head;
      while (curr!= NULL && prevCurr->element!=key)
     {
        prevCurr = curr;
        curr=curr->next;
     }
     if (curr == NULL)
           cout<<"key element oldsongui"<<endl;



Багш: Т.Гантөр
НХЖ-ын өгөгдсөн элемэнтийн
    ардах элемэнтийг устгах
       if (prevCurr == tail)
            cout<<"key elementiin hoino element
                                bhgui bna"<<endl;
       else if (prevCurr->element == key){
            prevCurr->next=curr->next;
            delete curr;
       }
     }
     else
       cout<<"SinglyLinkedList is empty"<<endl;
}




Багш: Т.Гантөр
НХЖ-ын өгөгдсөн элемэнтийн
 ардах элемэнтийг устгах
Тайлбар:
1. Жагсаалт хоосон эсэхийг шалгана.
2. А. Жагсаалт хоосон бол SinglyLinkedList is
   empty мэдээллийг хэвлэнэ.
2. В. Хоосон биш бол дараах алхамуудыг гүйцэтгэнэ.
   2. 1. Өгөгдсөн элемэнтийг хайна. Үүний тулд хоѐр
       туслах заагчийг ашиглана.
      • curr – устгах зангилааг заалгана.
      • prevCurr – устгах элемэнтийн өмнөх зангилааг
          заалгана.




 Багш: Т.Гантөр
НХЖ-ын өгөгдсөн элемэнтийн
 ардах элемэнтийг устгах
Тайлбар:
  2. 2. Хайлт зогссон үед хэрвээ curr заагч NULL утгыг
      зааж байвал өгөгдсөн элемэнт жагсаалтад байхгүй
      байна.

   2. 3. Хайлт      зогссон үед хэрвээ prevCurr болон
         төгсгөлийн заагчуудын зааж буй зангилаа нь адил
         бол төгсгөлийн элемэнтийн ард зангилаа байхгүй
         тул үйлдэл гүйцэтгэх боломжгүй.




 Багш: Т.Гантөр
НХЖ-ын өгөгдсөн элемэнтийн
 ардах элемэнтийг устгах
Тайлбар:
  2. 3. Хайлт зогссон үед хэрвээ prevCurr заагчийн зааж
      буй зангилааны element талбарын утга өгөгдсөн
      элемэнттэй тэнцүү буюу хайсан зангилаа олдсон
      бол prevCurr заагчийн зааж буй зангилааны заагч
      талбараар curr заагчийн зааж буй зангилааг
      заалгана.

   2. 4. curr заагчийн зааж буй зангилааг санах ойгоос
         чөлөөлөх буюу устгана.




 Багш: Т.Гантөр
НХЖ-ын өгөгдсөн элемэнтийн
ардах элемэнтийг устгах
prevCurr




head curr                        tail


      100        56   456   42    34


Багш: Т.Гантөр
НХЖ-ын өгөгдсөн элемэнтийн
ардах элемэнтийг устгах
prevCurr
                        Өгөгдсөн элемэнт:   42




head curr                            tail


      100        56   456    42       34


Багш: Т.Гантөр
НХЖ-ын өгөгдсөн элемэнтийн
ардах элемэнтийг устгах

                          Өгөгдсөн элемэнт:   42




prevCurr
head             curr                  tail


      100        56     456    42       34


Багш: Т.Гантөр
НХЖ-ын өгөгдсөн элемэнтийн
ардах элемэнтийг устгах

                              Өгөгдсөн элемэнт:   42




                 prevCurr
head                        curr           tail


      100           56      456    42       34


Багш: Т.Гантөр
НХЖ-ын өгөгдсөн элемэнтийн
ардах элемэнтийг устгах

                           Өгөгдсөн элемэнт:   42




                      prevCurr
head                             curr tail


      100        56     456      42      34


Багш: Т.Гантөр
НХЖ-ын өгөгдсөн элемэнтийн
ардах элемэнтийг устгах

                        Өгөгдсөн элемэнт:       42




                            prevCurr
head                                   tail
                                         curr


      100        56   456      42       34


Багш: Т.Гантөр
НХЖ-ын өгөгдсөн элемэнтийн
ардах элемэнтийг устгах
prevCurr
                        Өгөгдсөн элемэнт:   56




head curr                            tail


      100        56   456    42       34


Багш: Т.Гантөр
НХЖ-ын өгөгдсөн элемэнтийн
ардах элемэнтийг устгах

                          Өгөгдсөн элемэнт:   56




prevCurr
head             curr                  tail


      100        56     456    42       34


Багш: Т.Гантөр
НХЖ-ын өгөгдсөн элемэнтийн
ардах элемэнтийг устгах

                              Өгөгдсөн элемэнт:   56




                 prevCurr
head                        curr           tail


      100           56      456    42       34


Багш: Т.Гантөр
НХЖ-ын өгөгдсөн
 элемэнтийг устгах
void SinglyLinkedList::DeleteItem(Data key)
{
   if(IsEmpty()==false){
     SLNode *prevCurr = NULL;
     SLNode *curr = head;
     while (curr != NULL && curr->element != key)
     {
        prevCurr = curr;
        curr=curr->next;
     }
     if (curr == NULL)
          cout<<"key element oldsongui"<<endl;
     if (curr == tail)
          tail=prevCurr;

Багш: Т.Гантөр
НХЖ-ын өгөгдсөн
    элемэнтийг устгах
       if(curr==head)
            head=prevCurr;
       if (curr->element == key){
            prevCurr->next=curr->next;
            delete curr;
       }
     }
     else
       cout<<"SinglyLinkedList is empty"<<endl;
}




Багш: Т.Гантөр
НХЖ-ын өгөгдсөн
 элемэнтийг устгах
Тайлбар:
1. Жагсаалт хоосон эсэхийг шалгана.
2. А. Жагсаалт хоосон бол SinglyLinkedList is
   empty мэдээллийг хэвлэнэ.
2. В. Хоосон биш бол дараах алхамуудыг гүйцэтгэнэ.
   2. 1. Өгөгдсөн элемэнтийг хайна. Үүний тулд хоѐр
       туслах заагчийг ашиглана.
      • curr – устгах зангилааг заалгана.
      • prevCurr – устгах элемэнтийн өмнөх зангилааг
          заалгана.




 Багш: Т.Гантөр
НХЖ-ын өгөгдсөн
 элемэнтийг устгах
Тайлбар:
  2. 2. Хайлт зогссон үед хэрвээ curr заагч NULL утгыг
      зааж байвал өгөгдсөн элемэнт жагсаалтад байхгүй
      байна.
  2. 3. Хайлт зогссон үед хэрвээ curr болон эхлэлийн
      заагчуудын зааж буй зангилаа нь адил бол
      эхлэлийн     заагчийг    дараагийн     элемэнтэд
      шилжүүлнэ.
  2. 4. Хайлт зогссон үед хэрвээ curr болон төгсгөлийн
      заагчуудын зааж буй зангилаа нь адил бол
      төгсгөлийн заагчийг өмнөх элемэнтэд шилжүүлнэ.



 Багш: Т.Гантөр
НХЖ-ын өгөгдсөн
 элемэнтийг устгах
Тайлбар:
  2. 4. Хайлт зогссон үед хэрвээ curr заагчийн зааж буй
      зангилааны element талбарын утга өгөгдсөн
      элемэнттэй тэнцүү буюу хайсан зангилаа олдсон
      бол prevCurr заагчийн зааж буй зангилааны заагч
      талбараар curr заагчийн зааж буй зангилааг
      заалгана.
  2. 5. curr заагчийн зааж буй зангилааг санах ойгоос
      чөлөөлөх буюу устгана.




 Багш: Т.Гантөр
НХЖ-ын өгөгдсөн байрлал дахь
 элемэнтийг устгах
void SinglyLinkedList::DeletePosition(int pos)
{
   if(IsEmpty()==false){
     int i=1;
     SLNode *prevCurr = NULL;
     SLNode *curr = head;
     while (curr != NULL && i!= pos)
     {
         prevCurr = curr;
         curr=curr->next;
         i++;
     }
     if (curr == NULL)
          cout<<"bairlal oldsongui"<<endl;

Багш: Т.Гантөр
НХЖ-ын өгөгдсөн байрлал дахь
    элемэнтийг устгах
       if (i == pos){
          if(curr==head)
            head=curr->next;
          else
            prevCurr->next=curr->next;
          if(curr==tail)
            tail=prevCurr;
          delete curr;
       }
     }
     else
       cout<<"SinglyLinkedList is empty"<<endl;
}


Багш: Т.Гантөр
НХЖ-ын өгөгдсөн байрлал дахь
 элемэнтийг устгах
Тайлбар:
1. Жагсаалт хоосон эсэхийг шалгана.
2. А. Жагсаалт хоосон бол SinglyLinkedList is
   empty мэдээллийг хэвлэнэ.
2. В. Хоосон биш бол дараах алхамуудыг гүйцэтгэнэ.
   2. 1. Өгөгдсөн элемэнтийг хайна. Үүний тулд хоѐр
       туслах заагч, нэг хувьсагч ашиглана.
      • curr – устгах зангилааг заалгана.
      • prevCurr – устгах элемэнтийн өмнөх зангилааг
          заалгана.
      • i – элемэнтүүдийн байрлалыг тодорхойлох
          тоолуур


 Багш: Т.Гантөр
НХЖ-ын өгөгдсөн байрлал дахь
 элемэнтийг устгах
Тайлбар:
  2. 2. Хайлт зогссон үед хэрвээ curr заагч NULL утгыг
      зааж байвал жагсаалтад өгөгдсөн байрлал байхгүй
      байна.
  2. 3. Хайлт зогссон үед хэрвээ тоолуур хувьсагчийн
      утга өгөгдсөн байрлалтай тэнцүү үед:
      2. 3. 1. хэрвээ curr болон эхлэлийн заагчуудын зааж
      буй зангилаа нь адил бол эхлэлийн заагчийг
      дараагийн элемэнтэд шилжүүлнэ.
      2. 3. 2. хэрвээ curr болон төгсгөлийн заагчуудын
      зааж буй зангилаа нь адил бол төгсгөлийн заагчийг
      өмнөх элемэнтэд шилжүүлнэ.


 Багш: Т.Гантөр
НХЖ-ын өгөгдсөн байрлал дахь
 элемэнтийг устгах
Тайлбар:
      2. 3. 3. дээрх хоѐр нөхцлийн аль нь ч биш
      тохиодолд prevCurr заагчийн зааж буй зангилааны
      заагч талбараар curr заагчийн зааж буй зангилааг
      заалгана.
  2. 4. curr заагчийн зааж буй зангилааг санах ойгоос
      чөлөөлөх буюу устгана.




 Багш: Т.Гантөр

More Related Content

What's hot

семинар9
семинар9семинар9
семинар9
boogii79
 
семинар 7
семинар 7семинар 7
семинар 7
boogii79
 
Лаборатор-3
Лаборатор-3Лаборатор-3
Лаборатор-3
bsuren_bn
 
тоон дараалл хязгаар лекц№1
тоон дараалл хязгаар лекц№1тоон дараалл хязгаар лекц№1
тоон дараалл хязгаар лекц№1
Э. Гүнтулга
 
семинар 8
семинар 8семинар 8
семинар 8
boogii79
 
2012 09 10 тоон дараалл хязгаар лекц№2
2012 09 10 тоон дараалл хязгаар лекц№22012 09 10 тоон дараалл хязгаар лекц№2
2012 09 10 тоон дараалл хязгаар лекц№2
Э. Гүнтулга
 
Day 3 php working with string, number
Day 3   php working with string, numberDay 3   php working with string, number
Day 3 php working with string, number
ETC
 
Лабораторийн ажил № 1
Лабораторийн ажил № 1Лабораторийн ажил № 1
Лабораторийн ажил № 1
bsuren_bn
 
Лабораторийн ажил № 2
Лабораторийн ажил № 2Лабораторийн ажил № 2
Лабораторийн ажил № 2
bsuren_bn
 

What's hot (20)

семинар9
семинар9семинар9
семинар9
 
семинар 7
семинар 7семинар 7
семинар 7
 
Лаборатор-3
Лаборатор-3Лаборатор-3
Лаборатор-3
 
тоон дараалл хязгаар лекц№1
тоон дараалл хязгаар лекц№1тоон дараалл хязгаар лекц№1
тоон дараалл хязгаар лекц№1
 
семинар 8
семинар 8семинар 8
семинар 8
 
Олон хувьсагчтай функцийн уламжлал ба дифференциал
Олон хувьсагчтай функцийн уламжлал ба дифференциалОлон хувьсагчтай функцийн уламжлал ба дифференциал
Олон хувьсагчтай функцийн уламжлал ба дифференциал
 
Dsi lec7
Dsi lec7Dsi lec7
Dsi lec7
 
Олон хувьсагчтай функцийн нөхцөлт экстремум, интеграл
Олон хувьсагчтай функцийн нөхцөлт экстремум, интегралОлон хувьсагчтай функцийн нөхцөлт экстремум, интеграл
Олон хувьсагчтай функцийн нөхцөлт экстремум, интеграл
 
2012 09 10 тоон дараалл хязгаар лекц№2
2012 09 10 тоон дараалл хязгаар лекц№22012 09 10 тоон дараалл хязгаар лекц№2
2012 09 10 тоон дараалл хязгаар лекц№2
 
Day 3 php working with string, number
Day 3   php working with string, numberDay 3   php working with string, number
Day 3 php working with string, number
 
lab8
lab8lab8
lab8
 
Эх функц ба тодорхой биш интеграл
Эх функц ба тодорхой биш интегралЭх функц ба тодорхой биш интеграл
Эх функц ба тодорхой биш интеграл
 
Лабораторийн ажил № 1
Лабораторийн ажил № 1Лабораторийн ажил № 1
Лабораторийн ажил № 1
 
Өгөгдлийн бүтэц 11
Өгөгдлийн бүтэц 11Өгөгдлийн бүтэц 11
Өгөгдлийн бүтэц 11
 
Лабораторийн ажил № 2
Лабораторийн ажил № 2Лабораторийн ажил № 2
Лабораторийн ажил № 2
 
9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргууд9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргууд
 
Lekts 6
Lekts  6Lekts  6
Lekts 6
 
Mt102 lekts14
Mt102 lekts14Mt102 lekts14
Mt102 lekts14
 
Lekts 5
Lekts  5Lekts  5
Lekts 5
 
Функцэн цуваа
Функцэн цувааФункцэн цуваа
Функцэн цуваа
 

Viewers also liked

Viewers also liked (10)

Dsi lec3
Dsi lec3Dsi lec3
Dsi lec3
 
Dsi lec2
Dsi lec2Dsi lec2
Dsi lec2
 
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 lec6,7

  • 3. Жагсаалт  Элемэнтүүд нь санах ойд дэс дараалан байрлах албагүй бөгөөд элемэнтүүд нь санах ойд динамикаар үүсдэг шугаман зохион байгуулалттай элемэнтүүдийн олонлогийг жагсаалт гэнэ.  Динамикаар үүссэн элемэнтүүдийн дарааллыг холбоос буюу заагчаар тодорхойлдог. Багш: Т.Гантөр
  • 4. Жагсаалтын ангилал Жагсаалтыг холбоосоор нь дараах байдлаар ангилдаг: Нэг холбоост жагсаалт /Singly Linked List/ Цикл жагсаалт /Circular Linked List Давхар холбоост жагсаалт /Doubly Linked List/ Багш: Т.Гантөр
  • 5. Нэг холбоост жагсаалт  Нэг холбоост жагсаалтын элемэнт буюу зангилаа нь өгөгдөл ба холбоос/заагч/ гэсэн хоѐр хэсгээс тогтоно. 100 Өгөгдөл 100 Багш: Т.Гантөр
  • 6. Нэг холбоост жагсаалт  Зангилаа бүрийн заагч нь дараачийн зангилааг заадаг өгөгдлүүдийн цэгцлэгдсэн тогтоцыг нэг холбоост жагсаалт /НХЖ/ буюу шугаман жагсаалт гэнэ. 100 56 34 456  Өөрөөр хэлбэл дэс дараалан ар араасаа холбогдсон элемэнтүүдийн тогтоц юм. Багш: Т.Гантөр
  • 7. Нэг холбоост жагсаалт  Жагсаалтын зангилааны өгөгдөл нь өгөгдөл буюу утгыг агуулах бөгөөд тухайн утгын төрөл бүхэл тоо, бодит тоо, тэмдэгт мөр зэрэг үндсэн өгөгдлийн төрлүүдээс гадна хэрэглэгийн тодорхойлсон ямар ч төрөлтэй байж болно.  typedef int Data; 100 56 34 456  typedef char Data; c k a d Багш: Т.Гантөр
  • 8. Нэг холбоост жагсаалт  Жагсаалтын зангилааны холбоос буюу заагч нь дараачийн зангилааг заах буюу санах ойн үүрний хаягийг агуулах учраас заах зангилааны төрөлтэй ижил төрлийнх байна  Жагсаалтын хамгийн сүүлийн зангилааны заагч нь NULL гэсэн утгыг заавал агуулсан байх ѐстой 100 56 34 456 Багш: Т.Гантөр
  • 9. Нэг холбоост жагсаалтын зангилааг илэрхийлэх:  Нэг холбоост жагсаалтын зангилааг дараах SLNode классаар тодорхойлъѐ class SLNode{ Data element; SLNode *next; SLNode(Data evalue;SLNode* nvalue) { element=evalue; next=nvalue; } friend class SinglyLinkedList; }; Багш: Т.Гантөр
  • 10. Нэг холбоост жагсаалтын зангилааг илэрхийлэх: Data element; Өгөгдөл агуулах талбар 100 SLNode *next; Дараагийн зангилааг заах заагч талбар SLNode SLNode SLNode 100 100 100 Багш: Т.Гантөр
  • 11. Нэг холбоост жагсаалтыг зохион байгуулах  Нэг холбоост жагсаалтад дараах гадаад заагчуудыг тодорхойлж, ашиглах шаардлагатай 1. Жагсаалтын эхний зангилааны санах ойн үүрний хаягийг агуулах толгой заагч буюу эхлэл заагч юм. Нэг холбоост жагсаалтын аливаа зангилаанд хүрэхийн тулд жагсаалтын эхний зангилаанаас эхлэн холбоосуудын тусламжтайгаар дараалан хандаж хүссэн зангилаагаа олж авдаг. Иймд толгой буюу эхлэл заагч нь ямагт жагсаалтын эхний зангилааг зааж байх ѐстой. 100 56 34 456 Багш: Т.Гантөр
  • 12. Нэг холбоост жагсаалтыг зохион байгуулах 2. Жагсаалтын төгсгөлийн зангилааны санах ойн үүрний хаягийг агуулах сүүл заагч буюу төгсгөл заагч юм. Энэ заагчийн тусламжтайгаар жагсаалтын төгсгөл хязгаарлагдана. Иймд сүүл буюу төгсгөл заагч нь ямагт жагсаалтын төгсгөлийн зангилааг зааж байх ѐстой. 100 56 34 456 Багш: Т.Гантөр
  • 13. Нэг холбоост жагсаалтыг зохион байгуулах 3. Идэвхтэй элемэнтийн санах ойн үүрний хаягийг агуулах идэвхтэй элемэнтийн заагч буюу туслах заагч. Энэ заагчийн тусламжтайгаар жагсаалтад хийгдэх үйлдлүүдийг гүйцэтгэнэ. Тиймээс энэхүү заагчид тогтсон байрлал байхгүй бөгөөд тухайн эгшинд идэвхтэй байх элемэнтийг заана. 100 56 34 456 Багш: Т.Гантөр
  • 14. Нэг холбоост жагсаалтад хийгдэх үйлдлүүд Жагсаалтын эхэнд Өгөгдсөн элемэнтийн элемэнт нэмэх өмнө InsertFirst() InsertBefore() НХЖ-д Өгөгдсөн элемэнтийн элемэнт Жагсаалтын дунд хойно нэмж элемэнт нэмэх оруулах InsertAfter() Жагсаалтын Өгөгдсөн байрлалд төгсгөлд элемэнт нэмэх InsertPosition() InsertLast() Багш: Т.Гантөр
  • 15. Нэг холбоост жагсаалтад хийгдэх үйлдлүүд Өгөгдсөн элемэнтийн Жагсаалтын өмнөх эхлэлээс устггах DeleteBefore() DeleteFirst() Өгөгдсөн элемэнтийн ардах НХЖ-аас DeleteAfter() Жагсаалтын элемэнт дундаас устгах устгах Өгөгдсөн байрлал дахь DeletePosition() Жагсаалтын төгсгөлөөс устгах Өгөгдсөн утгатай DeleteLast() DeleteItem() Багш: Т.Гантөр
  • 16. Нэг холбоост жагсаалтад хийгдэх үйлдлүүд НХЖ-аас элемэнт хайх – FindItem() НХЖ хоосон эсэхийг шалгах – IsEmpty() НХЖ-ыг хоослох – MakeEmpty() НХЖ-ын эхний элемэнтийн утгыг буцаах – First() Жагсаалтын төгсгөлийн элемэнтийн утгыг буцаах– Last() Жагсаалтын элемэнтийн тоог буцаах – Count() Жагсаалтын элемэнтүүдийг хэвлэх – Print() Багш: Т.Гантөр
  • 17. НХЖ-ыг илэрхийлэх хийсвэр төрлийг тодорхойлох class SinglyLinkedList { SLNode *head; SLNode *tail; public: SinglyLinkedList (); ~SinglyLinkedList (); bool IsEmpty() ; void MakeEmpty(); const Data First () ; const Data Last () ; void InsertFirst (Data item); void InsertLast (Data item); Багш: Т.Гантөр
  • 18. НХЖ-ыг илэрхийлэх хийсвэр төрлийг тодорхойлох void InsertBefore(Data key,Data item); void InsertAfter(Data key,Data item); void InsertPosition(int pos,Data item); void FindItem(Data key); void DeleteFirst(); void DeleteLast(); void DeleteBefore(Data item); void DeleteAfter(Data item); void DeletePosition(int pos); void DeleteItem(Data key); int Count(); void Print(); }; Багш: Т.Гантөр
  • 19. НХЖ-ыг үүсгэх байгуулагч функц: SinglyLinkedList::SinglyLinkedList (){ head=tail= NULL; } Тайлбар: SinglyLinkedList list; // list нэртэй нэг холбоост жагсаалт үүсгэж байна. head tail Багш: Т.Гантөр
  • 20. НХЖ-ыг санах ойгоос бүрэн чөлөөлөх устгагч функц: SinglyLinkedList::~SinglyLinkedList (){ MakeEmpty(); } void SinglyLinkedList::MakeEmpty() { SLNode *curr=NULL; while (head != NULL){ curr = head; head = head->next; delete curr; } tail = NULL; } Багш: Т.Гантөр
  • 21. НХЖ-ыг санах ойгоос бүрэн чөлөөлөх устгагч функц: Тайлбар:  Устгагч функц нь MakeEmpty() функцийг дуудна.  MakeEmpty() функц нь үүсгэсэн нэг холбоост жагсаалтын элемэнтүүдийг санах ойгоос чөлөөлөх буюу нэг холбоост жагсаалтыг хоослоно.  MakeEmpty() функц нь туслах заагч/curr/-ийг ашиглан эхлэлийн элемэнтээс эхлэн элемэнтүүдийг нэг нэгээр санах ойгоос чөлөөлнө.  Бүх элемэнтүүдийг чөлөөлсний дараа хоосон жагсаалт үлдэнэ. Багш: Т.Гантөр
  • 22. НХЖ-ыг санах ойгоос бүрэн чөлөөлөх устгагч функц: head tail 100 56 ... 34 456 curr Багш: Т.Гантөр
  • 23. НХЖ-ыг санах ойгоос бүрэн чөлөөлөх устгагч функц: head tail 100 56 ... 34 456 curr Багш: Т.Гантөр
  • 24. НХЖ-ыг санах ойгоос бүрэн чөлөөлөх устгагч функц: curr head tail 56 ... 34 456 Багш: Т.Гантөр
  • 25. НХЖ-ыг санах ойгоос бүрэн чөлөөлөх устгагч функц: curr head tail ... 34 456 Багш: Т.Гантөр
  • 26. НХЖ-ыг санах ойгоос бүрэн чөлөөлөх устгагч функц: curr head tail 34 456 Багш: Т.Гантөр
  • 27. НХЖ-ыг санах ойгоос бүрэн чөлөөлөх устгагч функц: curr tail head 456 Багш: Т.Гантөр
  • 28. НХЖ-ыг санах ойгоос бүрэн чөлөөлөх устгагч функц: tail curr head Багш: Т.Гантөр
  • 29. Нэг холбоост жагсаалт Устгагч функц: Тайлбар: Устгагч функц нь байгуулагч функцээр болон тухайн хийсвэр төрлөөр санах ойд хуваарилагсдсан хувьсагчдыг санах ойгоос чөлөөлнө. currtail head Багш: Т.Гантөр
  • 30. НХЖ-ыг хоосон эсэхийг шалгах bool SinglyLinkedList::IsEmpty(){ if( head == NULL && tail==NULL) return true; return false; } Тайлбар: Эхлэлийн заагч /head/ болон төгсгөлийн заагч /tail/-ууд нь хоосон/NULL/ утгатай бол нэг холбоост жагсаалт хоосон байна буюу true утга, хоосон/NULL/-оос ялгаатай бол хоосон биш буюу false утга буцаана. Багш: Т.Гантөр
  • 31. НХЖ-ыг хоосон эсэхийг шалгах head tail true head 100 56 ... false Багш: Т.Гантөр
  • 32. НХЖ-ын эхэнд элемэнт нэмэх void SinglyLinkedList::InsertFirst(Data item) { SLNode *curr = new SLNode(item, head); if (IsEmpty()==true) tail = curr; head = curr; } Багш: Т.Гантөр
  • 33. НХЖ-ын эхэнд элемэнт нэмэх Тайлбар: 1. Шинэ элемэнтийг санах ойд хуваарилна. Уг зангилааны заагч талбар нь эхлэлийн заагчийг зааж байгаа утгыг заана. 2. А. Хэрвээ жагсаалт хоосон бол эхлэлийн заагч болон төгсгөлийн заагчаар шинэ элемэнтийг заалгана. 2. В. Харин жагсаалт хоосон биш буюу элемэнттэй бол эхлэлийн заагчийг шинэ элемэнтэд шилжүүлнэ. Багш: Т.Гантөр
  • 34. НХЖ-ын эхэнд элемэнт нэмэх curr head tail 100 curr head tail 100 56 ... 34 456 Багш: Т.Гантөр
  • 35. НХЖ-ын төгсгөлд элемэнт нэмэх void SinglyLinkedList::InsertLast (Data item) { SLNode *curr = new SLNode (item, NULL); if (IsEmpty()==true) head = curr; else tail->next = curr; tail = curr; } Багш: Т.Гантөр
  • 36. НХЖ-ын төгсгөлд элемэнт нэмэх Тайлбар: 1. Шинэ элемэнтийг санах ойд хуваарилна. Уг зангилааны заагч талбар нь хоосон утгыг заана. 2. А. Хэрвээ жагсаалт хоосон бол эхлэлийн заагч болон төгсгөлийн заагчаар шинэ элемэнтийг заалгана. 2. В. Харин жагсаалт хоосон биш буюу элемэнттэй бол төгсгөлийн элемэнтийн заагч талбараар шинэ элемэнтийг заалган, төгсгөлийн заагчийг шинэ элемэнтэд шилжүүлнэ. Багш: Т.Гантөр
  • 37. НХЖ-ын төгсгөлд элемэнт нэмэх head tail curr 100 head tail curr 100 56 ... 456 34 Багш: Т.Гантөр
  • 38. НХЖ-ын өгөгдсөн элемэнтийн өмнө элемэнт нэмж оруулах void SinglyLinkedList::InsertBefore(Data key, Data item){ SLNode *prevCurr=NULL; SLNode *nextCurr=head; if(IsEmpty()==false){ while(nextCurr->element!=key && nextCurr!=NULL){ prevCurr=nextCurr; nextCurr=nextCurr->next; } Багш: Т.Гантөр
  • 39. НХЖ-ын өгөгдсөн элемэнтийн өмнө элемэнт нэмж оруулах if (nextCurr == NULL) cout<<"ugugdsun element oldsongui"; if(nextCurr->element==key){ SLNode *curr=new SLNode (item, nextCurr); prevCurr->next= curr; } } else cout<<"SinglyLinkedList is empty"<<endl; } Багш: Т.Гантөр
  • 40. НХЖ-ын өгөгдсөн элемэнтийн өмнө элемэнт нэмж оруулах prevCurr Өгөгдсөн элемэнт: 156 Шинэ элемэнт: 42 nextCurr head tail 100 56 ... 456 34 Багш: Т.Гантөр
  • 41. НХЖ-ын өгөгдсөн элемэнтийн өмнө элемэнт нэмж оруулах Өгөгдсөн элемэнт: 56 Шинэ элемэнт: 42 prevCurr nextCurr head tail 100 56 ... 456 34 Багш: Т.Гантөр
  • 42. НХЖ-ын өгөгдсөн элемэнтийн өмнө элемэнт нэмж оруулах Өгөгдсөн элемэнт: 56 Шинэ элемэнт: 42 prevCurr nextCurr head tail 100 56 ... 456 34 Багш: Т.Гантөр
  • 43. НХЖ-ын өгөгдсөн элемэнтийн өмнө элемэнт нэмж оруулах Өгөгдсөн элемэнт: 56 Шинэ элемэнт: 42 prevCurr nextCurr head tail 100 56 ... 456 34 Багш: Т.Гантөр
  • 44. НХЖ-ын өгөгдсөн элемэнтийн өмнө элемэнт нэмж оруулах Өгөгдсөн элемэнт: 56 Шинэ элемэнт: 42 prevCurr nextCurr head tail 100 56 ... 456 34 Өгөгдсөн элемэнт олдсонгүй!!! Багш: Т.Гантөр
  • 45. НХЖ-ын өгөгдсөн элемэнтийн хойно элемэнт нэмж оруулах void SinglyLinkedList::InsertBefore(Data key, Data item){ SLNode *prevCurr=NULL; SLNode *nextCurr=head; if(IsEmpty()==false){ while(prevCurr->element!=key && nextCurr!=NULL){ prevCurr=nextCurr; nextCurr=nextCurr->next; } Багш: Т.Гантөр
  • 46. НХЖ-ын өгөгдсөн элемэнтийн хойно элемэнт нэмж оруулах if (nextCurr == NULL) cout<<"ugugdsun element oldsongui"; if(prevCurr->element==key){ SLNode *curr=new SLNode (item, nextCurr); prevCurr->next= curr; } } else cout<<"SinglyLinkedList is empty"<<endl; } Багш: Т.Гантөр
  • 47. НХЖ-ын өгөгдсөн элемэнтийн хойно элемэнт нэмж оруулах Тайлбар: 1. Жагсаалт хоосон эсэхийг шалгана. 2. А. Жагсаалт хоосон бол өгөгдсөн элемэнт олдохгүй бөгөөд энэ үйлдлийг гүйцэтгэх боломжгүй. 2. В. Хоосон биш бол дараах алхамуудыг гүйцэтгэнэ. 2. 1. Өгөгдсөн элемэнтийг олохын тулд жагсаалтын эхлэлээс зангилаа болгоны элемэнт талбартай өгөгдсөн утгыг жиших замаар дараалан хайна. Багш: Т.Гантөр
  • 48. НХЖ-ын өгөгдсөн элемэнтийн хойно элемэнт нэмж оруулах Тайлбар: 2. 2. Хэрвээ өгөгдсөн элемэнт олдохгүйгээр жагсаалтын элемэнтийн төгсгөлд хүрвэл жагсаалт элемэнт нэмэх боломжгүй 2. 3. Харин өгөгдсөн элемэнт олдвол шинэ элемэнтийн санах ойд хуваарилж, түүний заагч талбараар шинэ элемэнтийг заалгана. Мөн өгөгдсөн элемэнтийн өмнөх элемэнтийн заагч талбараар шинэ элемэнтийг заалгана. Багш: Т.Гантөр
  • 49. НХЖ-ын өгөгдсөн элемэнтийн хойно элемэнт нэмж оруулах prevCurr Өгөгдсөн элемэнт: 456 Шинэ элемэнт: 42 nextCurr head tail 100 56 456 34 Багш: Т.Гантөр
  • 50. НХЖ-ын өгөгдсөн элемэнтийн хойно элемэнт нэмж оруулах Өгөгдсөн элемэнт: 456 Шинэ элемэнт: 42 prevCurr nextCurr head tail 100 56 456 34 Багш: Т.Гантөр
  • 51. НХЖ-ын өгөгдсөн элемэнтийн хойно элемэнт нэмж оруулах Өгөгдсөн элемэнт: 456 Шинэ элемэнт: 42 prevCurr nextCurr head tail 100 56 456 34 Багш: Т.Гантөр
  • 52. НХЖ-ын өгөгдсөн элемэнтийн хойно элемэнт нэмж оруулах Өгөгдсөн элемэнт: 456 Шинэ элемэнт: 42 curr 42 prevCurr nextCurr head tail 100 56 456 34 Багш: Т.Гантөр
  • 53. НХЖ-ын өгөгдсөн элемэнтийн хойно элемэнт нэмж оруулах Өгөгдсөн элемэнт:456 Шинэ элемэнт: 42 curr 42 prevCurr nextCurr head tail 100 56 456 34 Багш: Т.Гантөр
  • 54. НХЖ-ын өгөгдсөн элемэнтийн хойно элемэнт нэмж оруулах Өгөгдсөн элемэнт: 456 Шинэ элемэнт: 42 prevCurr nextCurr head curr tail 100 56 456 42 34 Багш: Т.Гантөр
  • 55. НХЖ-ын өгөгдсөн байрлалд элемэнт нэмж оруулах void SinglyLinkedList::InsertPosition( int pos, Data item) { if(IsEmpty()==false){ SLNode* prevCurr=NULL; SLNode*nextCurr=head; int i=1; while(i!=pos && nextCurr!=NULL){ prevCurr=nextCurr; nextCurr=nextCurr->next; i++; } Багш: Т.Гантөр
  • 56. НХЖ-ын өгөгдсөн байрлалд элемэнт нэмж оруулах if (nextCurr == NULL) cout<<"bairlal buruu"; if(i==pos){ SLNode *curr=new SLNode(item, nextCurr); prevCurr->next= curr; } } else cout<<"SinglyLinkedList is empty"<<endl; } Багш: Т.Гантөр
  • 57. НХЖ-ын өгөгдсөн байрлалд элемэнт нэмж оруулах Тайлбар: 1. Жагсаалт хоосон эсэхийг шалгана. 2. А. Жагсаалт хоосон бол өгөгдсөн элемэнт олдохгүй бөгөөд энэ үйлдлийг гүйцэтгэх боломжгүй. 2. В. Хоосон биш бол дараах алхамуудыг гүйцэтгэнэ. 2. 1. Өгөгдсөн байрлалыг тодорхойлохын тулд жагсаалтын эхлэлээс зангилаануудыг тоолно. Багш: Т.Гантөр
  • 58. НХЖ-ын өгөгдсөн байрлалд элемэнт нэмж оруулах Тайлбар: 2. 2. Хэрвээ өгөгдсөн байрлал олдохгүйгээр жагсаалтын элемэнтийн төгсгөлд хүрвэл жагсаалт элемэнт нэмэх боломжгүй 2. 3. Харин өгөгдсөн байрлал олдвол шинэ элемэнтийн санах ойд хуваарилж, түүний заагч талбараар шинэ элемэнтийг заалгана. Мөн өгөгдсөн элемэнтийн өмнөх элемэнтийн заагч талбараар шинэ элемэнтийг заалгана. Багш: Т.Гантөр
  • 59. НХЖ-ын өгөгдсөн байрлалд элемэнт нэмж оруулах prevCurr Өгөгдсөн байрлал: 4 Шинэ элемэнт: 42 i=1 nextCurr head tail 100 56 456 34 Багш: Т.Гантөр
  • 60. НХЖ-ын өгөгдсөн байрлалд элемэнт нэмж оруулах Өгөгдсөн байрлал: 4 Шинэ элемэнт: 42 i=2 prevCurr nextCurr head tail 100 56 456 34 Багш: Т.Гантөр
  • 61. НХЖ-ын өгөгдсөн байрлалд элемэнт нэмж оруулах Өгөгдсөн байрлал: 4 Шинэ элемэнт: 42 i=3 prevCurr nextCurr head tail 100 56 456 34 Багш: Т.Гантөр
  • 62. НХЖ-ын өгөгдсөн байрлалд элемэнт нэмж оруулах Өгөгдсөн байрлал: 4 Шинэ элемэнт: 42 curr i=4 42 prevCurr nextCurr head tail 100 56 456 34 Багш: Т.Гантөр
  • 63. НХЖ-ын өгөгдсөн байрлалд элемэнт нэмж оруулах curr 42 prevCurr nextCurr head tail 100 56 456 34 Багш: Т.Гантөр
  • 64. НХЖ-ын өгөгдсөн байрлалд элемэнт нэмж оруулах Өгөгдсөн элемэнт: 456 Шинэ элемэнт: 42 prevCurr nextCurr head curr tail 100 56 456 42 34 Багш: Т.Гантөр
  • 65. НХЖ-ын элемэнтүүдийг хэвлэх void SinglyLinkedList::Print(){ if(IsEmpty()==false){ SLNode *curr=head; cout<<"SinglyLinkedList: "; while(curr!=NULL){ cout<<curr->element<<"->"; curr=curr->next; } } else cout<<"SinglyLinkedList is empty"<<endl; } Багш: Т.Гантөр
  • 66. НХЖ-ын элемэнтүүдийг хэвлэх Тайлбар: 1. Жагсаалт хоосон эсэхийг шалгана. 2. А. Жагсаалт хоосон бол SinglyLinkedList is empty мэдээллийг хэвлэнэ. 2. В. Хоосон биш бол дараах алхамуудыг гүйцэтгэнэ. 2. 1. жагсаалтын эхлэлээс төгсгөл хүртэл бүх зангилаанд туслах заагчийн тусламжтайгаар дараалан хандаж, зангилаа бүрийн element талбарын утгыг хэвлэнэ. Багш: Т.Гантөр
  • 67. НХЖ-ын элемэнтүүдийг хэвлэх head curr tail 100 56 456 42 34 SinglyLinkedList: 100-> Багш: Т.Гантөр
  • 68. НХЖ-ын элемэнтүүдийг хэвлэх head curr tail 100 56 456 42 34 SinglyLinkedList: 100-> 56-> Багш: Т.Гантөр
  • 69. НХЖ-ын элемэнтүүдийг хэвлэх head curr tail 100 56 456 42 34 SinglyLinkedList: 100-> 56-> 456-> Багш: Т.Гантөр
  • 70. НХЖ-ын элемэнтүүдийг хэвлэх head curr tail 100 56 456 42 34 SinglyLinkedList: 100-> 56-> 456-> 42-> Багш: Т.Гантөр
  • 71. НХЖ-ын элемэнтүүдийг хэвлэх head curr tail 100 56 456 42 34 SinglyLinkedList: 100-> 56-> 456-> 42->34-> Багш: Т.Гантөр
  • 72. НХЖ-ын элемэнтүүдийг хэвлэх head tail curr 100 56 456 42 34 SinglyLinkedList: 100-> 56-> 456-> 42->34-> Багш: Т.Гантөр
  • 73. НХЖ-аас өгөгдсөн элемэнтийг хайх bool SinglyLinkedList::FindItem(Data key){ if(IsEmpty()==false){ SLNode *curr = head; while (curr!=NULL && curr->element!=key){ curr=curr->next; } if (curr->element == key) return true; return false; } else return false; } Багш: Т.Гантөр
  • 74. НХЖ-аас өгөгдсөн элемэнтийг хайх Тайлбар: 1. Жагсаалт хоосон эсэхийг шалгана. 2. А. Жагсаалт хоосон бол SinglyLinkedList is empty мэдээллийг хэвлэнэ. 2. В. Хоосон биш бол дараах алхамуудыг гүйцэтгэнэ. 2. 1. жагсаалтын эхлэлээс туслах заагчийн тусламжтайгаар өгөгдсөн утгыг зангилаа бүрийн элемэнт талбарын утгатай жиших замаар элемэнт олдох хүртэл эсвэл төгсгөл хүртэл зангилаануудад дараалан хандах замаар хайлтыг явуулна. Багш: Т.Гантөр
  • 75. НХЖ-аас өгөгдсөн элемэнтийг хайх Тайлбар: 2. 2. Хайлтыг явуулж буй давталт дуусах үед туслах заагчын утга хоосон/NULL/ байвал өгөгдсөн элемэнт жагсаалтад байхгүй байна. 2. 3. Хайлтыг явуулж буй давталт дуусах үед туслах заагчын зааж буй зангилааны элемэнт талбарын утга өгөгдсөн элемэнттэй тэнцүү үед өгөгдсөн утга жагсаалтад байна. Багш: Т.Гантөр
  • 76. НХЖ-аас өгөгдсөн элемэнтийг хайх Хайх утга: 10 head curr tail 100 56 456 42 34 10 Багш: Т.Гантөр
  • 77. НХЖ-аас өгөгдсөн элемэнтийг хайх Хайх утга: 10 head curr tail 100 56 456 42 34 10 Багш: Т.Гантөр
  • 78. НХЖ-аас өгөгдсөн элемэнтийг хайх Хайх утга: 10 head curr tail 100 56 456 42 34 10 Багш: Т.Гантөр
  • 79. НХЖ-аас өгөгдсөн элемэнтийг хайх Хайх утга: 10 head curr tail 100 56 456 42 34 10 Багш: Т.Гантөр
  • 80. НХЖ-аас өгөгдсөн элемэнтийг хайх Хайх утга: 10 head curr tail 100 56 456 42 34 10 Багш: Т.Гантөр
  • 81. НХЖ-аас өгөгдсөн элемэнтийг хайх Хайх утга: 10 head tail curr 100 56 456 42 34 10 Багш: Т.Гантөр
  • 82. НХЖ-аас өгөгдсөн элемэнтийг хайх Хайх утга: 10 head tail curr 100 56 456 42 34 10 Хайсан элемэнт олдсонгүй!!! Багш: Т.Гантөр
  • 83. НХЖ-аас өгөгдсөн элемэнтийг хайх Хайх утга: 56 head curr tail 100 56 456 42 34 56 Багш: Т.Гантөр
  • 84. НХЖ-аас өгөгдсөн элемэнтийг хайх Хайх утга: 56 head curr tail 100 56 456 42 34 56 Хайсан элемэнт олдлоо!!! Багш: Т.Гантөр
  • 85. НХЖ-ын элемэнтийн тоог буцаах int SinglyLinkedList::Count(){ if(IsEmpty()==false){ SLNode *curr=head; int counter=0; while(curr!=NULL){ counter++; curr=curr->next; } return counter; } else return 0; } Багш: Т.Гантөр
  • 86. НХЖ-ын элемэнтийн тоог буцаах Тайлбар: 1. Жагсаалт хоосон эсэхийг шалгана. 2. А. Жагсаалт хоосон бол 0 гэсэн утгыг буцаана. 2. В. Хоосон биш бол туслах туслах заагчийн тусламжтайгаар жагсаалтын эхлэлээс төгсгөл хүртэл элемэнтүүдэд дараалан хандах замаар тоолон, тоог буцаана. Багш: Т.Гантөр
  • 87. НХЖ-ын элемэнтийн тоог буцаах head curr tail 100 56 456 42 34 counter=0 Багш: Т.Гантөр
  • 88. НХЖ-ын элемэнтийн тоог буцаах head curr tail 100 56 456 42 34 Counter= 1 Багш: Т.Гантөр
  • 89. НХЖ-ын элемэнтийн тоог буцаах head curr tail 100 56 456 42 34 Counter= 2 Багш: Т.Гантөр
  • 90. НХЖ-ын элемэнтийн тоог буцаах head curr tail 100 56 456 42 34 Counter= 3 Багш: Т.Гантөр
  • 91. НХЖ-ын элемэнтийн тоог буцаах head curr tail 100 56 456 42 34 Counter= 4 Багш: Т.Гантөр
  • 92. НХЖ-ын элемэнтийн тоог буцаах head curr tail 100 56 456 42 34 Counter= 5 Багш: Т.Гантөр
  • 93. НХЖ-ын элемэнтийн тоог буцаах head tail curr 100 56 456 42 34 Counter=5 Багш: Т.Гантөр
  • 94. НХЖ-ын эхний элемэнтийн утгыг буцаах Data SinglyLinkedList::First () { if (IsEmpty()==true) cout<<"SinglyLinkedList is empty"; return head->element; } Тайлбар: 1. Жагсаалт хоосон эсэхийг шалгана. 2. А. Жагсаалт хоосон бол SinglyLinkedList is empty мэдээллийг хэвлэнэ. 2. В. Хоосон биш бол эхлэлийн заагчийн зааж буй зангилааны элемэнт талбарын утгыг буцаана. Багш: Т.Гантөр
  • 95. НХЖ-ын эхний элемэнтийн утгыг буцаах head tail 100 56 456 42 34 head->element=100 Багш: Т.Гантөр
  • 96. НХЖ-ын төгсгөлийн элемэнтийн утгыг буцаах Data SinglyLinkedList::Last () { if (tail == NULL) cout<<"SinglyLinkedList is empty"; return tail->element; } Тайлбар: 1. Жагсаалт хоосон эсэхийг шалгана. 2. А. Жагсаалт хоосон бол SinglyLinkedList is empty мэдээллийг хэвлэнэ. 2. В. Хоосон биш бол төгсгөлийн заагчийн зааж буй зангилааны элемэнт талбарын утгыг буцаана. Багш: Т.Гантөр
  • 97. НХЖ-ын төгсгөлийн элемэнтийн утгыг буцаах head tail 100 56 456 42 34 tail->element=34 Багш: Т.Гантөр
  • 98. НХЖ-ын эхний элемэнтийг устгах void SinglyLinkedList::DeleteFirst() { if(IsEmpty()==false){ SLNode* curr = head; head=curr->next; delete curr; } else cout<<"SinglyLinkedList is empty"<<endl; } Багш: Т.Гантөр
  • 99. НХЖ-ын эхний элемэнтийг устгах Тайлбар: 1. Жагсаалт хоосон эсэхийг шалгана. 2. А. Жагсаалт хоосон бол SinglyLinkedList is empty мэдээллийг хэвлэнэ. 2. В. Хоосон биш бол дараах алхамуудыг гүйцэтгэнэ. 2. 1. Туслах заагчийг зарлан, түүгээр эхний зангилааг заалгана. 2. 2. Эхлэлийн заагчийг дараагийн буюу хоѐр дахь зангилаанд шилжүүлнэ. 2. 3. Туслах заагчийн зааж буй зангилааг санах ойгоос чөлөөлөх буюу устгана. Багш: Т.Гантөр
  • 100. НХЖ-ын эхний элемэнтийг устгах head curr tail 100 56 456 42 34 Багш: Т.Гантөр
  • 101. НХЖ-ын төгсгөлийн элемэнтийг устгах void SinglyLinkedList::DeleteLast() { if(IsEmpty()==false){ SLNode* prevCurr = NULL; SLNode* curr = head; while (curr!= tail ) { prevCurr = curr; curr = curr->next; } Багш: Т.Гантөр
  • 102. НХЖ-ын төгсгөлийн элемэнтийг устгах if (curr == tail){ prevCurr->next=curr->next; tail = prevCurr; } delete curr; } else cout<<"SinglyLinkedList is empty"<<endl; } Багш: Т.Гантөр
  • 103. НХЖ-ын төгсгөлийн элемэнтийг устгах Тайлбар: 1. Жагсаалт хоосон эсэхийг шалгана. 2. А. Жагсаалт хоосон бол SinglyLinkedList is empty мэдээллийг хэвлэнэ. 2. В. Хоосон биш бол дараах алхамуудыг гүйцэтгэнэ. 2. 1. Туслах заагч/curr/-ийг зарлан, түүгээр эхний зангилааг заалгана. 2. 2. Туслах заагчийн зааж буй зангилааны өмнөх зангилааг заах өөр нэг туслах заагч/prevCurr/-ийг зарлан, түүгээр хоосон/NULL/-ыг заалгана. 2. 3. Туслах заагч/curr/ болон төгсгөлийн заагчууд нэг зангилаа заах хүртэл дээрх заагчийг дараалуулан шилжүүлнэ. Багш: Т.Гантөр
  • 104. НХЖ-ын төгсгөлийн элемэнтийг устгах Тайлбар: 2. 4. Туслах заагч/curr/ болон төгсгөлийн заагчууд нэг зангилаа заах үед prevCurr заагчийн заагч талбараар curr заагчийн заагч талбарын зааж буй утгыг заалгана. 2. 5. Төгсгөлийн заагчийг prevCurr заагчийг зааж буй зангилаанд шилжүүлнэ. 2. 6. curr заагчийн зааж буй зангилааг устгах буюу санах ойгоос чөлөөлнө. Багш: Т.Гантөр
  • 105. НХЖ-ын төгсгөлийн элемэнтийг устгах prevCurr head curr tail 100 56 ... 456 34 Багш: Т.Гантөр
  • 106. НХЖ-ын төгсгөлийн элемэнтийг устгах prevCurr head curr tail 100 56 ... 456 34 Багш: Т.Гантөр
  • 107. НХЖ-ын төгсгөлийн элемэнтийг устгах prevCurr head curr tail 100 56 ... 456 34 Багш: Т.Гантөр
  • 108. НХЖ-ын төгсгөлийн элемэнтийг устгах prevCurr head curr tail 100 56 ... 456 34 Багш: Т.Гантөр
  • 109. НХЖ-ын төгсгөлийн элемэнтийг устгах prevCurr head currtail 100 56 ... 456 34 Багш: Т.Гантөр
  • 110. НХЖ-ын төгсгөлийн элемэнтийг устгах prevCurr head tail curr 100 56 ... 456 34 Багш: Т.Гантөр
  • 111. НХЖ-ын өгөгдсөн элемэнтийн өмнөх элемэнтийг устгах void SinglyLinkedList::DeleteBefore(Data key) { if(IsEmpty()==false){ SLNode *prevCurr = NULL; SLNode *curr = NULL; SLNode *nextCurr=head; while(nextCurr!=NULL && nextCurr->element!=key) { prevCurr = curr; curr=nextCurr; nextCurr = nextCurr->next; } if (nextCurr == NULL) cout<<"key element oldsongui"<<endl; Багш: Т.Гантөр
  • 112. НХЖ-ын өгөгдсөн элемэнтийн өмнөх элемэнтийг устгах if (nextCurr == head) cout<<"key elementiin umnu element bhgui bna"<<endl; else if (nextCurr->element == key){ if(curr==head) head=nextCurr; else prevCurr->next=nextCurr; delete curr; } } else cout<<"SinglyLinkedList is empty"<<endl; } Багш: Т.Гантөр
  • 113. НХЖ-ын өгөгдсөн элемэнтийн өмнөх элемэнтийг устгах Тайлбар: 1. Жагсаалт хоосон эсэхийг шалгана. 2. А. Жагсаалт хоосон бол SinglyLinkedList is empty мэдээллийг хэвлэнэ. 2. В. Хоосон биш бол дараах алхамуудыг гүйцэтгэнэ. 2. 1. Өгөгдсөн элемэнтийг хайна. Үүний тулд гурван туслах заагчийг ашиглана. • curr – устгах зангилааг заалгана. • prevCurr – устгах элемэнтийн өмнөх зангилааг заалгана. • nextCurr – өгөгдсөн элемэнт буюу устгах элемэнтийн дараагийн зангилааг заалгана. Багш: Т.Гантөр
  • 114. НХЖ-ын өгөгдсөн элемэнтийн өмнөх элемэнтийг устгах Тайлбар: 2. 2. Хайлт зогссон үед хэрвээ nextCurr заагч NULL утгыг зааж байвал өгөгдсөн элемэнт жагсаалтад байхгүй байна. 2. 3. Хайлт зогссон үед хэрвээ nextCurr болон эхлэлийн заагчуудын зааж буй утга адил үед эхний элемэнтийн өмнө зангилаа байхгүй тул үйлдэл гүйцэтгэх боломжгүй. Багш: Т.Гантөр
  • 115. НХЖ-ын өгөгдсөн элемэнтийн өмнөх элемэнтийг устгах Тайлбар: 2. 3. Хайлт зогссон үед хэрвээ nextCurr заагчийн element талбарын утга өгөгдсөн элемэнттэй тэнцүү буюу хайсан зангилаа олдсон бол: 2. 3. 1. Хэрвээ curr болон head заагчуудын зааж буй зангилаа нь адил үед эхлэлийн заагчийг дараагийн элемэнтэд шилжүүлнэ. 2. 3. 2. Хэрвээ curr болон head заагчуудын зааж буй зангилаа нь адил биш үед prevCurr заагчийн зааж буй зангилааны заагч талбараар nextCurr заагчийн зааж буй зангилааг заалгана. 2. 4. curr заагчийн зааж буй зангилааг санах ойгоос чөлөөлөх буюу устгана. Багш: Т.Гантөр
  • 116. НХЖ-ын өгөгдсөн элемэнтийн өмнөх элемэнтийг устгах prevCurr curr nextCurr head tail 100 56 456 42 34 Багш: Т.Гантөр
  • 117. НХЖ-ын өгөгдсөн элемэнтийн өмнөх элемэнтийг устгах prevCurr curr Өгөгдсөн элемэнт: 100 nextCurr head tail 100 56 456 42 34 Багш: Т.Гантөр
  • 118. НХЖ-ын өгөгдсөн элемэнтийн өмнөх элемэнтийг устгах prevCurr curr Өгөгдсөн элемэнт: 456 nextCurr head tail 100 56 456 42 34 Багш: Т.Гантөр
  • 119. НХЖ-ын өгөгдсөн элемэнтийн өмнөх элемэнтийг устгах prevCurr nextCurr head curr tail 100 56 456 42 34 Багш: Т.Гантөр
  • 120. НХЖ-ын өгөгдсөн элемэнтийн ардах элемэнтийг устгах void SinglyLinkedList::DeleteAfter(Data key) { if(IsEmpty()==false){ SLNode *prevCurr = NULL; SLNode *curr = head; while (curr!= NULL && prevCurr->element!=key) { prevCurr = curr; curr=curr->next; } if (curr == NULL) cout<<"key element oldsongui"<<endl; Багш: Т.Гантөр
  • 121. НХЖ-ын өгөгдсөн элемэнтийн ардах элемэнтийг устгах if (prevCurr == tail) cout<<"key elementiin hoino element bhgui bna"<<endl; else if (prevCurr->element == key){ prevCurr->next=curr->next; delete curr; } } else cout<<"SinglyLinkedList is empty"<<endl; } Багш: Т.Гантөр
  • 122. НХЖ-ын өгөгдсөн элемэнтийн ардах элемэнтийг устгах Тайлбар: 1. Жагсаалт хоосон эсэхийг шалгана. 2. А. Жагсаалт хоосон бол SinglyLinkedList is empty мэдээллийг хэвлэнэ. 2. В. Хоосон биш бол дараах алхамуудыг гүйцэтгэнэ. 2. 1. Өгөгдсөн элемэнтийг хайна. Үүний тулд хоѐр туслах заагчийг ашиглана. • curr – устгах зангилааг заалгана. • prevCurr – устгах элемэнтийн өмнөх зангилааг заалгана. Багш: Т.Гантөр
  • 123. НХЖ-ын өгөгдсөн элемэнтийн ардах элемэнтийг устгах Тайлбар: 2. 2. Хайлт зогссон үед хэрвээ curr заагч NULL утгыг зааж байвал өгөгдсөн элемэнт жагсаалтад байхгүй байна. 2. 3. Хайлт зогссон үед хэрвээ prevCurr болон төгсгөлийн заагчуудын зааж буй зангилаа нь адил бол төгсгөлийн элемэнтийн ард зангилаа байхгүй тул үйлдэл гүйцэтгэх боломжгүй. Багш: Т.Гантөр
  • 124. НХЖ-ын өгөгдсөн элемэнтийн ардах элемэнтийг устгах Тайлбар: 2. 3. Хайлт зогссон үед хэрвээ prevCurr заагчийн зааж буй зангилааны element талбарын утга өгөгдсөн элемэнттэй тэнцүү буюу хайсан зангилаа олдсон бол prevCurr заагчийн зааж буй зангилааны заагч талбараар curr заагчийн зааж буй зангилааг заалгана. 2. 4. curr заагчийн зааж буй зангилааг санах ойгоос чөлөөлөх буюу устгана. Багш: Т.Гантөр
  • 125. НХЖ-ын өгөгдсөн элемэнтийн ардах элемэнтийг устгах prevCurr head curr tail 100 56 456 42 34 Багш: Т.Гантөр
  • 126. НХЖ-ын өгөгдсөн элемэнтийн ардах элемэнтийг устгах prevCurr Өгөгдсөн элемэнт: 42 head curr tail 100 56 456 42 34 Багш: Т.Гантөр
  • 127. НХЖ-ын өгөгдсөн элемэнтийн ардах элемэнтийг устгах Өгөгдсөн элемэнт: 42 prevCurr head curr tail 100 56 456 42 34 Багш: Т.Гантөр
  • 128. НХЖ-ын өгөгдсөн элемэнтийн ардах элемэнтийг устгах Өгөгдсөн элемэнт: 42 prevCurr head curr tail 100 56 456 42 34 Багш: Т.Гантөр
  • 129. НХЖ-ын өгөгдсөн элемэнтийн ардах элемэнтийг устгах Өгөгдсөн элемэнт: 42 prevCurr head curr tail 100 56 456 42 34 Багш: Т.Гантөр
  • 130. НХЖ-ын өгөгдсөн элемэнтийн ардах элемэнтийг устгах Өгөгдсөн элемэнт: 42 prevCurr head tail curr 100 56 456 42 34 Багш: Т.Гантөр
  • 131. НХЖ-ын өгөгдсөн элемэнтийн ардах элемэнтийг устгах prevCurr Өгөгдсөн элемэнт: 56 head curr tail 100 56 456 42 34 Багш: Т.Гантөр
  • 132. НХЖ-ын өгөгдсөн элемэнтийн ардах элемэнтийг устгах Өгөгдсөн элемэнт: 56 prevCurr head curr tail 100 56 456 42 34 Багш: Т.Гантөр
  • 133. НХЖ-ын өгөгдсөн элемэнтийн ардах элемэнтийг устгах Өгөгдсөн элемэнт: 56 prevCurr head curr tail 100 56 456 42 34 Багш: Т.Гантөр
  • 134. НХЖ-ын өгөгдсөн элемэнтийг устгах void SinglyLinkedList::DeleteItem(Data key) { if(IsEmpty()==false){ SLNode *prevCurr = NULL; SLNode *curr = head; while (curr != NULL && curr->element != key) { prevCurr = curr; curr=curr->next; } if (curr == NULL) cout<<"key element oldsongui"<<endl; if (curr == tail) tail=prevCurr; Багш: Т.Гантөр
  • 135. НХЖ-ын өгөгдсөн элемэнтийг устгах if(curr==head) head=prevCurr; if (curr->element == key){ prevCurr->next=curr->next; delete curr; } } else cout<<"SinglyLinkedList is empty"<<endl; } Багш: Т.Гантөр
  • 136. НХЖ-ын өгөгдсөн элемэнтийг устгах Тайлбар: 1. Жагсаалт хоосон эсэхийг шалгана. 2. А. Жагсаалт хоосон бол SinglyLinkedList is empty мэдээллийг хэвлэнэ. 2. В. Хоосон биш бол дараах алхамуудыг гүйцэтгэнэ. 2. 1. Өгөгдсөн элемэнтийг хайна. Үүний тулд хоѐр туслах заагчийг ашиглана. • curr – устгах зангилааг заалгана. • prevCurr – устгах элемэнтийн өмнөх зангилааг заалгана. Багш: Т.Гантөр
  • 137. НХЖ-ын өгөгдсөн элемэнтийг устгах Тайлбар: 2. 2. Хайлт зогссон үед хэрвээ curr заагч NULL утгыг зааж байвал өгөгдсөн элемэнт жагсаалтад байхгүй байна. 2. 3. Хайлт зогссон үед хэрвээ curr болон эхлэлийн заагчуудын зааж буй зангилаа нь адил бол эхлэлийн заагчийг дараагийн элемэнтэд шилжүүлнэ. 2. 4. Хайлт зогссон үед хэрвээ curr болон төгсгөлийн заагчуудын зааж буй зангилаа нь адил бол төгсгөлийн заагчийг өмнөх элемэнтэд шилжүүлнэ. Багш: Т.Гантөр
  • 138. НХЖ-ын өгөгдсөн элемэнтийг устгах Тайлбар: 2. 4. Хайлт зогссон үед хэрвээ curr заагчийн зааж буй зангилааны element талбарын утга өгөгдсөн элемэнттэй тэнцүү буюу хайсан зангилаа олдсон бол prevCurr заагчийн зааж буй зангилааны заагч талбараар curr заагчийн зааж буй зангилааг заалгана. 2. 5. curr заагчийн зааж буй зангилааг санах ойгоос чөлөөлөх буюу устгана. Багш: Т.Гантөр
  • 139. НХЖ-ын өгөгдсөн байрлал дахь элемэнтийг устгах void SinglyLinkedList::DeletePosition(int pos) { if(IsEmpty()==false){ int i=1; SLNode *prevCurr = NULL; SLNode *curr = head; while (curr != NULL && i!= pos) { prevCurr = curr; curr=curr->next; i++; } if (curr == NULL) cout<<"bairlal oldsongui"<<endl; Багш: Т.Гантөр
  • 140. НХЖ-ын өгөгдсөн байрлал дахь элемэнтийг устгах if (i == pos){ if(curr==head) head=curr->next; else prevCurr->next=curr->next; if(curr==tail) tail=prevCurr; delete curr; } } else cout<<"SinglyLinkedList is empty"<<endl; } Багш: Т.Гантөр
  • 141. НХЖ-ын өгөгдсөн байрлал дахь элемэнтийг устгах Тайлбар: 1. Жагсаалт хоосон эсэхийг шалгана. 2. А. Жагсаалт хоосон бол SinglyLinkedList is empty мэдээллийг хэвлэнэ. 2. В. Хоосон биш бол дараах алхамуудыг гүйцэтгэнэ. 2. 1. Өгөгдсөн элемэнтийг хайна. Үүний тулд хоѐр туслах заагч, нэг хувьсагч ашиглана. • curr – устгах зангилааг заалгана. • prevCurr – устгах элемэнтийн өмнөх зангилааг заалгана. • i – элемэнтүүдийн байрлалыг тодорхойлох тоолуур Багш: Т.Гантөр
  • 142. НХЖ-ын өгөгдсөн байрлал дахь элемэнтийг устгах Тайлбар: 2. 2. Хайлт зогссон үед хэрвээ curr заагч NULL утгыг зааж байвал жагсаалтад өгөгдсөн байрлал байхгүй байна. 2. 3. Хайлт зогссон үед хэрвээ тоолуур хувьсагчийн утга өгөгдсөн байрлалтай тэнцүү үед: 2. 3. 1. хэрвээ curr болон эхлэлийн заагчуудын зааж буй зангилаа нь адил бол эхлэлийн заагчийг дараагийн элемэнтэд шилжүүлнэ. 2. 3. 2. хэрвээ curr болон төгсгөлийн заагчуудын зааж буй зангилаа нь адил бол төгсгөлийн заагчийг өмнөх элемэнтэд шилжүүлнэ. Багш: Т.Гантөр
  • 143. НХЖ-ын өгөгдсөн байрлал дахь элемэнтийг устгах Тайлбар: 2. 3. 3. дээрх хоѐр нөхцлийн аль нь ч биш тохиодолд prevCurr заагчийн зааж буй зангилааны заагч талбараар curr заагчийн зааж буй зангилааг заалгана. 2. 4. curr заагчийн зааж буй зангилааг санах ойгоос чөлөөлөх буюу устгана. Багш: Т.Гантөр