Стек: Засвар хоорондын ялгаа
Content deleted Content added
No edit summary |
No edit summary |
||
Мөр 4:
[[Компьютерийн шинжлэх ухаанд]], '''стек''' (stack) нь онцгой үүрэгтэй [[өгөгдөлийн бүтэцийн төрөл]] буюу цуглуулга юм. Стек нь санах ойд байрлах өгөгдлийг зохион байгуулах нэгэн арга бөгөөд хязгаарлагдмал хандалт бүхий өгөгдлийн бүтцийн нэг бол стек юм. Стек нь top(орой), button(ёроол) -той. Стек нь pop(элемент авах) ба push( элемент хийх) гэсэн үндсэн үйлдэлүүдээс гадна бусад туслах функцуудтэй шугаман бүтэц бөгөөд эдгээр үйлдлүүдийг стекийн орой гэх нэг төгсгөлд гүйцэтгэдэг. Өөрөөр хэлбэл стекийн орой дахь хамгийн сүүлд орсон элемент эхэлж гарах зарчмаар ажиладаг.
Стек нь өгөгдөл хийх ба гаргаж авах гэсэн 2 үйлдэл бүхий шугаман бүтэц бөгөөд эдгээр үйлдлүүдийг стекийн орой гэх зөвхөн нэг төгсгөлд гүйцэтгэдэг. Өөрөөр хэлбэл стекийн орой дахь хамгийн сүүлд орсон элемент нь хамгийн түрүүнд гарах зарчмаар ажилладаг. Иймээс стекийг сүүлд орсон нь эхэлж гарах (LIFO last in first out) жагсаалт гэж бас нэрлэдэг. Стек нь рекурсив програмчлалын үндэс юм. Бидний хэрэглэж буй компьютер бүр стектэй байдаг. Өөрөөр хэлбэл дахин шинэ стек хийх шаардлага үүсдэггүй▼
• Ассемблер хэлээр push, pop командыг бичихэд стекэд өгөгдөл нэмж, хасах боломжтой.▼
Стекийн шаардлага:▼
Хэдийгээр стек нь маш хязгаарлагдмал үйлдэлтэй боловч компьютерийн програмчлалд чухал үүрэгтэй өгөгдлийн бүтцүүдийн нэг юм. Тухайлбал ямар нэг ажлын явцад өөр зүйл хийхээр түр хойшлуулах, эсвэл програм бүхэлдээ ийм зарчмаар ажиллах зэрэг олон алгоритмд стек үндсэн үүрэг гүйцэтгэнэ. Жишээ нь CALL, RETURN зэрэг функцэд стекийг ашигладаг байна.
Стекийг массив ашиглан нэвтрүүлэх▼
Стекийг олон янзын аргаар нэвтрүүлж болох боловч ихэвчлэн шугаман массив, эсвэл нэг холбоост жагсаалт ашигладаг. Массив ашиглах стекийг ихэвчлэн гараар тодорхойлж өгдөг. Дараах Stack классын зарлалтаар MaxSize хэмжээтэй stack массив, стекийн оройг тодорхойлох top хувьсагч болон стекд элемент хийх push(), стекээс элемэнт авах pop() функц бусад туслах функцүүдийн хамт тодорхойллоо. Stack массивыг заагчаар тодорхойлсноор динамик ойгоос new операторын тусламжтайгаар MaxSize хэмжээтэй зайг Stack классын обьект зарлах үед нөөцлөн авна. Энэ нь хэдийгээр заагч ашиглаж байгаа боловч хувиарлалт хийснээс хойш түүний хэмжээ MaxSize-аас хэтрэхгүй тул статикаар тодорхойлогдож байна.▼
Line 39 ⟶ 40:
isempty(init()) = true
isempty(push(i, s)) = false
▲Стек нь өгөгдөл хийх ба гаргаж авах гэсэн 2 үйлдэл бүхий шугаман бүтэц бөгөөд эдгээр үйлдлүүдийг стекийн орой гэх зөвхөн нэг төгсгөлд гүйцэтгэдэг. Өөрөөр хэлбэл стекийн орой дахь хамгийн сүүлд орсон элемент нь хамгийн түрүүнд гарах зарчмаар ажилладаг. Иймээс стекийг сүүлд орсон нь эхэлж гарах (LIFO last in first out) жагсаалт гэж бас нэрлэдэг. Стек нь рекурсив програмчлалын үндэс юм. Бидний хэрэглэж буй компьютер бүр стектэй байдаг. Өөрөөр хэлбэл дахин шинэ стек хийх шаардлага үүсдэггүй
▲• Ассемблер хэлээр push, pop командыг бичихэд стекэд өгөгдөл нэмж, хасах боломжтой.
▲Стекийн шаардлага:
▲ Стекийг массив ашиглан нэвтрүүлэх
▲Стекийг олон янзын аргаар нэвтрүүлж болох боловч ихэвчлэн шугаман массив, эсвэл нэг холбоост жагсаалт ашигладаг. Массив ашиглах стекийг ихэвчлэн гараар тодорхойлж өгдөг. Дараах Stack классын зарлалтаар MaxSize хэмжээтэй stack массив, стекийн оройг тодорхойлох top хувьсагч болон стекд элемент хийх push(), стекээс элемэнт авах pop() функц бусад туслах функцүүдийн хамт тодорхойллоо. Stack массивыг заагчаар тодорхойлсноор динамик ойгоос new операторын тусламжтайгаар MaxSize хэмжээтэй зайг Stack классын обьект зарлах үед нөөцлөн авна. Энэ нь хэдийгээр заагч ашиглаж байгаа боловч хувиарлалт хийснээс хойш түүний хэмжээ MaxSize-аас хэтрэхгүй тул статикаар тодорхойлогдож байна.
|