User:Sw12d003/sandbox

Стекийг хамгийн энгийнээр сав гэж ойлгож болно. Бид савны дээрээс нь ямар нэгэн зүйлийг нэмж дээрээс нь хийсэн зүйлээ авдаг. Яг үүнтэй адилаар стек нь багцын pop(орой) гэж нэрлэгдэх нэг л талаас нь нэмдэг, устгадаг өгөгдлийн хийсвэр төрөл юм. Стект хамгийн сүүлд орсон элемент хамгийн эхэнд гардаг учраас Last in First out буюу FIFO өгөгдлийн бүтэц гэж бас нэрлэдэг. Хэдийгээр стек нь маш хязгаарлагдмал үйлдэлтэй боловч компьютерийн программ хангамжид чухал үүрэгтэй өгөгдлийн бүтэц юм. Тухайлбал ямар нэг ажлын явцад өөр зүйл хийхээр түр хойшлуулах, эсвэл програм бүхэлдээ ийм зарчмаар ажиллах зэрэг олон алгоритмд стек үндсэн үүрэг гүйцэтгэнэ. Жишээ нь CALL, RETURN зэрэг функцэд стекийг ашигладаг байна.

Стекийн хэрэглээ: • Хаалтын баланс шалгах алгоритм Стек ашиглан энэ асуудлыг шийдвэрлэх нь хамгийн тохиромжтой. Тэмдэгтүүдийн цувааны эхнээс тэмдэг бүрийг уншин, нээх хаалт тааралдах бүрд түнийг стекд хийх ба хаах хаалт таарвал стекээс нэг элемент авч харгалзах нээх хаалт эсэхийг шалган, зөв тохиолдол цааш үргэлжлүүлэн шалгана. Өөрөөр хэлбэл нээх хаалтнууд стекд орсон дарааллын эсрэг дарааллаар харгалзан хаах хаалтууд байх ёстой. • Арифметик илэрхийлэл Арифметикийн илэрхийлэл бодоход үйлдлийн тэмдэгүүдийн гүйцэтгэх дараарллыг баримтлах ёстой. Өөрөөр хэлбэл эхлээд хаалтан дахь үйлдлийг, дараа нь зэрэг дэвшүүлэх үйлдлийг, дараа нь үржих ба хуваах, эцэст нь нэмэх ба хасах гэсэн дарааллаар гүйцэтгэдэг. Жишээ нь: 3*(2+1)*2-8/(9-5)=2*9-8/4=16

Компьютерийн шинжлэх ухааны өгөгдөлийн бүтэцүүдийн нэг нь стек бөгөөд хийсвэрээр тодорхойлогддог мөн аргийг чөлөөтэй хэрэгжүүлдэг бөгөөд ерөнхийдөө шугаман жигсаалтын төрөл гэж тодорхойлж болох ба pop(элемент авах) ба push( элемент хийх) гэсэн үндсэн үйлдэлүүдээс гадна бусад туслах функцуудыг стекийн орой гэх нэг төгсгөлд гүйцэтгэдэг. функцын түлхүүр үг: init: -> Stack push: N x Stack -> Stack top: Stack -> (N U ERROR) pop: Stack -> Stack isempty: Stack -> Boolean утгазүй: top(init) = ERROR top(push(i,s)) = i pop(init) = init pop(push(i, s)) = s isempty(init) = true isempty(push(i, s)) = false

Стекийг массив ашиглан хэрхэн нэвтрүүлэхийг авч үзье. Ийм стек нь статикаар тодорхойлогддог. Дараах стек кдассын зарлалттаар maxSize хэмжээтэй стек массив стекийн оройг тодорхойлох top хувьсагч болон стекд элемент хийх push функц стекээс элеменэ авах рор функц бусад туслах функын хамт тодорхойлогдсон байна. Стек массивыг заагчаар тодорхойлсоноор динамик ойгоос new операторын тусламжтайгаар maxSize хэмжээтэй зайг стек классын объект зарлах үед нөөцлөн авна. Энэ хэдийгээр заагч ашиглаж байгаа боловч статикаар тодорхойлогдож байна. template  class Stack{ int top, maxSize; Type*Stack; puplic: Stack(int mSize ): maxSize(msize) {stack=new Type[maxSize]; top=-1;} Stack