Хоёр холбоост жагсаалт        Лекц №9                   LOGO
Хичээлийн агуулгаБагш: В.Нямсүрэн
Нэг холбоост ба циклжагсаалтын бэрхшээл Нэг холбоост ба цикл жагсаалтуудын хувьд  буцаж   өмнөх     элемэнтүүдрүүгээ дамж...
Хоёр холбоост жагсаалт Жагсаалтын зангилаануудыг хоѐр чиглэлд  холбогддог байхаар зохион байгуулж болно. Зангилаа бүр нь...
Хоёр холбоост жагсаалт Хоѐр холбоост жагсаалтын эхний элемэнтэд  өмнөх элемэнт, төгсгөлийн элемэнтэд дараагийн  элемэнт г...
Хоёр холбоостжагсаалтын зангилаа Хоѐр холбоост жагсаалтын зангилаа нь гурван  хэсгээс бүрдэнэ.                   back – ө...
Хоёр холбоост жагсаалтынзангилааг илэрхийлэх: Хоѐр холбоост жагсаалтын зангилааг    дараах  DLNode классаар тодорхойлъѐcl...
Хоёр холбоост жагсаалтыгзохион байгуулах Хоѐр холбоост жагсаалтыг зохион байгуулахдаа  дараах гадаад заагчуудыг ашиглана....
Нэг холбоост жагсаалтадхийгдэх үйлдлүүд Дараах үйлдлүүдийг хоѐр чиглэлд гүйцэтгэх  боломжтой. /Ө.х эхлэлээс төгсгөлрүү эс...
ХХЖ-ыг илэрхийлэххийсвэр төрлийг тодорхойлохclass DoubleLinkedList{   DLNode *head;   DLNode *tail;public:   DoubleLinkedL...
ХХЖ-ыг илэрхийлэххийсвэр төрлийг тодорхойлох      void AddPosition( int pos, Data item);      void RemoveFirst();      voi...
ХХЖ-ыг үүсгэхбайгуулагч функц:DoubleLinkedList::DoubleLinkedList(){      head=tail=NULL;}Тайлбар:DoubleLinkedList DList;//...
ХХЖ-ыг санах ойгоосчөлөөлөх устгагч функц:DoubleLinkedList::~DoubleLinkedList(){    MakeEmpty();}Багш: В.Нямсүрэн
ХХЖ-ыг хоослохvoid DoubleLinkedList::MakeEmpty(){   DLNode *curr=NULL;   while (tail!=NULL)   {     if(tail==head) head=he...
ХХЖ-ыг хоослох                      curr           head                   tail               100   56      34     456Багш:...
ХХЖ-ыг хоослох                      curr          head                    tail               100   56      34     456Багш:...
ХХЖ-ыг хоослох          head            tail    curr               100   56      34Багш: В.Нямсүрэн
ХХЖ-ыг хоослох          head       tail    curr               100      56Багш: В.Нямсүрэн
ХХЖ-ыг хоослох           tail          head       curr               100Багш: В.Нямсүрэн
ХХЖ-ыг хоослох tailhead         currБагш: В.Нямсүрэн
ХХЖ-ын эхэндэлемэнт нэмэхvoid DoubleLinkedList::AddFirst(Data item){  DLNode *curr=new DLNode(item, NULL, head);     if(Is...
ХХЖ-ын эхэндэлемэнт нэмэх                   curr    head   tail                   100         curr             head       ...
ХХЖ-ын өгөгдсөн элемэнтийнөмнө элемэнт нэмж оруулахvoid DoubleLinkedList::AddBefore(Data key,Data item){     DLNode *prevC...
ХХЖ-ын өгөгдсөн элемэнтийнөмнө элемэнт нэмж оруулах       if(nextCurr==head){            DLNode* curr = new               ...
ХХЖ-ын эхэнд  элемэнт нэмэхprevCurr                 Өгөгдсөн элемэнт:     40                         Шинэ элемэнт:        ...
ХХЖ-ын эхэнд  элемэнт нэмэх                               Өгөгдсөн элемэнт:     40                               Шинэ элем...
ХХЖ-ын эхэндэлемэнт нэмэх                        curr    Өгөгдсөн элемэнт:     40                                Шинэ элем...
ХХЖ-ын төгсгөлийнэлемэнтийг устгахvoid DoubleLinkedList::RemoveLast(){    if(!IsEmpty()){         DLNode* curr = tail;    ...
Upcoming SlideShare
Loading in …5
×

Dsi lec9-copy

1,600 views
1,436 views

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,600
On SlideShare
0
From Embeds
0
Number of Embeds
680
Actions
Shares
0
Downloads
0
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Dsi lec9-copy

  1. 1. Хоёр холбоост жагсаалт Лекц №9 LOGO
  2. 2. Хичээлийн агуулгаБагш: В.Нямсүрэн
  3. 3. Нэг холбоост ба циклжагсаалтын бэрхшээл Нэг холбоост ба цикл жагсаалтуудын хувьд буцаж өмнөх элемэнтүүдрүүгээ дамжих боломжгүй байдаг. Хэрвээ одоогийн идэвхитэй элемэнтийн яг өмнөх элемэнтрүү хандахын тулд заавал эхний элемэнтээс/гадаад заагч байрлаж буй элемэнтээс эхлэн элемэнт бүрт дараалан хандаж байж тухайн элемэнтэд очно.Багш: В.Нямсүрэн
  4. 4. Хоёр холбоост жагсаалт Жагсаалтын зангилаануудыг хоѐр чиглэлд холбогддог байхаар зохион байгуулж болно. Зангилаа бүр нь өмнө болон хойно орших зангилааныхаа хаягийг агуулдаг элемэнтүүдийн тогтоцыг хоёр холбоост жагсаалт /ХХЖ/ буюу давхар жагсаалт гэнэ. 100 56 34 456 Хоѐр холбоост жагсаалт нь хэдийгээр жагсаалтын дурын элемэнтэд хандах боломжгүй хэдий ч хоѐр чиглэлтэй учир хийгдэх үйлдлүүдийн хувьд илүү уян хатан юм.Багш: В.Нямсүрэн
  5. 5. Хоёр холбоост жагсаалт Хоѐр холбоост жагсаалтын эхний элемэнтэд өмнөх элемэнт, төгсгөлийн элемэнтэд дараагийн элемэнт гэж байхгүй учраас тэдгээр зангилааны харгалзах заагч талбарууд нь хоосон буюу NULL утгыг заавал агуулсан байх ѐстой. 100 56 34 456Багш: В.Нямсүрэн
  6. 6. Хоёр холбоостжагсаалтын зангилаа Хоѐр холбоост жагсаалтын зангилаа нь гурван хэсгээс бүрдэнэ. back – өмнөх элемэнтийн санах ойн үүрний хаягийг агуулах заагч талбар 456 info – өгөгдөл буюу мэдээллийг агуулах талбар next – дараагийн элемэнтийн санах ойн үүрний хаягийг агуулах заагч талбарБагш: В.Нямсүрэн
  7. 7. Хоёр холбоост жагсаалтынзангилааг илэрхийлэх: Хоѐр холбоост жагсаалтын зангилааг дараах DLNode классаар тодорхойлъѐclass DLNode{ Data info; DLNode* prev; DLNode* next; DLNode(Data ivalue, DLNode*pvalue, DLNode* nvalue) { info=ivalue; prev=pvalue; next=nvalue; } friend class DoubleLinkedList;};Багш: В.Нямсүрэн
  8. 8. Хоёр холбоост жагсаалтыгзохион байгуулах Хоѐр холбоост жагсаалтыг зохион байгуулахдаа дараах гадаад заагчуудыг ашиглана.  хуй head – эхлэлийн заагч tail – төгсгөлийн заагч curr – туслах заагчБагш: В.Нямсүрэн
  9. 9. Нэг холбоост жагсаалтадхийгдэх үйлдлүүд Дараах үйлдлүүдийг хоѐр чиглэлд гүйцэтгэх боломжтой. /Ө.х эхлэлээс төгсгөлрүү эсвэл төгсгөлөөс эхлэлрүү/ХХЖ-ыг хоослох – MakeEmpty()ХХЖ-аас элемэнт хайх – FindItem()ХХЖ-ын элемэнтийн тоог буцаах – Count()ХХЖ-ын элемэнтүүдийг хэвлэх – Print()Багш: В.Нямсүрэн
  10. 10. ХХЖ-ыг илэрхийлэххийсвэр төрлийг тодорхойлохclass DoubleLinkedList{ DLNode *head; DLNode *tail;public: DoubleLinkedList (); ~DoubleLinkedList (); bool IsEmpty(); void MakeEmpty(); Data First(); Data Last(); void AddFirst(Data item); void AddLast (Data item); void AddAfter(Data key, Data item); void AddBefore(Data key, Data item);Багш: В.Нямсүрэн
  11. 11. ХХЖ-ыг илэрхийлэххийсвэр төрлийг тодорхойлох void AddPosition( int pos, Data item); void RemoveFirst(); void RemoveLast (); void RemoveItem(Data key); void RemoveBefore(Data key); void RemoveAfter(Data key); void RemovePosition(int key); bool FindForward(); bool FindBackward(); int CountForward(); int CountBackward(); void PrintForward(); void PrintBackward();};Багш: В.Нямсүрэн
  12. 12. ХХЖ-ыг үүсгэхбайгуулагч функц:DoubleLinkedList::DoubleLinkedList(){ head=tail=NULL;}Тайлбар:DoubleLinkedList DList;// DList нэртэй хоѐр холбоост жагсаалт үүсгэжбайна. head tailБагш: В.Нямсүрэн
  13. 13. ХХЖ-ыг санах ойгоосчөлөөлөх устгагч функц:DoubleLinkedList::~DoubleLinkedList(){ MakeEmpty();}Багш: В.Нямсүрэн
  14. 14. ХХЖ-ыг хоослохvoid DoubleLinkedList::MakeEmpty(){ DLNode *curr=NULL; while (tail!=NULL) { if(tail==head) head=head->prev; curr = tail; tail = tail->prev; delete curr; } tail = NULL;}Багш: В.Нямсүрэн
  15. 15. ХХЖ-ыг хоослох curr head tail 100 56 34 456Багш: В.Нямсүрэн
  16. 16. ХХЖ-ыг хоослох curr head tail 100 56 34 456Багш: В.Нямсүрэн
  17. 17. ХХЖ-ыг хоослох head tail curr 100 56 34Багш: В.Нямсүрэн
  18. 18. ХХЖ-ыг хоослох head tail curr 100 56Багш: В.Нямсүрэн
  19. 19. ХХЖ-ыг хоослох tail head curr 100Багш: В.Нямсүрэн
  20. 20. ХХЖ-ыг хоослох tailhead currБагш: В.Нямсүрэн
  21. 21. ХХЖ-ын эхэндэлемэнт нэмэхvoid DoubleLinkedList::AddFirst(Data item){ DLNode *curr=new DLNode(item, NULL, head); if(IsEmpty()) tail = curr; else head->prev = curr; head = curr;}Багш: В.Нямсүрэн
  22. 22. ХХЖ-ын эхэндэлемэнт нэмэх curr head tail 100 curr head tail 100 56 ... 456Багш: В.Нямсүрэн
  23. 23. ХХЖ-ын өгөгдсөн элемэнтийнөмнө элемэнт нэмж оруулахvoid DoubleLinkedList::AddBefore(Data key,Data item){ DLNode *prevCurr = NULL; DLNode *nextCurr=head; while(nextCurr->info != key){ prevCurr = nextCurr; nextCurr=nextCurr->next; if(nextCurr == NULL) cout<<"element oldsongui"; }Багш: В.Нямсүрэн
  24. 24. ХХЖ-ын өгөгдсөн элемэнтийнөмнө элемэнт нэмж оруулах if(nextCurr==head){ DLNode* curr = new DLNode(item,NULL,nextCurr); nextCurr->prev = curr; head = curr; } else{ DLNode* curr = new DLNode(item,prevCurr,nextCurr); prevCurr->next = curr; nextCurr->prev=curr; }}Багш: В.Нямсүрэн
  25. 25. ХХЖ-ын эхэнд элемэнт нэмэхprevCurr Өгөгдсөн элемэнт: 40 Шинэ элемэнт: 100nextCurr head tail 56 36 40 12 456 Багш: В.Нямсүрэн
  26. 26. ХХЖ-ын эхэнд элемэнт нэмэх Өгөгдсөн элемэнт: 40 Шинэ элемэнт: 100prevCurr nextCurr head tail 56 36 40 12 456 Багш: В.Нямсүрэн
  27. 27. ХХЖ-ын эхэндэлемэнт нэмэх curr Өгөгдсөн элемэнт: 40 Шинэ элемэнт: 100 100 prevCurr nextCurr head tail 56 36 40 12 456Багш: В.Нямсүрэн
  28. 28. ХХЖ-ын төгсгөлийнэлемэнтийг устгахvoid DoubleLinkedList::RemoveLast(){ if(!IsEmpty()){ DLNode* curr = tail; if(head->next == NULL) head = NULL; else{ tail->prev->next = NULL; tail = tail->prev; } delete curr; } else cout<<"DoubleLinkedList is empty";}Багш: В.Нямсүрэн

×