4.3
Copied!
#ifndef STACK_H
#define STACK_H
// Created by MBBahodir
#include <cassert>
#include <iostream>
#include <iomanip>
template <typename T>
class Stack {
private:
T* stackPtr; // stackka koʻsatkich
const int size; // stackdagi maksimal elementlar soni
int top; // stackning joriy elementi
public:
Stack(int = 10); // stackning joriy holatda elementlar soni 10 ta
Stack(const Stack<T>&); // nusxalsh konstruktori
~Stack(); // destruktor
inline void push(const T&); // elementni stackning yuqori qismiga joylashtirish
inline T pop(); // stack ichidan eng yuqoridagi elementni oʻchirish
inline void printStack(); // stackni ekranga chiqarish
inline const T& Peek(int) const; // stackning yuqorisidagidam keyingi n-element
inline int getStackSize() const; // stack oʻlchamini olish
inline T* getPtr() const; // stackka koʻrsatkich olish
inline int getTop() const; // joriy elementni olish
};
// Stack sinfi shablon funksiyalarini realizatsiyz qilish
// konstruktor Steka
template <typename T>
Stack<T>::Stack(int maxSize) : size(maxSize) // oʻzgarmaslarni initsalizatsiyalash
{
stackPtr = new T[size]; // xotira ajratish
top = 0; // joriy elementno 0 bilan toldirish;
}
// nusxalsh konstruktori
template <typename T>
Stack<T>::Stack(const Stack<T>& otherStack) :
size(otherStack.getStackSize()) // oʻzgarmaslarni initsalizatsiyalash
{
stackPtr = new T[size]; // yangi xotira ajratish
top = otherStack.getTop();
for (int ix = 0; ix < top; ix )
stackPtr[ix] = otherStack.getPtr()[ix];
}
// destruktor
template <typename T>
Stack<T>::~Stack()
{
delete[] stackPtr; // ochirish
}
// element qoʻshish
template <typename T>
inline void Stack<T>::push(const T& value)
{
// oʻlchamni oʻzgartirish
assert(top < size); // joriy element soni oʻlchamdan kichik boʻlishi kerak
stackPtr[top ] = value; // elementni joylashtirish
}
// elementni oʻchirish
template <typename T>
inline T Stack<T>::pop()
{
// oʻlchamni tekshirish
assert(top > 0); // joriy element 0 katta boʻlishi kerak
stackPtr[--top]; // elementni oʻchirish
return 0;
}
// yuqori elementdan n-elementni qaytaradi
template <class T>
inline const T& Stack<T>::Peek(int nom) const
{
//
assert(nom <= top);
return stackPtr[top - nom]; // n-elementni qaytarish
}
// ekranga chiqarish
template <typename T>
inline void Stack<T>::printStack()
{
for (int ix = top - 1; ix >= 0; ix--)
cout << "|" << setw(4) << stackPtr[ix] << endl;
}
// oʻlchamni qaytarish
template <typename T>
inline int Stack<T>::getStackSize() const
{
return size;
}
// koʻrsatkich qaytarish (nusxalash konstruktori uchun)
template <typename T>
inline T* Stack<T>::getPtr() const
{
return stackPtr;
}
// oʻlchamni qaytarish
template <typename T>
inline int Stack<T>::getTop() const
{
return top;
}
#endif // STACK_H
Run on cpp.sh
Copied!