SlideShare a Scribd company logo
Стек, Стекийн шаардлага,
Стекийг массив ашиглан
нэвтрүүлэх
Лекц 5
Стек
• Стек нь өгөдөл хийх ба гаргаж авах гэсэн 2 үйлдэл бүхий шугаман
бүтэц бөгөөд эдгээр үйлдлүүдийг стекийн орой гэх зөвхөн нэг
төгсгөлд гүйцэтгэдэг. Өөрөөр хэлбэл стекийн орой дахь хамгийн
сүүлд орсон элемент нь хамгийн түрүүнд гарах зарчмаар
ажилладаг. Иймээс стекийг сүүлд орсон нь эхэлж гарах (LIFO-last
in first out) жагсаалт гэж бас нэрлэдэг. Стек нь рекурсив
програмчлалын үндэс юм. Бидний хэрэглэж буй компьютер бүр
стектэй байдаг. Өөрөөр хэлбэл дахин шинэ стек хийх шаардлага
үүсдэггүй
• Ассемблер хэлээр push, pop командыг бичихэд стекэд өгөгдөл
нэмж, хасах боломжтой.
Стекийн шаардлага
Хэдийгээр стек нь маш хязгаарлагдмал үйлдэлтэй боловч
компьютерийн програмчлалд чухал үүрэгтэй өгөгдлийн бүтцүүдийн
нэг юм. Тухайлбал ямар нэг ажлын явцад өөр зүйл хийхээр түр
хойшлуулах, эсвэл програм бүхэлдээ ийм зарчмаар ажиллах зэрэг
олон алгоритмд стек үндсэн үүрэг гүйцэтгэнэ. Жишээ нь CALL,
RETURN зэрэг функцэд стекийг ашигладаг байна.
Стекийг массив ашиглан нэвтрүүлэх
• Стекийг олон янзын аргаар нэвтрүүлж болох боловч ихэвчлэн
шугаман массив, эсвэл нэг холбоост жагсаалт ашигладаг. Массив
ашиглах стекийг ихэвчлэн гараар тодорхойлж өгдөг. Дараах Stack
классын зарлалтаар MaxSize хэмжээтэй stack массив, стекийн
оройг тодорхойлох top хувьсагч болон стекд элемент хийх push(),
стекээс элемент авах pop() функц бусад туслах функцүүдийн хамт
тодорхойллоо. Stack массивыг заагчаар тодорхойлсноор динамик
ойгоос new операторын тусламжтайгаар MaxSize хэмжээтэй зайг
Stack классын обьект зарлах үед нөөцлөн авна. Энэ нь хэдийгээр
заагч ашиглаж байгаа боловч хувиарлалт хийснээс хойш түүний
хэмжээ MaxSize-аас хэтрэхгүй тул статикаар тодорхойлогдож
байна.
class Stack{
int top, MaxSize;
Type *stack;
public:
Stack(int Msize) : MaxSize(Msize)
(stack new Type(MazSize); top=1;)
Stack()
{delete() stack;}
bool push(const Type item);
bool pop(Type & item);
bool empty();
bool fill();
}
Ингэж Stack классыг загвар класс байдлаар тодорхойлсон тохиолдолд дурын
өгөгдлийн төрөлд ажиллах обьектуудыг нэг програмд үүсгэн ажиллаж болно.
Стекийг жагсаалтаар илэрхийлэх
• Стекийг массиваар илэрхийлэх үед стекийн хэмжээ нь тогтмол
тодорхойлогдох учир өөрчлөх боломжгүй юм. Хэрэв програм
зохиогч нь стекд хадгалагдах нийт өгөгдлийн хэмжээг итгэлтэй
мэдэж байвал стекийг массив ашиглан нэвтрүүлэх нь зохимжтой.
Гэвч зарим бодлогын хувьд стекд хадгалагдах өгөгдлийн хэмжээг
урьдчилан хэлэх боломжгүй тохиолдлууд байдаг. Энэ тохиолдолд
стекийг нэг хэмжээст жагсаалтаар илэрхийлнэ. Стекийг
жагсаалтаар илэрхийлснээр түүний хэмжээ нь бодлогын нөхцлөөс
хамаарч програм ажиллах явцад динамикаар өөрчлөгдөх
боломжтой.
class Stack{
struct Node
{
Type data; Node *link;
};
Node *top;
public:
Stack() {top=NULL;}
~Stack(){
Node *temp;
while (top){
temp=top; top=top->link;
delete temp;
}
}
bool push(const Type item);
bool pop(Type & item);
bool empty();
}
• Дээрхи зарлалтаар стекийн нэг элемент нь
өгөгдөл ба холбоос гэсэн 2 хэсгээс тогтох
жагсаалтын адил тодорхойлогдсон байна. top
заагч нь жагсаалтын эхлэл буюу стекийн оройг
заах ба NULL утгатай байх үед стек үүсгэх
ба ~Stack() байгуулагч функц нь хоосон стек
үүсгэх ба -Stack() устгагч функц нь стекийг
санах ойгоос чөлөөлнө. Стект элемент хийх
push() болон элемент авах pop() функцүүд нь
top заагчийн тусламжтайгаар стекийн оройд
үйлдлийг гүйцэтгэнэ.
Стекийн хэрэглээ
Стекийн хэрэглээг дараах хэдэн жишээгээр иш татан тайлбарлая.
Эхний жишээнд 10-тын тооллын системд өгөгдсөн бүхэл тоог хоёртын тоололд шилжүүлэх бодлогыг стек ашиглан бичвэл:
void main()
{
Stack <int> binary;
char ch;
int n;
do{
cout<<"n=";
cin>>n;
while(n){
binary.push(n%2);
n/=2;
}
while(!binary.empty()){
binary.pop(n);
cout<<n;
}
cout<<"nMore (Y or N)?:";
cin>>ch;
} while (ch=='Y'||ch=='y')
}
• Дээрх програмд binary стекийг Stack загвар классын бүхэл тоо
хадгалах обьектоор зарласан. Энэ бодлогын хувьд жагсаалтаар
нэвтрүүлсэн Stack классыг ашиглах нь тохиромжтой. Учир нь
тооны утгаас хамаарч хоёртын тоололд гарах тооны оронгийн тоо
(урт) өөр өөр байх тул стекд орох нийт элементийн тоог
урьдчилан хэлэх аргагүй.
Хаалтын баланс шалгах алгоритм
• Стек ашиглан энэ асуудлыг шийдвэрлэх нь хамгийн тохиромжтой.
Тэмдэгтүүдийн цувааны эхнээс тэмдэг бүрийг уншин, нээх хаалт
тааралдах бүрд түнийг стекд хийх ба хаах хаалт таарвал стекээс
нэг элемент авч харгалзах нээх хаалт байгаа эсэхийг шалган, зөв
тохиолдол цааш үргэлжлүүлэн шалгана. Өөрөөр хэлбэл нээх
хаалтнууд стекд орсон дарааллын эсрэг дарааллаар харгалзан
хаах хаалтууд байх ёстой.
Арифметик илэрхийлэл
• Арифметикийн илэрхийлэл бодоход үйлдлийн тэмдэгүүдийн
гүйцэтгэх дараарллыг баримтлах ёстой. Өөрөөр хэлбэл эхлээд
хаалтан дахь үйлдлийг, дараа нь зэрэг дэвшүүлэх үйлдлийг, дараа
нь үржих ба хуваах, эцэст нь нэмэх ба хасах гэсэн дарааллаар
гүйцэтгэдэг.
• Жишээ нь: 3*(2+1)*2-8/(9-5)=2*9-8/4=16

