Вітаю всіх з Новим роком!!!
І я до вас знову з проблемкою
Задача: Створити клас Стек на основі структури та функцій, розроблених на занятті.
Визначити клас, як шаблонний.
Ось те, що ми робили на парі:
▼Прихований текст
struct Stack
{
int value;
Stack* next;
};
Stack* MakeStack(int n)
{
int value;
cout<<"Enter "<<n<<" elements: "<<endl;
if(n>0)
{
Stack *top=new Stack;
top->next=NULL;
cin>>value;
top->value=value;
n--;
Stack *p=top;
while(n>0)
{
Stack* el = new Stack;
cin>>value;
el->value=value;
el->next=p;
p=el;
n--;
}
top=p;
return top;
}
return NULL;
}
void Push(Stack*&top, int value)
{
Stack* el = new Stack;
el->value=value;
el->next=top;
top=el;
}
Stack* Pop(Stack *&top)
{
Stack *el=top;
top=top->next;
return el;
}
void Show(Stack *top)
{
cout<<"Stack:\n";
Stack *p=top;
while(p!=NULL)
{
cout<<p->value<<endl;
p=p->next;
}
cout<<endl;
}
void DelStack(Stack*& s)
{
if(s!=NULL)
{
Stack* el, *p=s;
while(p!=NULL)
{
el=p;
p=p->next;
delete el;
}
s=NULL;
}
}
int main()
{
Stack* stack=MakeStack(3);
Show(stack);
Push(stack, 4);
Push(stack, 5);
Show(stack);
cout<<"Main while: "<<endl;
while(stack)
{
Stack* el = Pop(stack);
cout<<el->value<<endl;
delete el;
}
DelStack(stack);
return 0;
}
А ось те, що зробила я (реалізовано поки метод Show, ну і, конструктор і деструктор):
▼Прихований текст
#include <iostream>
using namespace std;
template <typename T>
class Stack
{
T value;
Stack *next;
public:
Stack(int number_elements = 0)
{
if (number_elements > 0)
{
Stack *top = new Stack;
cout << "Enter value: ";
cin >> top->value;
top->next = NULL;
number_elements--;
Stack *p = top;
while (number_elements > 0)
{
Stack* element = new Stack;
cout << "Enter value: ";
cin >> element->value;
element->next = p;
p = element;
number_elements--;
}
*this = *p;
}
else
{
this->value = 0;
next = NULL;
}
}
void Push(T value)
{
Stack* element = new Stack;
element->value = value;
element->next = this;
this = element;
}
Stack* Pop()
{
Stack *element = this;
this = this->next;
return element;
}
void Show()
{
cout << "Stack:\n";
Stack *p = this;
while (p != NULL)
{
cout << p->value << "\n";
p = p->next;
}
cout << "\n";
}
void DeleteStack()
{
if (this != NULL)
{
Stack* element, *p = this;
while (p != NULL)
{
element = p;
p = p->next;
delete element;
}
*this = NULL;
}
}
~Stack()
{
if (this != NULL)
DeleteStack();
}
};
int main()
{
int number_elements;
cout << "Enter the number of elements in the list: ";
cin >> number_elements;
Stack <int>stack(number_elements);
system("cls");
stack.Show();
return 0;
}
І, власне, сама проблема: в мене програма вилітає на ось цьому рядку
Підкажіть, будь ласка, чому і як правильно реалізувати видалення елементів стеку у класі.
Дякую.