#pragma once
// Стек на динамическом массиве
//////////////////////////////////////////////////
template <typename TElement>
class stackM
{
size_t count;
TElement *m;
public:
stackM(size_t maxCount = 1024);
~stackM();
void push(const TElement &x);
void pop();
TElement top();
size_t size();
};
//////////////////////////////////////////////////
// Стек на односвязном списке
//////////////////////////////////////////////////
template <typename TElement>
struct Node
{
TElement data;
Node<TElement> next;
Node(const TElement &d, Node <TElement> *n)
{
data = d;
next = n;
}
};
template <typename TElement>
class stackL
{
size_t count;
Node<TElement> *Top;
public:
stackL();
void push(const TElement &x);
void pop();
TElement top();
size_t size();
};
//////////////////////////////////////////////////
#include "myStack.h"
// Стек на динамическом массиве
//////////////////////////////////////////////////
template <typename TElement>
stackM<TElement>::stackM(size_t maxCount = 1024)
{
count = 0;
m = new TElement[maxCount];
}
template <typename TElement>
stackM<TElement>::~stackM()
{
delete[]m;
}
template <typename TElement>
void stackM<TElement>::push(const TElement &x)
{
m[count++] = x;
}
template <typename TElement>
void stackM<TElement>::pop()
{
--count;
}
template <typename TElement>
TElement stackM<TElement>::top()
{
return m[count-1];
}
template <typename TElement>
size_t stackM<TElement>::size()
{
return count;
}
//////////////////////////////////////////////////
//////////////////////////////////////////////////
// Стек на односвязном списке
//////////////////////////////////////////////////
template <typename TElement>
stackL<TElement>::stackL()
{
count = 0;
top = nullptr;
}
template <typename TElement>
void stackL<TElement>::push(const TElement &x)
{
auto newT = new Node(x, top);
}
template <typename TElement>
void stackL<TElement>::pop()
{
auto tmp = Top->next;
delete Top;
Top = tmp;
--count;
}
template <typename TElement>
TElement stackL<TElement>::top()
{
return data;
}
template <typename TElement>
size_t stackL<TElement>::size()
{
return count;
}
//////////////////////////////////////////////////
#include <iostream>
#include "myStack.h"
using namespace std;
int main(void)
{
stackM <int> massiv(200);
for (int i = 0; i < 5; i++) massiv.push(i);
for (size_t i = 0; i < massiv.size; i++) cout << massiv.top() << endl;
return 0;
}