More Related Content

What's hot

It101 4
It101 4It101 4
Зардлын бүртгэл Лекц 10
Зардлын бүртгэл Лекц 10Зардлын бүртгэл Лекц 10
Зардлын бүртгэл Лекц 10
Bbujee
 
Ms access
Ms accessMs access
Ms access
Ziyakhan Raimbek
 
өгөгдлийн сан
өгөгдлийн санөгөгдлийн сан
өгөгдлийн санOnon Tuul
 
U.cs101 алгоритм программчлал-10
U.cs101   алгоритм программчлал-10U.cs101   алгоритм программчлал-10
U.cs101 алгоритм программчлал-10
Badral Khurelbaatar
 
Б. Мөнхбат - МОНГОЛЫН ХӨРӨНГИЙН ЗАХ ЗЭЭЛИЙН ӨНӨӨГИЙН БАЙДАЛ, ТУЛГАМДАЖ БУЙ АС...
Б. Мөнхбат - МОНГОЛЫН ХӨРӨНГИЙН ЗАХ ЗЭЭЛИЙН ӨНӨӨГИЙН БАЙДАЛ, ТУЛГАМДАЖ БУЙ АС...Б. Мөнхбат - МОНГОЛЫН ХӨРӨНГИЙН ЗАХ ЗЭЭЛИЙН ӨНӨӨГИЙН БАЙДАЛ, ТУЛГАМДАЖ БУЙ АС...
Б. Мөнхбат - МОНГОЛЫН ХӨРӨНГИЙН ЗАХ ЗЭЭЛИЙН ӨНӨӨГИЙН БАЙДАЛ, ТУЛГАМДАЖ БУЙ АС...batnasanb
 
