SlideShare a Scribd company logo
1 of 53
LOGO
Лекц №8
Цикл жагсаалт
Хичээлийн агуулга
Нэг холбоост
жагсаалтын бэрхшээл
 Нэг холбоост жагсаалтын зангилаа бүр нь
өмнөх(сүүлчийн элемэнтээс бусад нь) болон
дараагийн(эхний элемэнтээс бусад нь)
зангилаатай байдаг.
 Тиймээс нэг холбоост жагсаалтад нэг бэрхшээл
байдаг: Нэг холбоост жагсаалтын аль нэг
зангилаанаас түүний дараагийн бүх зангилаанд
хандаж болох боловч түүний өмнө орших нэг ч
зангилааруу хандаж чадахгүй.
 Аливаа зангилаанд хандахын тулд жагсаалтын
эхлэлийн заагчийг ашиглан эхнээс нь дараалан
хандана.
Цикл жагсаалт
 Нэг холбоост жагсаалтын сүүлчийн элемэнтийн
заагч талбар нь NULL утгыг агуулахын оронд
буцаад эхний элемэнтийг зааж байхаар өөрчлөн
зохион байгуулж болно.
 Ингэснээр нэг холбоост жагсаалтаас давуу
талтай цикл жагсаалт гэсэн бүтцийг бий болгоно.
 Зангилаа бүр нь дараагийн зангилаатай байх
жагсаалтыг цикл жагсаалт /ЦЖ/ гэнэ.
100 56 34 456
 Цикл холбоост жагсаалтын зангилааг дараах
CLNode классаар тодорхойлъё
class CLNode
{
Data element;
CLNode *next;
CLNode(Data evalue, CLNode *nvalue){
element=evalue;
next=nvalue;
}
friend class CircularLinkedList;
};
Цикл холбоост жагсаалтын
зангилааг илэрхийлэх:
 Цикл жагсаалтын аль ч зангилаанаас эхэлсэн
тухайн жагсаалтын бүх элемэнтээр дамжих
боломжтой.
 Гадаад заагчаар эхний элемэнтийг заалгаснаас
сүүлчийн элемэнтийг заалгасан нь давуу талтай.
Ингэснээр эхний болон сүүлчийн хоёр элемэнтэд
аль нь ч шууд хандах боломжтой.
Цикл жагсаалтыг
зохион байгуулах
100 56 34 456
ЦЖ-ыг хоосон эсэхийг шалгах – IsEmpty()
ЦЖ-ыг хоослох – MakeEmpty()
ЦЖ-д элемэнт нэмэх - InsertItem()
ЦЖ-аас элемэнт устгах - DeleteItem()
ЦЖ-аас элемэнт хайх – FindItem()
Жагсаалтын элемэнтүүдийг хэвлэх – Print()
Нэг холбоост жагсаалтад
хийгдэх үйлдлүүд
class CircularLinkedList
{
CLNode *listData;
public:
CircularLinkedList ();
~CircularLinkedList ();
bool IsEmpty() ;
void MakeEmpty();
void InsertItem (Data item);
bool FindItem(Data key);
void DeleteItem(Data item);
void Print();
};
ЦЖ-ыг илэрхийлэх
хийсвэр төрлийг тодорхойлох
CircularLinkedList::CircularLinkedList()
{
listData= NULL;
}
Тайлбар:
CircularLinkedList CList;
// CList нэртэй цикл жагсаалт үүсгэж байна.
ЦЖ-ыг үүсгэх
байгуулагч функц:
listData
CircularLinkedList::~CircularLinkedList(){
MakeEmpty();
}
ЦЖ-ыг санах ойгоос
чөлөөлөх устгагч функц:
void CircularLinkedList::MakeEmpty(){
CLNode *location=listData;
while (listData->next != listData){
location = listData->next;
listData->next=location->next;
delete location;
}
if(listData->next==listData){
location=listData;
listData=NULL;
delete location;
}
}
ЦЖ-ыг хоослох
Тайлбар:
 Устгагч функц нь MakeEmpty() функцийг
дуудна.
 MakeEmpty() функц нь үүсгэсэн цикл
