Помощь - Поиск - Пользователи - Календарь
Полная версия: Класс Stack
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ада и другие языки
zloy_pes
Помогите пожалуйста - нужно на С создать класс стек (stack), в нем реализовать процедуру push (поместить этемент в конец цепочки) и создать конструктор копирования и деструктор. Нужно использовать динамическую память. Элементы стека - double (хотя это наверно не важно).
Заранее спасибо.
klem4
В языке Си классов нет. Си - не объектно-ориентированный язык. Может Си++ ?
zloy_pes
Да, извиняюсь - ошибся С++.
volvo
#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;
}

Так пойдет? (не проверял, но причин для отказа работать не вижу)
zloy_pes
Да, то что надо, Спасибо.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.