SlideShare a Scribd company logo
LOGO
Лекц №10
Стек, түүнийг массив
ашиглан зохион байгуулах
Хичээлийн агуулга
Стек /Stack/
 Жагсаалтын бүтцүүдийн хувьд элемэнтийг
нэмэх, устгах гэх мэтийн элемэнтэд хандах
үйлдэл нь дурын байрлалд гүйцэтгэгдэж байсан.
 Тэгвэл зарим өгөгдлийн бүтцийн хувьд
элемэнтэд хандах үйлдэл нь хязгаарлагдмал
байдаг.
 Ийм хязгаарлагдмал хандалт бүхий өгөгдлийн
бүтцийн нэг бол стек юм.
Стек
 Элемэнтийг устгах ба нэмэх үйлдэл нь орой гэж
нэрлэгдэх нэг талаасаа хийгддэг шугаман
тогтцыг стек гэнэ.
 Үүнийг LIFO төрөл гэж ч нэрлэдэг. Энэ нь Last In
First Out буюу сүүлд орсон нь эхэлж гарна гэсэн
үг юм.
 Хэдийгээр стек нь маш хязгаарлагдмал
үйлдэлтэй боловч компьютерийн програмчлалд
чухал үүрэгтэй өгөгдлийн бүтцүүдийн нэг юм.
Амьдрал дээрх стекийн жишээ:
Хоолны
тавиуруудын
стек
Зооснуудын
стек
Гутлын
хайрцагнуудын
стек
Цэвэрхэн
эвхсэн
цамцнуудын
стек
Стекийг нэвтрүүлэх аргууд
Стекийг програмд нэвтрүүлэхдээ ихэвчлэн
• Шугаман массив
• Нэг холбоост ашигладаг.
 Шугаман массив ашиглан нэвтрүүлсэн стек нь
компляцийн үед статикаар тодорхойлогдох
өгөөд статик стекийн нийт хэмжээ нь тогтмол
байдаг
 Нэг ашиглан нэвтрүүлсэн стек нь програм
