Помогите пожалуйста - нужно на С создать класс стек (stack), в нем реализовать процедуру push (поместить этемент в конец цепочки) и создать конструктор копирования и деструктор. Нужно использовать динамическую память. Элементы стека - double (хотя это наверно не важно).
Заранее спасибо.
В языке Си классов нет. Си - не объектно-ориентированный язык. Может Си++ ?
Да, извиняюсь - ошибся С++.
#include <iostream.h>
typedef double T;
class Stack {
public:
// Конструктор копирования
Stack(const Stack &s);
// Конструктор по умолчанию
Stack(): first(0) {
}
// Деструктор
~Stack();
void push(T value);
void print();
class Item {
public:
Item(T val, Item *next_ptr):
item(val), next(next_ptr) {
};
T item;
Item *next;
};
private:
Item *first;
};
Stack :: Stack(const Stack &s) {
Stack Ts;
for(Item *pt = s.first; pt; pt = pt -> next) Ts.push(pt -> item);
pt = Ts.first;
while(pt) {
push(pt -> item); pt = pt -> next;
}
}
Stack :: ~Stack() {
for(Item *pt = first; pt; ) {
Item *p = pt;
pt = pt -> next;
delete p;
}
first = 0;
}
void Stack :: push(T value) {
Item *pt = new Item(value, first);
first = pt;
}
void Stack :: print() {
cout << "< ";
for(Item *pt = first; pt; pt = pt -> next)
cout << pt -> item << " ";
cout << " >" << endl;
}
int main() {
// Пустой стек
Stack s;
cout << "starting..." << endl;
for(int i = 3; i < 10; ++i)
s.push((double)i);
// Проверяем, что записалось
s.print();
// Копируем s -> s2
Stack s2 = s;
s2.print();
// Деструктор вызовется автоматически
return 0;
}
Да, то что надо, Спасибо.