Lekts 3
Lekts 3Lekts 3
эдийн засгийн өсөлт
эдийн засгийн өсөлтэдийн засгийн өсөлт
эдийн засгийн өсөлт
Б. Нямгэрэл
 
U.cs101 алгоритм программчлал-3
U.cs101   алгоритм программчлал-3U.cs101   алгоритм программчлал-3
U.cs101 алгоритм программчлал-3
Badral Khurelbaatar
 
Эдийн засгийн өсөлт-1
Эдийн засгийн өсөлт-1 Эдийн засгийн өсөлт-1
Эдийн засгийн өсөлт-1 Adilbishiin Gelegjamts
 
"Бизнесийн статистик" Хичээл-5
"Бизнесийн статистик" Хичээл-5"Бизнесийн статистик" Хичээл-5
"Бизнесийн статистик" Хичээл-5
E-Gazarchin Online University
 
Цахим тест
Цахим тестЦахим тест
Цахим тестyanjika
 
Lab3 it101
Lab3 it101Lab3 it101
Lab3 it101
BPurev
 

What's hot (20)

It101 4
It101 4It101 4
It101 4
 
Зардлын бүртгэл Лекц 10
Зардлын бүртгэл Лекц 10Зардлын бүртгэл Лекц 10
Зардлын бүртгэл Лекц 10
 
Ms access
Ms accessMs access
Ms access
 
өгөгдлийн сан
өгөгдлийн санөгөгдлийн сан
өгөгдлийн сан
 
U.cs101 алгоритм программчлал-10
U.cs101   алгоритм программчлал-10U.cs101   алгоритм программчлал-10
U.cs101 алгоритм программчлал-10
 
Б. Мөнхбат - МОНГОЛЫН ХӨРӨНГИЙН ЗАХ ЗЭЭЛИЙН ӨНӨӨГИЙН БАЙДАЛ, ТУЛГАМДАЖ БУЙ АС...
Б. Мөнхбат - МОНГОЛЫН ХӨРӨНГИЙН ЗАХ ЗЭЭЛИЙН ӨНӨӨГИЙН БАЙДАЛ, ТУЛГАМДАЖ БУЙ АС...Б. Мөнхбат - МОНГОЛЫН ХӨРӨНГИЙН ЗАХ ЗЭЭЛИЙН ӨНӨӨГИЙН БАЙДАЛ, ТУЛГАМДАЖ БУЙ АС...
Б. Мөнхбат - МОНГОЛЫН ХӨРӨНГИЙН ЗАХ ЗЭЭЛИЙН ӨНӨӨГИЙН БАЙДАЛ, ТУЛГАМДАЖ БУЙ АС...
 