жагсаалтын элемэнтүүдийг санах ойгоос чөлөөлөх
буюу цикл жагсаалтыг хоослоно.
 MakeEmpty() функц нь туслах заагч/location/-
ийг ашиглан эхлэлийн элемэнтээс эхлэн
элемэнтүүдийг нэг нэгээр санах ойгоос чөлөөлнө.
 Бүх элемэнтүүдийг чөлөөлсний дараа хоосон
цикл жагсаалт үлдэнэ.
ЦЖ-ыг санах ойгоос
бүрэн чөлөөлөх устгагч функц:
ЦЖ-ыг санах ойгоос
бүрэн чөлөөлөх устгагч функц:
100 56 34. . .
location
listData
456
ЦЖ-ыг санах ойгоос
бүрэн чөлөөлөх устгагч функц:
100 56 34. . .
location
listData
456
ЦЖ-ыг санах ойгоос
бүрэн чөлөөлөх устгагч функц:
56 34. . .
location
listData
456
ЦЖ-ыг санах ойгоос
бүрэн чөлөөлөх устгагч функц:
34. . .
location
listData
456
ЦЖ-ыг санах ойгоос
бүрэн чөлөөлөх устгагч функц:
34
location
listData
456
ЦЖ-ыг санах ойгоос
бүрэн чөлөөлөх устгагч функц:
location
listData
456
Цикл жагсаалт
Устгагч функц:
Тайлбар:
Устгагч функц нь байгуулагч функцээр болон
тухайн хийсвэр төрлөөр санах ойд
хуваарилагсдсан хувьсагчдыг санах ойгоос
чөлөөлнө.
location listData
bool CircularLinkedList::IsEmpty(){
if( listData == NULL )
return true;
return false;
}
Тайлбар:
Гадаад заагч/listData/ нь хоосон/NULL/ утгатай
бол цикл жагсаалт хоосон байна буюу true утга,
хоосон/NULL/-оос ялгаатай бол хоосон биш буюу
false утга буцаана.
ЦЖ-ыг хоосон
эсэхийг шалгах
void CircularLinkedList::InsertItem(Data item)
{
if(IsEmpty()==true){
CLNode *location=new CLNode(item,location);
location->next=location;
listData=location;
}
else{
CLNode*location=new CLNode(item,listData->next)
listData->next=location;
listData=location;
}
}
Цикл жагсаалтад
элемэнт нэмэх
Тайлбар:
1. Цикл жагсаалтыг хоосон эсэхийг шалгана.
2. А.1. Хэрвээ жагсаалт хоосон бол шинэ
элемэнтийг санах ойд хуваарилах ба уг
зангилааны заагч талбараар өөрийг нь
заалгана.
2. А.2. гадаад заагчаар шинэ элемэнтийг заалгана.
Цикл жагсаалтад
элемэнт нэмэх
Тайлбар:
2. В.1. Харин жагсаалт хоосон биш буюу
элемэнттэй бол шинэ элемэнтийг санах ойд
хуваарилах ба уг зангилааны заагч талбараар
гадаад зангилаа байрлаж буй элемэнтийн заагч
талбарын зааж байгаа зангилааг заалгана.
2. В.2. Гадаад зангилаа байрлаж буй элемэнтийн
заагч талбараар шинэ элемэнтийг заалгана.
3. Гадаад заагчийг шинэ элемэнтэд шилжүүлнэ.
Цикл жагсаалтад
элемэнт нэмэх
Цикл жагсаалтад
элемэнт нэмэх
100
location
100 56 34. . .
listData
456
location
listData
void SinglyLinkedList::InsertLast (Data item)
{
SLNode *curr = new SLNode (item, NULL);
if (IsEmpty()==true)
head = curr;
else
tail->next = curr;
tail = curr;
}
НХЖ-ын төгсгөлд
элемэнт нэмэх
void CircularLinkedList::Print(){
if(IsEmpty()==false){
CLNode *location=listData;
cout<<"CircularLinkedList: ";
if(location==listData){
cout<<location->element<<"->";
location=location->next;
}
while(location!=listData){
cout<<location->element<<"->";
location=location->next;
}
cout<<endl;
}else
cout<<"CircularLinkedList is empty"<<endl;
}
ЦЖ-ын элемэнтүүдийг хэвлэх
Тайлбар:
1. Жагсаалт хоосон эсэхийг шалгана.
2. А. Жагсаалт хоосон бол CircularLinkedList
is empty мэдээллийг хэвлэнэ.
2. В. Хоосон биш бол дараах алхамуудыг
гүйцэтгэнэ.
2. 1. Гадаад заагч байрлаж буй зангилаанаас
эхлэн түүний өмнө орших зангилаа хүртэл
бүх зангилаанд туслах заагчийн
тусламжтайгаар дараалан хандаж, зангилаа
бүрийн element талбарын утгыг хэвлэнэ.
ЦЖ-ын элемэнтүүдийг хэвлэх
ЦЖ-ын элемэнтүүдийг хэвлэх
100 56 34
listData
42
CircularLinkedList:
456
location
34->
ЦЖ-ын элемэнтүүдийг хэвлэх
100 56 34
listData
42
CircularLinkedList:
456
location
34-> 100->
ЦЖ-ын элемэнтүүдийг хэвлэх
100 56 34
listData
42
CircularLinkedList:
456
location
34-> 100->56->
ЦЖ-ын элемэнтүүдийг хэвлэх
100 56 34
listData
42
CircularLinkedList:
456
location
34-> 100->56->456->
ЦЖ-ын элемэнтүүдийг хэвлэх
100 56 34
listData
42
CircularLinkedList:
456
location
34-> 100->56->456->42->
ЦЖ-ын элемэнтүүдийг хэвлэх
100 56 34
listData
42
CircularLinkedList:
456
location
34-> 100->56->456->42->
bool CircularLinkedList::FindItem(Data key){
if(IsEmpty()==false){
CLNode *location = listData;
while (location->element!=key &&
location->next!=listData)
{
location=location->next;
}
if (location->element == key)
return true;
return false;
}else
return false;
}
ЦЖ-аас өгөгдсөн
элемэнт хайх
Тайлбар:
1. Жагсаалт хоосон эсэхийг шалгана.
2. А. Жагсаалт хоосон бол CircularLinkedList
is empty мэдээллийг хэвлэнэ.
2. В. Хоосон биш бол дараах алхамуудыг
гүйцэтгэнэ.
2. 1. гадаад заагч байрлаж буй элемэнтээс эхлэн
туслах заагчийн тусламжтайгаар өгөгдсөн утгыг
зангилаа бүрийн элемэнт талбарын утгатай
жиших замаар элемэнт олдох хүртэл эсвэл
гадаад заагч байрлаж байгаа зангилааны
өмнөх зангилаа хүртэл зангилаануудад
дараалан хандах замаар хайлтыг явуулна.
ЦЖ-аас өгөгдсөн
элемэнт хайх
Тайлбар:
2. 2. Хайлтыг явуулж буй давталт дуусах үед
туслах заагчын зааж буй зангилааны элемэнт
талбарын утга өгөгдсөн элемэнттэй тэнцүү
үед өгөгдсөн утга жагсаалтад байна.
2. 3. Бусад тохиолдолд жагсаалтад хайж буй утга
жагсаалтаас олдсонгүй гэсэн утга буцаана.
ЦЖ-аас өгөгдсөн
элемэнт хайх
ЦЖ-аас өгөгдсөн
элемэнт хайх
100 56 34
listData
42456
location
56
ЦЖ-аас өгөгдсөн
элемэнт хайх
100 56 34
listData
42456
location
56
ЦЖ-аас өгөгдсөн
элемэнт хайх
100 56 34
listData
42456
location
56
Хайсан элемэнт олдлоо!!!
void CircularLinkedList::DeleteItem(Data item)
{
if(IsEmpty()==false){
CLNode *predLoc=listData;
CLNode *location=listData;
while(location->element!=item &&
location->next!=listData){
predLoc=location;
location=location->next;
}
if(location->next==listData)
cout<<"Ugugdsun element bhguia bna"<<endl;
ЦЖ-аас өгөгдсөн
элемэнтийг устгах
else
if(location->element==item){
if(location==listData){
while(predLoc->next!=location)
predLoc=predLoc->next;
listData=listData->next;
}
predLoc->next=location->next;
delete location;
}
}else
cout<<"CircularLinkedList is empty"<<endl;
}
ЦЖ-аас өгөгдсөн
элемэнтийг устгах
Тайлбар:
1. Жагсаалт хоосон эсэхийг шалгана.
2. А. Жагсаалт хоосон бол CircularLinkedList is
empty мэдээллийг хэвлэнэ.
2. В. Хоосон биш бол дараах алхамуудыг гүйцэтгэнэ.
2. 1. Өгөгдсөн элемэнтийг хайна. Үүний тулд хоёр
туслах заагчийг ашиглана.
• location– устгах зангилааг заалгана.
• predLoc – устгах элемэнтийн өмнөх зангилааг
заалгана.
ЦЖ-аас өгөгдсөн
элемэнтийг устгах
Тайлбар:
2. 2. Хайлт зогссон үед хэрвээ location->next заагч
listData утгыг зааж байвал өгөгдсөн элемэнт
жагсаалтад байхгүй байна.
2. 3. Хайлт зогссон үед хэрвээ location заагчийн зааж
буй зангилааны element талбарын утга өгөгдсөн
элемэнттэй тэнцүү буюу хайсан зангилаа олдсон
бол:
2. 3. 1. хэрвээ устгах элемэнтийг гадаад заагч
зааж байвал түүний өмнөх элемэнтийг олно.
2. 3. 2. гадаад заагчийг дараагийн элемэнтэд
шилжүүлнэ.
ЦЖ-аас өгөгдсөн
элемэнтийг устгах
Тайлбар:
2. 3. 3. устгах элемэнтийн өмнөх элемэнтийн заагч
талбараар устгах элемэнтийн дараагийн
элемэнтийг заалгана.
2. 4. location заагчийн зааж буй зангилааг санах ойгоос
чөлөөлөх буюу устгана.
ЦЖ-аас өгөгдсөн
элемэнтийг устгах
ЦЖ-аас өгөгдсөн
элемэнтийг устгах
100 56 34
listData
42456
location
predLoc
Устгах элемэнт: 34
ЦЖ-аас өгөгдсөн
элемэнтийг устгах
100 56 34
listData
42456
predLoc
location
Устгах элемэнт: 34
ЦЖ-аас өгөгдсөн
элемэнтийг устгах
100 56 34
listData
42456
predLoc
location
Устгах элемэнт: 34
ЦЖ-аас өгөгдсөн
элемэнтийг устгах
100 56 34
listData
42456
predLoc
location
Устгах элемэнт: 34
ЦЖ-аас өгөгдсөн
элемэнтийг устгах
100 56 34
listData
42456
predLoc
location
Устгах элемэнт: 34
ЦЖ-аас өгөгдсөн
элемэнтийг устгах
100 56 34
listData
42456
predLoc
location
Устгах элемэнт: 34
ЦЖ-аас өгөгдсөн
элемэнтийг устгах
100 56 34
listData
42456
location
predLoc
Устгах элемэнт: 56
ЦЖ-аас өгөгдсөн
элемэнтийг устгах
100 56 34
listData
42456
predLoc
location
Устгах элемэнт: 56
ЦЖ-аас өгөгдсөн
элемэнтийг устгах
100 56 34
listData
42456
predLoc
location
Устгах элемэнт: 56

