2. Реализовать шаблон класса Stack, реализующий стек. Для представления элемента стека использовать шаблон класса Node. Определить функции добавления на вершину стека и чтение с вершины (как шаблонный класс). #include <iostream> #include <fstream> #include <string> #include <conio.h> using namespace std;
class Exception { public: Exception(char * c="Error!") { message=c; }; char *message; }; class MemoryException : public Exception { public: MemoryException():Exception("Out of memory error!"){}; }; class Downflow : public Exception { public: Downflow():Exception("Stack is empty!"){}; };
template <class T> struct Node { //структура узла T data; //данные Node *l; //указатель на предыдущий узел }; template <class T> class stack { public: stack() { head=0;} //конструктор по умолчанию ~stack() {}; // деструктор
Node<T> *push (T inf) { //запихнуть в стек Node<T> * newbie = new Node<T>; //создаем новый узел if (!newbie) { throw MemoryException(); }
newbie->l=head; //указатель узла на предыдущий newbie->data=inf; //записываем данные head=newbie; //перемещаем вершину return head; } T pop () { if (!head) { throw Downflow(); }
Node<T> *tmp=head->l; T ret=head->data; //запоминаем что надо вернуть delete head; //удаляем старую вершину head=tmp; //запоминаем новую return ret; } Node<T> *head; //вершина стека };
int main() { stack<int> stack; while (1) { cout << endl << "Menu:" << endl << "1. Push" << endl << "2. Pop" << endl << "3. Exit" << endl; int key=0; cin >> key; switch (key) { case 1: cout << "Enter a int number: "; //ввести число int x; cin >> x; try { stack.push(x); //в стек } catch (MemoryException except) { cout << except.message; return 1; }
3. Реализовать шаблон класса Stack, реализующий стек. Для представления элемента стека использовать шаблон класса Node. Определить функции добавления на вершину стека и чтение с вершины (как класс контейнера и итератора).
1. Дейгел Х., Дейгел П. Как программировать на С++:пер. с англ. – М., Бином, 2001. 2. Луцик Ю. А., Ковальчук А. М., Лукьянова И. В. Объектно-ориентированное программирование на языке С++. – Мн., БГУИР, 2003.