реализвать класс MyStack. должны быть реализованы конструктор, деконструктор........GetAt, RemoveAt, операції =, +, += проблема с операциями (( Код | #include <iostream.h> typedef int stackdata;
struct item { stackdata data; // äàííûå item* next; // óêàçàòåëü íà ñëåæäóþùèé ýëåìåíò };
class MyStack { private: item* head; //âåðõíèé ýëåìåíò ñòåêà public: MyStack(); // êîíñòðóêòîð // ~MyStack(); // äåêîíñòðóêòîð int GetLen(); // äîâæèíà ñòåêà Print(); // âèâ³ä ñòåêà íà ñòàíäàðòíèé âèâ³ä MyStack& Push(const stackdata& data); // äîáàâèòü ýëåìåíò â ñòåê stackdata Pop(); // èçâëå÷ü ýëåìåíò èç ñòåêà MyStack& Clear(); // î÷èñòèòü ñòåê // MyStack& operator = (const MyStack&); MyStack& operator+ (const MyStack&); // MyStack& operator += (const MyStack&); // GetAt(); // // RemoveAt(); // };
//êîíñòðóêòîð ñòåêà MyStack::MyStack() { head = 0; }
// äîáàâëåíèå ýëåìåíòà â âåðøèíó ñòåêà MyStack& MyStack::Push(const stackdata& data) { item* item1 = new item; item1->data = data; item1->next = head; head = item1; //âûäåë ïàìÿòè ïîä íîâûé ýëåìåíò îäíîñâÿçíîãî ñïèñêà, //êîïèðóþòüñÿ äàííûå è äåëàåòüñÿ íîâûé ýëåìåíò ñïèñêà âåðøèíîé ñïèñêà (head) return *this; }
// èçâëè÷åíèå ýëåìåíòà èç âåðøèíû ñïèñêà stackdata MyStack::Pop() { // item* old = head; head = head->next; // ñäâèãàåì âåðøèíó ñòåêà stackdata data = old->data; delete old; // óäàëÿåì ñòàðóþ âåðøèíó return data; }
//î÷èñòêà ñòåêà MyStack& MyStack::Clear() { while(head) { // item* temp = head->next; // delete head; // head = temp; head = 0; } return *this; }
// äëèíà ñòåêà int MyStack::GetLen() { int s = 0; if (!head) printf("Stack is clean\n"); if (head) { item* item1 = head; while (item1) { item1 = item1->next; s++; } } return s; }
MyStack::Print() { if (!head) printf("Can't print => Stack is clean\n"); if (head) { item* item1 = head; while (item1) { printf("%d\n", item1->data); item1 = item1->next; } } } /* MyStack& MyStack::operator = (const MyStack& stack) { if (this == &stack) return *this; // íåëüçÿ ïðèñâîèòü ñòåê ñàìîìó ñåáå Clear(); // î÷èñòêà ñòåêà head = new item; // ñîçäàíèå ïåðâîãî ýëåìåíòà item* cur = head; item* src = stack.head; while(src) { cur->data = src->data; if(src->next) { cur->next = new item; cur = cur->next; } else cur->next = 0; src = src->next; } return *this; } */
MyStack& MyStack::operator+ (const MyStack& stack1) { // if (this == &stack) return *this; // íåëüçÿ ïðèñâîèòü ñòåê ñàìîìó ñåáå Clear(); // î÷èñòêà ñòåêà head = new item; // ñîçäàíèå ïåðâîãî ýëåìåíòà // item* main_stack = head; MyStack main_stack; item* src1 = head; while(src1) { main_stack->data = src1->data; if(src1->next) { main_stack->next = new item; main_stack = main_stack->next; } else main_stack->next = 0; src1 = src1->next; }
item* src2 = stack1.head; while(src1) { main_stack->data = src1->data; if(src1->next) { main_stack->next = new item; main_stack = main_stack->next; } else main_stack->next = 0; src2 = src2->next; } // *this = &main_stack; return main_stack; }
/* MyStack& MyStack::operator += (MyStack& stack) { // if (this == &stack) return *this; // íåëüçÿ ïðèñâîèòü ñòåê ñàìîìó ñåáå // head = new item; // ñîçäàíèå ïåðâîãî ýëåìåíòà stack item* main_stack = head; item* src = stack.head; while(src) { main->data = src1->data; if(src1->next) { main_stack->next = new item; main_stack = main_stack->next; } else main_stack->next = 0; src1 = src1->next; }
item* src2 = stack2.head; while(src1) { main->data = src2->data; if(src1->next) { main_stack->next = new item; main_stack = main_stack->next; } else main_stack->next = 0; src2 = src2->next; } return *this; } */
|
|