More Related Content

What's hot (20)

Өгөгдлийн бүтэц
Өгөгдлийн бүтэцӨгөгдлийн бүтэц
Өгөгдлийн бүтэц
 
Sw203 Lecture8 Interface
Sw203 Lecture8 InterfaceSw203 Lecture8 Interface
Sw203 Lecture8 Interface
 
It101 lec6 10.06
It101 lec6 10.06It101 lec6 10.06
It101 lec6 10.06
 
u.cs101 "Алгоритм ба програмчлал" Лекц №7
u.cs101 "Алгоритм ба програмчлал" Лекц №7u.cs101 "Алгоритм ба програмчлал" Лекц №7
u.cs101 "Алгоритм ба програмчлал" Лекц №7
 
Өгөгдлийн бүтэц 2-3
Өгөгдлийн бүтэц 2-3Өгөгдлийн бүтэц 2-3
Өгөгдлийн бүтэц 2-3
 
Lec5 angi
Lec5 angiLec5 angi
Lec5 angi
 
Lesson 7
Lesson 7Lesson 7
Lesson 7
 
Өгөгдлийн бүтэц 12
Өгөгдлийн бүтэц 12Өгөгдлийн бүтэц 12
Өгөгдлийн бүтэц 12
 
database 12
database 12database 12
database 12
 