хөдөлмөрийн нийлүүлэлт
хөдөлмөрийн нийлүүлэлтхөдөлмөрийн нийлүүлэлт
хөдөлмөрийн нийлүүлэлт
 
Lekts 3
Lekts 3Lekts 3
Lekts 3
 
Lecture 7
Lecture 7Lecture 7
Lecture 7
 
эдийн засгийн өсөлт
эдийн засгийн өсөлтэдийн засгийн өсөлт
эдийн засгийн өсөлт
 
U.cs101 алгоритм программчлал-3
U.cs101   алгоритм программчлал-3U.cs101   алгоритм программчлал-3
U.cs101 алгоритм программчлал-3
 
Gerelchuluun
GerelchuluunGerelchuluun
Gerelchuluun
 
U.it101 lab 4
U.it101 lab 4U.it101 lab 4
U.it101 lab 4
 
Маркетингийн удирдлага
Маркетингийн удирдлагаМаркетингийн удирдлага
Маркетингийн удирдлага
 
Эдийн засгийн өсөлт-1
Эдийн засгийн өсөлт-1 Эдийн засгийн өсөлт-1
Эдийн засгийн өсөлт-1
 
Лекц 9(Заагч)
Лекц 9(Заагч)Лекц 9(Заагч)
Лекц 9(Заагч)
 
"Бизнесийн статистик" Хичээл-5
"Бизнесийн статистик" Хичээл-5"Бизнесийн статистик" Хичээл-5
"Бизнесийн статистик" Хичээл-5
 
Цахим тест
Цахим тестЦахим тест
Цахим тест
 
C++
C++C++
C++
 
Lab3 it101
Lab3 it101Lab3 it101
Lab3 it101
 

Viewers also liked

Лекц 10
Лекц 10Лекц 10
Лекц 10Muuluu
 
Switch configuration
Switch configurationSwitch configuration
Switch configurationMuuluu
 
2.1 user practical
2.1 user practical2.1 user practical
2.1 user practicalMuuluu
 
Lecture 3
Lecture 3Lecture 3
Lecture 3
Muuluu
 
Switch function
Switch functionSwitch function
Switch functionMuuluu
 
2.2 determining trust relationships
2.2 determining trust relationships2.2 determining trust relationships
2.2 determining trust relationshipsMuuluu
 
User account policy
User account policyUser account policy
User account policyMuuluu
 
Dns server
Dns serverDns server
Dns serverMuuluu
 
Lecture 2
Lecture 2Lecture 2
Lecture 2
Muuluu
 
Лекц 13
Лекц 13Лекц 13
Лекц 13Muuluu
 
1.2 ad installation
1.2 ad installation1.2 ad installation
1.2 ad installationMuuluu
 
2.1 users & groups
2.1 users & groups2.1 users & groups
2.1 users & groupsMuuluu
 
1.1 windows server 2003
1.1 windows server 20031.1 windows server 2003
1.1 windows server 2003Muuluu
 
Лекц 11
Лекц 11Лекц 11
Лекц 11Muuluu
 
Лекц 9
Лекц 9Лекц 9
Лекц 9Muuluu
 
Лекц 12
Лекц 12Лекц 12
Лекц 12Muuluu
 
Лекц 11
Лекц 11Лекц 11
Лекц 11Muuluu
 
1.2 active directory
1.2 active directory1.2 active directory
1.2 active directoryMuuluu
 

Viewers also liked (18)

Лекц 10
Лекц 10Лекц 10
Лекц 10
 
Switch configuration
Switch configurationSwitch configuration
Switch configuration
 
2.1 user practical
2.1 user practical2.1 user practical
2.1 user practical
 
