Стек: Засвар хоорондын ялгаа
Content deleted Content added
No edit summary |
No edit summary |
||
Мөр 2:
{{cleanup|date=October 2011}}
[[Image:Data stack.svg|thumb|200px|right|стекийн хялбар дүрслэл]]
[[компьютерийн шинжлэх ухаанд]], '''стек''' (stack) нь онцгой үүрэгтэй [[өгөгдөлийн бүтэцийн төрөл]] буюу цуглуулга юм. Стек нь санах ойд байрлах өгөгдлийг зохион байгуулах нэгэн арга бөгөөд хязгаарлагдмал хандалт бүхий өгөгдлийн бүтцийн нэг бол стек юм. Стек нь top(орой), button(ёроол) -той. Стек нь pop(элемент авах) ба push( элемент хийх) гэсэн үндсэн үйлдэлүүдээс гадна бусад туслах функцуудтэй шугаман бүтэц бөгөөд эдгээр үйлдлүүдийг стекийн орой гэх нэг төгсгөлд гүйцэтгэдэг. Өөрөөр хэлбэл стекийн орой дахь хамгийн сүүлд орсон элемент эхэлж гарах зарчмаар ажиладаг.
Стекийг хамгийн энгийнээр сав гэж ойлгож болно. Бид савны дээрээс нь ямар нэгэн зүйлийг нэмж дээрээс нь хийсэн зүйлээ авдаг. Яг үүнтэй адилаар стек нь багцын pop(орой) гэж нэрлэгдэх нэг л талаас нь нэмдэг, устгадаг өгөгдлийн хийсвэр төрөл юм.
Мөр 11:
алгоритмд стек үндсэн үүрэг гүйцэтгэнэ. Жишээ нь CALL, RETURN зэрэг функцэд стекийг ашигладаг байна.
'''Стекийн хэрэглээ:'''
Line 45 ⟶ 44:
===хэрэгжүүлэлт===
Стекийг олон янзын аргаар нэвтрүүлж болох боловч шугаман массив болон нэг холбоост жягсаалт ашигладаг.
====
Стекийг массив ашиглан хэрхэн нэвтрүүлэхийг авч үзье. Ийм стек нь статикаар тодорхойлогддог. Дараах стек кдассын зарлалттаар maxSize хэмжээтэй стек массив стекийн оройг тодорхойлох top хувьсагч болон стекд элемент хийх push() функц стекээс элеменэ авах рор() функц бусад туслах функын хамт тодорхойлогдсон байна. Стек массивыг заагчаар тодорхойлсоноор динамик ойгоос new операторын тусламжтайгаар maxSize хэмжээтэй зайг стек классын объект зарлах үед нөөцлөн авна. Энэ хэдийгээр заагч ашиглаж байгаа боловч статикаар тодорхойлогдож байна.
template <class Type>
class Stack{
int top, maxSize;
Type*Stack;
puplic:
Stack(int mSize ): maxSize(msize)
{stack=new Type[maxSize]; top=-1;}
Stack()
{delete[] stack;}
bool push(const Type item);
bool pop(Type & item);
bool empty();
bool full();
}
====Жагсаалт====
Зарим бодлогын хувьд стекп хадгалагдах өгөгдлийн хэмжээг урьдчилан хэлж мэдэх боломжгүй тохиолдлууд байдаг. Энэ тохиолдолд стекийг нэг холбоост жагсаалаар илэрхийлхээс өөр аргагүй юм. Стекийг жагсаалтаар илэрхийлдсэнээр түүний хэмжээ нь бодлогын нөхцөлөөс хамаарч программ ажиллах явцад динамикаар өөрчлөгдөх боломжтой. Дараах классын зарлалтаар стекийг тодорхойлоё.
template <class Type>
class Stack{
struct Node{
Type data; Node*link;
};
Node*top;
public:
Stack() {top=null;}
Stack(){
Node*temp;
while(top){
temp=top; top=pop->link;
delete temp;
}
}
bool push(const Type item);
bool pop(Type & item);
bool empty();
}
|