Лекц 9(Заагч)
Лекц 9(Заагч)Лекц 9(Заагч)
Лекц 9(Заагч)
 
001 c++ class охп
001 c++ class охп001 c++ class охп
001 c++ class охп
 
Dsi lec5
Dsi lec5Dsi lec5
Dsi lec5
 
Эрэмбэлэлт хайлтын аргууд
Эрэмбэлэлт хайлтын аргуудЭрэмбэлэлт хайлтын аргууд
Эрэмбэлэлт хайлтын аргууд
 
Day 1 database
Day 1   databaseDay 1   database
Day 1 database
 
U.cs101 алгоритм программчлал-9
U.cs101   алгоритм программчлал-9 U.cs101   алгоритм программчлал-9
U.cs101 алгоритм программчлал-9
 
Database 11
Database 11Database 11
Database 11
 
Мод, графын ерөнхий зарчим
Мод, графын ерөнхий зарчимМод, графын ерөнхий зарчим
Мод, графын ерөнхий зарчим
 
Pp Lect3 1
Pp Lect3 1Pp Lect3 1
Pp Lect3 1
 
Datastructure algoritm
Datastructure algoritmDatastructure algoritm
Datastructure algoritm
 
Lec 02 - copy (2)
Lec 02 - copy (2)Lec 02 - copy (2)
Lec 02 - copy (2)
 