Lecture 3
Lecture 3Lecture 3
Lecture 3
 
Switch function
Switch functionSwitch function
Switch function
 
2.2 determining trust relationships
2.2 determining trust relationships2.2 determining trust relationships
2.2 determining trust relationships
 
User account policy
User account policyUser account policy
User account policy
 
Dns server
Dns serverDns server
Dns server
 
Lecture 2
Lecture 2Lecture 2
Lecture 2
 
Лекц 13
Лекц 13Лекц 13
Лекц 13
 
1.2 ad installation
1.2 ad installation1.2 ad installation
1.2 ad installation
 
2.1 users & groups
2.1 users & groups2.1 users & groups
2.1 users & groups
 
1.1 windows server 2003
1.1 windows server 20031.1 windows server 2003
1.1 windows server 2003
 
Лекц 11
Лекц 11Лекц 11
Лекц 11
 
Лекц 9
Лекц 9Лекц 9
Лекц 9
 
Лекц 12
Лекц 12Лекц 12
Лекц 12
 
Лекц 11
Лекц 11Лекц 11
Лекц 11
 
1.2 active directory
1.2 active directory1.2 active directory
1.2 active directory
 

Similar to Lecture 5

Өгөгдлийн бүтэц 11
Өгөгдлийн бүтэц 11Өгөгдлийн бүтэц 11
Өгөгдлийн бүтэц 11
International Ulaanbaatar University
 
Өгөгдлийн бүтэц 10
Өгөгдлийн бүтэц 10Өгөгдлийн бүтэц 10
Өгөгдлийн бүтэц 10
International Ulaanbaatar University
 
Sw203 Lecture9 Encapsulation
Sw203 Lecture9  EncapsulationSw203 Lecture9  Encapsulation
Sw203 Lecture9 Encapsulation
Jargalsaikhan Alyeksandr
 
Лаборатор-3
Лаборатор-3Лаборатор-3
Лаборатор-3bsuren_bn
 
U.cs101 лаборатори 5
U.cs101 лаборатори 5U.cs101 лаборатори 5
U.cs101 лаборатори 5
Ganbaatar ch
 
Dsi lec10
Dsi lec10Dsi lec10
Dsi lec10ggmo86
 
visual programming lecture 2
visual programming lecture 2visual programming lecture 2
visual programming lecture 2
Donald G-hub
 
visual programming lecture 2
visual programming lecture 2visual programming lecture 2
visual programming lecture 2
Donald G-hub
 
visual programming lecture 2
visual programming lecture 2visual programming lecture 2
visual programming lecture 2
Donald G-hub
 
Lecture4
Lecture4Lecture4
Lecture4orgil
 
U.cs101 лаборатори 1
U.cs101 лаборатори 1U.cs101 лаборатори 1
U.cs101 лаборатори 1
Ganbaatar ch
 

Similar to Lecture 5 (20)

Өгөгдлийн бүтэц 11
Өгөгдлийн бүтэц 11Өгөгдлийн бүтэц 11
Өгөгдлийн бүтэц 11
 
Өгөгдлийн бүтэц 10
Өгөгдлийн бүтэц 10Өгөгдлийн бүтэц 10
Өгөгдлийн бүтэц 10
 
Лекц №15
Лекц №15Лекц №15
Лекц №15
 
Sw203 Lecture9 Encapsulation
Sw203 Lecture9  EncapsulationSw203 Lecture9  Encapsulation
Sw203 Lecture9 Encapsulation
 
Лаборатор-3
Лаборатор-3Лаборатор-3
Лаборатор-3
 
Лекц №13
Лекц №13Лекц №13
Лекц №13
 
Лекц 3
Лекц 3Лекц 3
Лекц 3
 
Lec5 angi
Lec5 angiLec5 angi
Lec5 angi
 
U.cs101 лаборатори 5
U.cs101 лаборатори 5U.cs101 лаборатори 5
U.cs101 лаборатори 5
 
