• Save
Dsi lec9-copy
Upcoming SlideShare
Loading in...5
×
 

Dsi lec9-copy

on

  • 1,081 views

 

Statistics

Views

Total Views
1,081
Views on SlideShare
753
Embed Views
328

Actions

Likes
0
Downloads
0
Comments
0

3 Embeds 328

http://ubuse08.blogspot.com 168
http://ubused-datastructure.blogspot.com 159
http://www.ubuse08.blogspot.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Dsi lec9-copy Dsi lec9-copy Presentation Transcript

    • Хоёр холбоост жагсаалт Лекц №9 LOGO
    • Хичээлийн агуулгаБагш: В.Нямсүрэн
    • Нэг холбоост ба циклжагсаалтын бэрхшээл Нэг холбоост ба цикл жагсаалтуудын хувьд буцаж өмнөх элемэнтүүдрүүгээ дамжих боломжгүй байдаг. Хэрвээ одоогийн идэвхитэй элемэнтийн яг өмнөх элемэнтрүү хандахын тулд заавал эхний элемэнтээс/гадаад заагч байрлаж буй элемэнтээс эхлэн элемэнт бүрт дараалан хандаж байж тухайн элемэнтэд очно.Багш: В.Нямсүрэн
    • Хоёр холбоост жагсаалт Жагсаалтын зангилаануудыг хоѐр чиглэлд холбогддог байхаар зохион байгуулж болно. Зангилаа бүр нь өмнө болон хойно орших зангилааныхаа хаягийг агуулдаг элемэнтүүдийн тогтоцыг хоёр холбоост жагсаалт /ХХЖ/ буюу давхар жагсаалт гэнэ. 100 56 34 456 Хоѐр холбоост жагсаалт нь хэдийгээр жагсаалтын дурын элемэнтэд хандах боломжгүй хэдий ч хоѐр чиглэлтэй учир хийгдэх үйлдлүүдийн хувьд илүү уян хатан юм.Багш: В.Нямсүрэн
    • Хоёр холбоост жагсаалт Хоѐр холбоост жагсаалтын эхний элемэнтэд өмнөх элемэнт, төгсгөлийн элемэнтэд дараагийн элемэнт гэж байхгүй учраас тэдгээр зангилааны харгалзах заагч талбарууд нь хоосон буюу NULL утгыг заавал агуулсан байх ѐстой. 100 56 34 456Багш: В.Нямсүрэн
    • Хоёр холбоостжагсаалтын зангилаа Хоѐр холбоост жагсаалтын зангилаа нь гурван хэсгээс бүрдэнэ. back – өмнөх элемэнтийн санах ойн үүрний хаягийг агуулах заагч талбар 456 info – өгөгдөл буюу мэдээллийг агуулах талбар next – дараагийн элемэнтийн санах ойн үүрний хаягийг агуулах заагч талбарБагш: В.Нямсүрэн
    • Хоёр холбоост жагсаалтынзангилааг илэрхийлэх: Хоѐр холбоост жагсаалтын зангилааг дараах 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;};Багш: В.Нямсүрэн
    • Хоёр холбоост жагсаалтыгзохион байгуулах Хоѐр холбоост жагсаалтыг зохион байгуулахдаа дараах гадаад заагчуудыг ашиглана.  хуй head – эхлэлийн заагч tail – төгсгөлийн заагч curr – туслах заагчБагш: В.Нямсүрэн
    • Нэг холбоост жагсаалтадхийгдэх үйлдлүүд Дараах үйлдлүүдийг хоѐр чиглэлд гүйцэтгэх боломжтой. /Ө.х эхлэлээс төгсгөлрүү эсвэл төгсгөлөөс эхлэлрүү/ХХЖ-ыг хоослох – MakeEmpty()ХХЖ-аас элемэнт хайх – FindItem()ХХЖ-ын элемэнтийн тоог буцаах – Count()ХХЖ-ын элемэнтүүдийг хэвлэх – Print()Багш: В.Нямсүрэн
    • ХХЖ-ыг илэрхийлэххийсвэр төрлийг тодорхойлох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);Багш: В.Нямсүрэн
    • ХХЖ-ыг илэрхийлэххийсвэр төрлийг тодорхойлох 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();};Багш: В.Нямсүрэн
    • ХХЖ-ыг үүсгэхбайгуулагч функц:DoubleLinkedList::DoubleLinkedList(){ head=tail=NULL;}Тайлбар:DoubleLinkedList DList;// DList нэртэй хоѐр холбоост жагсаалт үүсгэжбайна. head tailБагш: В.Нямсүрэн
    • ХХЖ-ыг санах ойгоосчөлөөлөх устгагч функц:DoubleLinkedList::~DoubleLinkedList(){ MakeEmpty();}Багш: В.Нямсүрэн
    • ХХЖ-ыг хоослохvoid DoubleLinkedList::MakeEmpty(){ DLNode *curr=NULL; while (tail!=NULL) { if(tail==head) head=head->prev; curr = tail; tail = tail->prev; delete curr; } tail = NULL;}Багш: В.Нямсүрэн
    • ХХЖ-ыг хоослох 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(IsEmpty()) tail = curr; else head->prev = curr; head = curr;}Багш: В.Нямсүрэн
    • ХХЖ-ын эхэндэлемэнт нэмэх curr head tail 100 curr head tail 100 56 ... 456Багш: В.Нямсүрэн
    • ХХЖ-ын өгөгдсөн элемэнтийнөмнө элемэнт нэмж оруулах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"; }Багш: В.Нямсүрэн
    • ХХЖ-ын өгөгдсөн элемэнтийнөмнө элемэнт нэмж оруулах 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; }}Багш: В.Нямсүрэн
    • ХХЖ-ын эхэнд элемэнт нэмэхprevCurr Өгөгдсөн элемэнт: 40 Шинэ элемэнт: 100nextCurr head tail 56 36 40 12 456 Багш: В.Нямсүрэн
    • ХХЖ-ын эхэнд элемэнт нэмэх Өгөгдсөн элемэнт: 40 Шинэ элемэнт: 100prevCurr nextCurr head tail 56 36 40 12 456 Багш: В.Нямсүрэн
    • ХХЖ-ын эхэндэлемэнт нэмэх curr Өгөгдсөн элемэнт: 40 Шинэ элемэнт: 100 100 prevCurr nextCurr head tail 56 36 40 12 456Багш: В.Нямсүрэн
    • ХХЖ-ын төгсгөлийнэлемэнтийг устгах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";}Багш: В.Нямсүрэн