More from International Ulaanbaatar University (20)

Lec8
Lec8 Lec8
Lec8
 
Lec7
Lec7 Lec7
Lec7
 
Lec5 6
Lec5 6 Lec5 6
Lec5 6
 
Lec4
Lec4 Lec4
Lec4
 
Lec3
Lec3 Lec3
Lec3
 
Lec2
Lec2 Lec2
Lec2
 
Lec1
Lec1 Lec1
Lec1
 
Визуаль програмчлал бие даалт
Визуаль програмчлал бие даалтВизуаль програмчлал бие даалт
Визуаль програмчлал бие даалт
 
ОХШЗ - Бие Даалт
ОХШЗ - Бие ДаалтОХШЗ - Бие Даалт
ОХШЗ - Бие Даалт
 
Ood lesson12.1 ---------
Ood lesson12.1  ---------Ood lesson12.1  ---------
Ood lesson12.1 ---------
 
Ood lesson11 sequence
Ood lesson11 sequenceOod lesson11 sequence
Ood lesson11 sequence
 
Ood lesson10 statechart
Ood lesson10 statechartOod lesson10 statechart
Ood lesson10 statechart
 
Ood lesson9 activity
Ood lesson9 activityOod lesson9 activity
Ood lesson9 activity
 
Ood lesson7,8 class
Ood lesson7,8 classOod lesson7,8 class
Ood lesson7,8 class
 
Ood lesson6 class
Ood lesson6 classOod lesson6 class
Ood lesson6 class
 
Ood lesson5
Ood lesson5Ood lesson5
Ood lesson5
 
Ood lesson4
Ood lesson4Ood lesson4
Ood lesson4
 
Ood lesson3
Ood lesson3Ood lesson3
Ood lesson3
 
Ood lesson2
Ood lesson2Ood lesson2
Ood lesson2
 
Ood lesson1
Ood lesson1Ood lesson1
Ood lesson1
 

Dsi lec7