Dsi lec10
Dsi lec10Dsi lec10
Dsi lec10
 
33
3333
33
 
3
33
3
 
visual programming lecture 2
visual programming lecture 2visual programming lecture 2
visual programming lecture 2
 
visual programming lecture 2
visual programming lecture 2visual programming lecture 2
visual programming lecture 2
 
visual programming lecture 2
visual programming lecture 2visual programming lecture 2
visual programming lecture 2
 
2
22
2
 
Lecture4
Lecture4Lecture4
Lecture4
 
Sw203 Lecture4 Class Object
Sw203 Lecture4  Class ObjectSw203 Lecture4  Class Object
Sw203 Lecture4 Class Object
 
Lecture
LectureLecture
Lecture
 
U.cs101 лаборатори 1
U.cs101 лаборатори 1U.cs101 лаборатори 1
U.cs101 лаборатори 1
 

More from Muuluu

Өгөгдлийн бүтэц
Өгөгдлийн бүтэцӨгөгдлийн бүтэц
Өгөгдлийн бүтэц
Muuluu
 
Basic software
Basic software Basic software
Basic software
Muuluu
 
Wide area networks
Wide area networksWide area networks
Wide area networks
Muuluu
 
NAT and PAT
NAT and PATNAT and PAT
NAT and PAT
Muuluu
 
Spanning tree protocol
Spanning tree protocolSpanning tree protocol
Spanning tree protocol
Muuluu
 
Firewall
FirewallFirewall
Firewall
Muuluu
 
User practical
User practicalUser practical
User practical
Muuluu
 
Active directory
Active directoryActive directory
Active directory
Muuluu
 
Hardware
HardwareHardware
Hardware
Muuluu
 
windows server 2003
 windows server 2003 windows server 2003
windows server 2003
Muuluu
 
Процессорын архитектур
Процессорын архитектурПроцессорын архитектур
Процессорын архитектур
Muuluu
 
6 network devices
6 network devices6 network devices
6 network devicesMuuluu
 
Бие даалт
Бие даалтБие даалт
Бие даалтMuuluu
 
Лекц 15
Лекц 15Лекц 15
Лекц 15Muuluu
 
Лекц 14
Лекц 14Лекц 14
Лекц 14Muuluu
 
Лекц 16
Лекц 16Лекц 16
Лекц 16Muuluu
 
Лекц 15
Лекц 15Лекц 15
Лекц 15Muuluu
 
Лекц 14
Лекц 14Лекц 14
Лекц 14Muuluu
 
Лекц 13
Лекц 13Лекц 13
Лекц 13Muuluu
 
Лекц 12
Лекц 12Лекц 12
Лекц 12Muuluu
 

More from Muuluu (20)

Өгөгдлийн бүтэц
Өгөгдлийн бүтэцӨгөгдлийн бүтэц
Өгөгдлийн бүтэц
 
Basic software
Basic software Basic software
Basic software
 
Wide area networks
Wide area networksWide area networks
Wide area networks
 
NAT and PAT
NAT and PATNAT and PAT
NAT and PAT
 
Spanning tree protocol
Spanning tree protocolSpanning tree protocol
Spanning tree protocol
 
Firewall
FirewallFirewall
Firewall
 
User practical
User practicalUser practical
User practical
 
Active directory
Active directoryActive directory
Active directory
 
Hardware
HardwareHardware
Hardware
 
windows server 2003
 windows server 2003 windows server 2003
windows server 2003
 
Процессорын архитектур
Процессорын архитектурПроцессорын архитектур
Процессорын архитектур
 
6 network devices
6 network devices6 network devices
6 network devices
 
Бие даалт
Бие даалтБие даалт
Бие даалт
 
Лекц 15
Лекц 15Лекц 15
Лекц 15
 
Лекц 14
Лекц 14Лекц 14
Лекц 14
 
Лекц 16
Лекц 16Лекц 16
Лекц 16
 