ажиллах явцад динамикаар тодорхойлогдох
бөгөөд динамик стекийн хэмжээ нь өөрчлөгдөж
байдаг.
Стекийн массиваар
илэрхийлэх хийсвэрлэлт
• Стекийн өгөгдөл / *stack /
• Стекийн хэмжээ / MaxSize /
• Cтекийн орой / top /
Стекийн
өгөгдөл:
• Стект элемэнт нэмэх /push/
• Стекээс элемэнтийг авах /pop/
• Стек хоосон эсэхийг шалгах /isempty/
• Стек дүүрсэн эсэхийг шалгах /isfull/
• Стекийг элемэнтүүдийг харах /view/
Стекийн
үйлдэл:
Стекийг массиваар
илэрхийлэх хийсвэрлэлт
Массив
Стекийн орой
Оройн индекс
Стек
class Stack{
int top,MaxSize;
Type*stItems;
public:
Stack(int Msize);
~Stack();
bool push(Type item);
bool pop(Type &item);
bool isempty();
bool isfull();
void view();
};
Cтекийг массиваар илэрхийлэх
хийсвэр төрлийг тодорхойлох
Stack::Stack(int Msize){
MaxSize=Msize;
stItems=new Type[MaxSize];
top=-1;
}
Тайлбар:
Stack st(10);
10 хэмжээтэй st гэсэн нэртэй стекийг үүсгэж байна.
Cтекийг үүсгэх
байгуулагч функц:
Cтекийг үүсгэх
байгуулагч функц:
0
1
2
3
4
5
6
7
8
9
MaxSize
stItems
top -1
10
Stack::~Stack(){
delete[] stItems;
}
Стекийг санах ойгоос
чөлөөлөх устгагч функц:
Стекийг санах ойгоос
чөлөөлөх устгагч функц:
0
1
2
3
4
5
6
7
8
9
MaxSize
stItems
top -1
10
bool Stack::isempty(){
if(top<0)
return true;
else
return false;
}
Стекийг хоосон
эсэхийг шалгах
Стекийг хоосон
эсэхийг шалгах
0
1
2
3
4
5
6
7
8
9
MaxSize
stItems
top -1
10
Top хувьсагч
буюу оройн утга
0-ээс бага тул
стек хоосон
буюу true утга
буцаана.
Стекийг хоосон
эсэхийг шалгах
0
1
2
3
4
5
6
7
8
9
MaxSize
stItems
top 2
10
Top хувьсагч
буюу оройн утга
0-ээс их тул стек
хоосон биш буюу
false утга
буцаана.
A
Z
K
bool Stack::isfull(){
if(top>=MaxSize-1)
return true;
else
return false;
}
Стекийг дүүрэн
эсэхийг шалгах
Стекийг дүүрэн
эсэхийг шалгах
0
1
2
3
4
5
6
7
8
9
MaxSize
stItems
top 2
10
Top хувьсагч
буюу оройн утга
MaxSize-1-ээс
бага тул стек
дүүрэн биш буюу
false утга
буцаана.
A
Z
K
Стекийг дүүрэн
эсэхийг шалгах
0
1
2
3
4
5
6
7
8
9
MaxSize
stItems
top 9
10
Top хувьсагч
буюу оройн утга
MaxSize-1-тэй
тэнцүү тул стек
дүүрэн буюу
true утга
буцаана.
A
Z
K
C
H
L
Y
O
N
W
bool Stack::push(Type item){
if(isfull()){
cout<<"Stack duuren"<<endl;
return false;
}
else{
stItems[++top]=item;
return true;
}
}
Стект элемэнт нэмэх
Тайлбар:
1. Стек дүүрэн эсэхийг шалгана.
A. Хэрвээ стек дүүрэн бол Stack duuren
мэдээллийг хэвлээд, стект элемэнт нэмж
чадаагүй буюу false утга буцаана.
B. Хэрвээ стек дүүрэн биш бол стекийн оройн
утгыг нэгээр нэмэгдүүлэн, оройд элемэнтийг
нэмээд, стект элемэнт нэмж чадсан буюу true
утга буцаана.
Стект элемэнт нэмэх
Стект элемэнт нэмэх
0
1
2
3
4
5
6
7
8
9
MaxSize
stItems
top 2
10
St.push(‘E’);
A
Z
K
2+1=3
E
bool Stack::pop(Type &item){
if(isempty()){
cout<<"Stack hooson"<<endl;
return false;
}
else{
item=stItems[top--];
return true;
}
}
Стекээс элемэнтийг авах
Тайлбар:
1. Стек хоосон эсэхийг шалгана.
A. Хэрвээ стек дүүрэн бол Stack hooson
мэдээллийг хэвлээд, стекээс элемэнт устгаж
чадаагүй буюу false утга буцаана.
B. Хэрвээ стек хоосон биш бол стекийн оройн
элемэнтийг аван, оройн утгыг нэгээр
хоргодуулаад, стекийн оройн элемэнтийг авч
чадсан буюу true утга буцаана.
Оройн элемэнтийг авахдаа санах ойн үүрний
хаягаар авна.
Стекээс элемэнтийг авах
void Stack::view(){
for(int i=0; i<=Top; i++)
cout<<stItems[i];
}
Стекийн элемэнтүүдийг харах
Стекээс элемэнтийг авах
0
1
2
3
4
5
6
7
8
9
MaxSize
stItems
top 3
10
St.view();
A
Z
K
E
Илэрхийллийн хаалтны баланс шалгах
алгоритм
Алгоритмын зорилго нь: тэмдэгтүүдийн
дараалалд (),{},[] гэсэн хаалтууд оролцох
бөгөөд нээх (,{,[ бүрт харгалзан хаах хаалт
),},] байгаа эсэхийг шалгах юм.
Cтекийн хэрэглээ
Баланслагдсан буюу зөв хаагдсан
хаалтуудын цуваа
•()
•{}{}
•({[]()}[])
Баланслаагүй буюу буруу хаагдсан
хаалтуудын цуваа
•)
•[
•{[}]
Cтекийн хэрэглээ
 Энэ асуудлыг үийдэ хамгийн хялбар ухаалаг зам
нь стек ашиглах юм.
 Алгоритмын хэрэгжүүлэлт нь: Тэмдэгтүүдийн
цувааны эхлэлээс тэмдэгт бүрийг уншин, нээх
хаалт таарах бүрт түүнийг стект хийх ба хаах
хаалт тааралдвал стекээс нэг элемэнт авч
харгалзах нээх хаалт мөн эсэхийг шалган, зөв
тохиолдолд цааш үргэлжлүүлэн шалгана.
Cтекийн хэрэглээ
#include<iostream.h>
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
Typedef char Type;
enum bool {false,true};
class Stack{. . .};
char match(char cp){
switch(cp){
case')':return'(';
case'}':return'{';
case']':return'[';
}
}
Cтекийн хэрэглээ
void main(){
Stack st(100);
char s[80],ch;
int i=0;
cout<<"ilerhiilelee oruul;"; cin>>s;
while (s[i]){
if (strchr("{[(",s[i])) st.push(s[i]);
if (strchr("}])", s[i])){
if((!st.pop(ch))||(ch=!match(s[i]))){
cout<<"balancelaagui"<<endl;
exit(-1);
}
}
i++;
}
Cтекийн хэрэглээ
if (st.isempty())
cout<<"balancelasan"<<endl;
else cout<<"balancelaagui"<<endl;
}
Cтекийн хэрэглээ

More Related Content

What's hot

Datastructure algoritm
Datastructure algoritmDatastructure algoritm
Datastructure algoritm
Nergui Batjargal
 
C cons
C consC cons
C cons
Onon Tuul
 
Өгөгдлийн бүтэц
Өгөгдлийн бүтэцӨгөгдлийн бүтэц
Өгөгдлийн бүтэц
Muuluu
 
U.cs101 алгоритм программчлал-2
U.cs101   алгоритм программчлал-2U.cs101   алгоритм программчлал-2
U.cs101 алгоритм программчлал-2
Badral Khurelbaatar
 
U.cs101 алгоритм программчлал-3
U.cs101   алгоритм программчлал-3U.cs101   алгоритм программчлал-3
U.cs101 алгоритм программчлал-3
Badral Khurelbaatar
 
U.cs101 алгоритм программчлал-5 zasvar badral(1)
U.cs101   алгоритм программчлал-5 zasvar badral(1)U.cs101   алгоритм программчлал-5 zasvar badral(1)
U.cs101 алгоритм программчлал-5 zasvar badral(1)
Badral Khurelbaatar
 
Өгөгдлийн бүтэц 11
Өгөгдлийн бүтэц 11Өгөгдлийн бүтэц 11
Өгөгдлийн бүтэц 11
International Ulaanbaatar University
 
Sw203 Lecture6 Inheritance
Sw203 Lecture6 InheritanceSw203 Lecture6 Inheritance
Sw203 Lecture6 Inheritance
Jargalsaikhan Alyeksandr
 
9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргууд9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргуудBayalagmaa Davaanyam
 
9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргууд9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргуудBayalagmaa Davaanyam
 
Dsi lec7
Dsi lec7Dsi lec7
Day 1 database
Day 1   databaseDay 1   database
Day 1 databaseETC
 
Давталттай алгоритмын бодлогууд
Давталттай алгоритмын бодлогуудДавталттай алгоритмын бодлогууд
Давталттай алгоритмын бодлогуудБаярсайхан Л
 
U.cs101 lecture 6
U.cs101   lecture 6U.cs101   lecture 6
U.cs101 lecture 6
Badral Khurelbaatar
 

What's hot (20)

Datastructure algoritm
Datastructure algoritmDatastructure algoritm
Datastructure algoritm
 
C cons
C consC cons
C cons
 
Лекц №13
Лекц №13Лекц №13
Лекц №13
 
Лекц 9(Заагч)
Лекц 9(Заагч)Лекц 9(Заагч)
Лекц 9(Заагч)
 
Өгөгдлийн бүтэц
Өгөгдлийн бүтэцӨгөгдлийн бүтэц
Өгөгдлийн бүтэц
 
U.cs101 алгоритм программчлал-2
U.cs101   алгоритм программчлал-2U.cs101   алгоритм программчлал-2
U.cs101 алгоритм программчлал-2
 
U.cs101 алгоритм программчлал-3
U.cs101   алгоритм программчлал-3U.cs101   алгоритм программчлал-3
U.cs101 алгоритм программчлал-3
 
Lesson 7
Lesson 7Lesson 7
Lesson 7
 
U.cs101 алгоритм программчлал-5 zasvar badral(1)
U.cs101   алгоритм программчлал-5 zasvar badral(1)U.cs101   алгоритм программчлал-5 zasvar badral(1)
U.cs101 алгоритм программчлал-5 zasvar badral(1)
 
Өгөгдлийн бүтэц 11
Өгөгдлийн бүтэц 11Өгөгдлийн бүтэц 11
Өгөгдлийн бүтэц 11
 
Sw203 Lecture6 Inheritance
Sw203 Lecture6 InheritanceSw203 Lecture6 Inheritance
Sw203 Lecture6 Inheritance
 
9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргууд9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргууд
 
9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргууд9.эрэмбэлэлтийн аргууд
9.эрэмбэлэлтийн аргууд
 
Dsi lec7
Dsi lec7Dsi lec7
Dsi lec7
 
Лекц №11
Лекц №11Лекц №11
Лекц №11
 
It101 lec6 10.06
It101 lec6 10.06It101 lec6 10.06
It101 lec6 10.06
 
Day 1 database
Day 1   databaseDay 1   database
Day 1 database
 
Давталттай алгоритмын бодлогууд
Давталттай алгоритмын бодлогуудДавталттай алгоритмын бодлогууд
Давталттай алгоритмын бодлогууд
 
U.cs101 lecture 6
U.cs101   lecture 6U.cs101   lecture 6
U.cs101 lecture 6
 
Letcure5
Letcure5Letcure5
Letcure5
 

More from International Ulaanbaatar University

Визуаль програмчлал бие даалт
Визуаль програмчлал бие даалтВизуаль програмчлал бие даалт
Визуаль програмчлал бие даалт
International Ulaanbaatar University
 
ОХШЗ - Бие Даалт
ОХШЗ - Бие ДаалтОХШЗ - Бие Даалт
ОХШЗ - Бие Даалт
International Ulaanbaatar University
 

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
 

Өгөгдлийн бүтэц 10