Лекц 15
Лекц 15Лекц 15
Лекц 15
 
Лекц 14
Лекц 14Лекц 14
Лекц 14
 
Лекц 13
Лекц 13Лекц 13
Лекц 13
 
Лекц 12
Лекц 12Лекц 12
Лекц 12
 

Lecture 5

  • 1. Стек, Стекийн шаардлага, Стекийг массив ашиглан нэвтрүүлэх Лекц 5
  • 2. Стек • Стек нь өгөдөл хийх ба гаргаж авах гэсэн 2 үйлдэл бүхий шугаман бүтэц бөгөөд эдгээр үйлдлүүдийг стекийн орой гэх зөвхөн нэг төгсгөлд гүйцэтгэдэг. Өөрөөр хэлбэл стекийн орой дахь хамгийн сүүлд орсон элемент нь хамгийн түрүүнд гарах зарчмаар ажилладаг. Иймээс стекийг сүүлд орсон нь эхэлж гарах (LIFO-last in first out) жагсаалт гэж бас нэрлэдэг. Стек нь рекурсив програмчлалын үндэс юм. Бидний хэрэглэж буй компьютер бүр стектэй байдаг. Өөрөөр хэлбэл дахин шинэ стек хийх шаардлага үүсдэггүй • Ассемблер хэлээр push, pop командыг бичихэд стекэд өгөгдөл нэмж, хасах боломжтой.
  • 3. Стекийн шаардлага Хэдийгээр стек нь маш хязгаарлагдмал үйлдэлтэй боловч компьютерийн програмчлалд чухал үүрэгтэй өгөгдлийн бүтцүүдийн нэг юм. Тухайлбал ямар нэг ажлын явцад өөр зүйл хийхээр түр хойшлуулах, эсвэл програм бүхэлдээ ийм зарчмаар ажиллах зэрэг олон алгоритмд стек үндсэн үүрэг гүйцэтгэнэ. Жишээ нь CALL, RETURN зэрэг функцэд стекийг ашигладаг байна.
  • 4. Стекийг массив ашиглан нэвтрүүлэх • Стекийг олон янзын аргаар нэвтрүүлж болох боловч ихэвчлэн шугаман массив, эсвэл нэг холбоост жагсаалт ашигладаг. Массив ашиглах стекийг ихэвчлэн гараар тодорхойлж өгдөг. Дараах Stack классын зарлалтаар MaxSize хэмжээтэй stack массив, стекийн оройг тодорхойлох top хувьсагч болон стекд элемент хийх push(), стекээс элемент авах pop() функц бусад туслах функцүүдийн хамт тодорхойллоо. Stack массивыг заагчаар тодорхойлсноор динамик ойгоос new операторын тусламжтайгаар MaxSize хэмжээтэй зайг Stack классын обьект зарлах үед нөөцлөн авна. Энэ нь хэдийгээр заагч ашиглаж байгаа боловч хувиарлалт хийснээс хойш түүний хэмжээ MaxSize-аас хэтрэхгүй тул статикаар тодорхойлогдож байна.
  • 5. class Stack{ int top, MaxSize; Type *stack; public: Stack(int Msize) : MaxSize(Msize) (stack new Type(MazSize); top=1;) Stack() {delete() stack;} bool push(const Type item); bool pop(Type & item); bool empty(); bool fill(); } Ингэж Stack классыг загвар класс байдлаар тодорхойлсон тохиолдолд дурын өгөгдлийн төрөлд ажиллах обьектуудыг нэг програмд үүсгэн ажиллаж болно.
  • 6. Стекийг жагсаалтаар илэрхийлэх • Стекийг массиваар илэрхийлэх үед стекийн хэмжээ нь тогтмол тодорхойлогдох учир өөрчлөх боломжгүй юм. Хэрэв програм зохиогч нь стекд хадгалагдах нийт өгөгдлийн хэмжээг итгэлтэй мэдэж байвал стекийг массив ашиглан нэвтрүүлэх нь зохимжтой. Гэвч зарим бодлогын хувьд стекд хадгалагдах өгөгдлийн хэмжээг урьдчилан хэлэх боломжгүй тохиолдлууд байдаг. Энэ тохиолдолд стекийг нэг хэмжээст жагсаалтаар илэрхийлнэ. Стекийг жагсаалтаар илэрхийлснээр түүний хэмжээ нь бодлогын нөхцлөөс хамаарч програм ажиллах явцад динамикаар өөрчлөгдөх боломжтой.
  • 7. class Stack{ struct Node { Type data; Node *link; }; Node *top; public: Stack() {top=NULL;} ~Stack(){ Node *temp; while (top){ temp=top; top=top->link; delete temp; } } bool push(const Type item); bool pop(Type & item); bool empty(); } • Дээрхи зарлалтаар стекийн нэг элемент нь өгөгдөл ба холбоос гэсэн 2 хэсгээс тогтох жагсаалтын адил тодорхойлогдсон байна. top заагч нь жагсаалтын эхлэл буюу стекийн оройг заах ба NULL утгатай байх үед стек үүсгэх ба ~Stack() байгуулагч функц нь хоосон стек үүсгэх ба -Stack() устгагч функц нь стекийг санах ойгоос чөлөөлнө. Стект элемент хийх push() болон элемент авах pop() функцүүд нь top заагчийн тусламжтайгаар стекийн оройд үйлдлийг гүйцэтгэнэ.
  • 8. Стекийн хэрэглээ Стекийн хэрэглээг дараах хэдэн жишээгээр иш татан тайлбарлая. Эхний жишээнд 10-тын тооллын системд өгөгдсөн бүхэл тоог хоёртын тоололд шилжүүлэх бодлогыг стек ашиглан бичвэл: void main() { Stack <int> binary; char ch; int n; do{ cout<<"n="; cin>>n; while(n){ binary.push(n%2); n/=2; } while(!binary.empty()){ binary.pop(n); cout<<n; } cout<<"nMore (Y or N)?:"; cin>>ch; } while (ch=='Y'||ch=='y') }
  • 9. • Дээрх програмд binary стекийг Stack загвар классын бүхэл тоо хадгалах обьектоор зарласан. Энэ бодлогын хувьд жагсаалтаар нэвтрүүлсэн Stack классыг ашиглах нь тохиромжтой. Учир нь тооны утгаас хамаарч хоёртын тоололд гарах тооны оронгийн тоо (урт) өөр өөр байх тул стекд орох нийт элементийн тоог урьдчилан хэлэх аргагүй.
  • 10. Хаалтын баланс шалгах алгоритм • Стек ашиглан энэ асуудлыг шийдвэрлэх нь хамгийн тохиромжтой. Тэмдэгтүүдийн цувааны эхнээс тэмдэг бүрийг уншин, нээх хаалт тааралдах бүрд түнийг стекд хийх ба хаах хаалт таарвал стекээс нэг элемент авч харгалзах нээх хаалт байгаа эсэхийг шалган, зөв тохиолдол цааш үргэлжлүүлэн шалгана. Өөрөөр хэлбэл нээх хаалтнууд стекд орсон дарааллын эсрэг дарааллаар харгалзан хаах хаалтууд байх ёстой.
  • 11. Арифметик илэрхийлэл • Арифметикийн илэрхийлэл бодоход үйлдлийн тэмдэгүүдийн гүйцэтгэх дараарллыг баримтлах ёстой. Өөрөөр хэлбэл эхлээд хаалтан дахь үйлдлийг, дараа нь зэрэг дэвшүүлэх үйлдлийг, дараа нь үржих ба хуваах, эцэст нь нэмэх ба хасах гэсэн дарааллаар гүйцэтгэдэг. • Жишээ нь: 3*(2+1)*2-8/(9-5)=2*9-8/4=16