#include <iostream>
#include <cstdlib>
using namespace std;
struct STACK {
int info;
STACK *next;
};
Вспомогательный
int Empty(STACK *pstack)
{
if (pstack==NULL)
return 0;
else
return 1;
}
void Add(STACK **pstack)
{
STACK *tmp=new STACK;
tmp->info=rand()%100;
tmp->next=*pstack;
*pstack=tmp;
}
void Move(STACK **pdopstack, STACK **pstack)
{
STACK *tmp=*pdopstack;
*pdopstack=(*pdopstack)->next;
tmp->next=*pstack;
*pstack=tmp;
}
void Del(STACK **pstack)
{
STACK *tmp=*pstack;
*pstack=(*pstack)->next;
delete tmp;
}
void Show(STACK *pstack)
{
STACK *tmp=pstack;
while(tmp!=NULL)
{
cout << tmp->info << " ";
tmp=tmp->next;
}
}
void ClearAll(STACK **pstack)
{
STACK *tmp;
while(*pstack!=NULL)
{
tmp=*pstack;
*pstack=(*pstack)->next;
delete tmp;
}
}
int main()
{
setlocale(LC_ALL,"Russian");
STACK *stack=NULL, *dopstack=NULL;
int num;
char otv, otv2;
do
{
cout << "1. Добавление элементов в вершину стека" << endl
<< "2. Удаление элемента с вершины стека" << endl
<< "3. Вывод элементов основного стека" << endl
<< "4. Вывод элементов вспомогательного стека" << endl
<< "0. Выход" << endl;
cout << " = ";
cin >> otv;
switch(otv)
{
case ‘1?:
cout << endl << "1. Добавить новый элемент" << endl
<< "2. Добавить из вспомогательного стека" << endl;
cout << " = ";
cin >> otv2;
switch(otv2)
{
case ‘1?:
cout << endl << "Сколько элементов нужно добавить = " << endl;
cin >> num;
for (int i=0;i<num;i++)
Add(&stack);
cout << endl << "Элементы добавлены" << endl;
break;
case ‘2?:
if (Empty(dopstack)==0)
cout << endl << "Вспомогательный стек пуст" << endl;
else
{
Move(&dopstack,&stack);
cout << endl << "Элемент добавлен из вспомогательного стека в основной" << endl;
}
break;
default:
cout << endl << "Ошибка" << endl;
break;
}
break;
case ‘2?:
cout << endl << "1. Удалить элемент" << endl
<< "2. Добавить в вспомогательный стек" << endl << " = ";
cin >> otv2;
switch(otv2)
{
case ‘1?:
if (Empty(stack)==0)
cout << endl << "Стек пуст" << endl;
else
{
Del(&stack);
cout << endl << "Элемент удален" << endl;
}
break;
case ‘2?:
if (Empty(stack)==0)
cout << endl << "Стек пуст" << endl;
else
{
Move(&stack,&dopstack);
cout << endl << "Элемент добавлен в вспомогательный стек" << endl;
}
break;
default:
cout << endl << "Ошибка" << endl;
break;
}
break;
case ‘3?:
if (Empty(stack)==0)
cout << endl << "Стек пуст" << endl;
else
{
cout << endl << "Элементы стека:" << endl;
Show(stack);
cout << endl;
}
break;
case ‘4?:
if (Empty(dopstack)==0)
cout << endl << "Вспомогательный стек пуст" << endl;
else
{
cout << endl << "Элементы вспомогательного стека:" << endl;
Show(dopstack);
cout << endl;
}
break;
case ‘0?:
ClearAll(&stack);
ClearAll(&dopstack);
break;
default:
cout << endl << "Ошибка" << endl;
break;
}
}while(otv!=’0?);
cin.get();
}
C/C++ стеки, классы
как понимаю нужно вводить дополнительный стек, но не знаю как это сделать.
Предлагаю автору темы набросать какой-нибудь код на основе std::stack, чтобы можно было рассуждать более конкретно.
Код:
Тут вспомогательный стек, как бы является корзиной.
Учитель сказал переделать так, чтоб удаление и добавление было для произвольных элементов.
Цитата: Lacrista
Ну, сама программа такая
А, так у вас самописный стек. Так тут и не нужен второй стек. Тут надо добавить 2 функции: Insert(STACK **pstack, int index) и Erase(STACK **pstack, int index). Эти функции будут идти по стеку от начала до элемента с требуемым индексом и удалять его (соответственно, надо будет поправить указатель в предыдущем элементе). Как-то так.
Можете написать пример, хотяб одной функции, чтоб совсем понятно стало
Мне это не интересно реализовывать. А способ с перекладыванием в корзину нагляднее всё-таки показать на std::stack, то есть на библиотечном классе, подобие которого вы пытаетесь изобрести.
Код:
#include <iostream>
using namespace std;
class Base
{
protected:
char * name;
char * surname;
int age;
Base*next;
public:
Base()
{
surname=new char [20];
name=new char [20];
age=0;
}
virtual void Print(){};
virtual void Input()const=0;
~Base()
{
delete name;
delete surname;
}
};
class Student:public Base
{
private:
int coorse,group;
int rate;
public:
Student()
{
coorse=0;
group=0;
rate=0;
}
~Student()
{
delete name;
delete surname;
}
void Print()
{
cout<<name<<","<<surname<<","<<age<<","<<coorse<<","<<group<<","<<rate<<endl;
}
void Input()
{
cout<<"Введите имя студента "<<endl;
cin>>name;
cout<<"Введите фамилию студента "<<endl;
cin>>surname;
cout<<"Введите возраст студента "<<endl;
cin>>age;
cout<<"Введите курс студента"<<endl;
cin>>coorse;
cout<<"Введите группу студента"<<endl;
cin>>group;
cout<<"Введите рейтинг студента"<<endl;
cin>>rate;
}
};
class Teacher:protected Base
{
char*post;
float salary;
public:
Teacher()
{
post=new char [20];
salary=0;
}
~Teacher()
{
delete name;
delete surname;
delete post;
}
void Print()
{
cout<<name<<","<<surname<<","<<age<<","<<post<<","<<salary<<endl;
}
void Input()
{
cout<<"Введите имя преподавателя: "<<endl;
cin>>name;
cout<<"Введите фамилию преподавателя: "<<endl;
cin>>surname;
cout<<"Введите возраст преподавателя: "<<endl;
cin>>age;
cout<<"Введите должность преподавателя: "<<endl;
cin>>post;
cout<<"Введите зарплату преподавателя:"<<endl;
cin>>salary;
}
};
class Head:private Base
{
char*chair;
public:
Head()
{
chair = new char [20];
}
~Head()
{
delete name;
delete surname;
delete chair;
}
void Print()
{
cout<<name<<","<<surname<<","<<chair<<endl;
cout<<"возраст"<<age<<endl;
}
void Input()
{
cout<<"Введите имя заведующего кафедрой "<<endl;
cin>>name;
cout<<"Введите фамилию заведующего кафедрой "<<endl;
cin>>surname;
cout<<"Введите кафедру заведующего "<<endl;
cin>>chair;
cout<<"Введите возраст заведующего кафедрой "<<endl;
cin>>age;
}
};
class Stack
{
int d;
Base*head;
public:
Stack()
{
head=NULL;
}
void Push(Stack*top,int d)
{..
using namespace std;
class Base
{
protected:
char * name;
char * surname;
int age;
Base*next;
public:
Base()
{
surname=new char [20];
name=new char [20];
age=0;
}
virtual void Print(){};
virtual void Input()const=0;
~Base()
{
delete name;
delete surname;
}
};
class Student:public Base
{
private:
int coorse,group;
int rate;
public:
Student()
{
coorse=0;
group=0;
rate=0;
}
~Student()
{
delete name;
delete surname;
}
void Print()
{
cout<<name<<","<<surname<<","<<age<<","<<coorse<<","<<group<<","<<rate<<endl;
}
void Input()
{
cout<<"Введите имя студента "<<endl;
cin>>name;
cout<<"Введите фамилию студента "<<endl;
cin>>surname;
cout<<"Введите возраст студента "<<endl;
cin>>age;
cout<<"Введите курс студента"<<endl;
cin>>coorse;
cout<<"Введите группу студента"<<endl;
cin>>group;
cout<<"Введите рейтинг студента"<<endl;
cin>>rate;
}
};
class Teacher:protected Base
{
char*post;
float salary;
public:
Teacher()
{
post=new char [20];
salary=0;
}
~Teacher()
{
delete name;
delete surname;
delete post;
}
void Print()
{
cout<<name<<","<<surname<<","<<age<<","<<post<<","<<salary<<endl;
}
void Input()
{
cout<<"Введите имя преподавателя: "<<endl;
cin>>name;
cout<<"Введите фамилию преподавателя: "<<endl;
cin>>surname;
cout<<"Введите возраст преподавателя: "<<endl;
cin>>age;
cout<<"Введите должность преподавателя: "<<endl;
cin>>post;
cout<<"Введите зарплату преподавателя:"<<endl;
cin>>salary;
}
};
class Head:private Base
{
char*chair;
public:
Head()
{
chair = new char [20];
}
~Head()
{
delete name;
delete surname;
delete chair;
}
void Print()
{
cout<<name<<","<<surname<<","<<chair<<endl;
cout<<"возраст"<<age<<endl;
}
void Input()
{
cout<<"Введите имя заведующего кафедрой "<<endl;
cin>>name;
cout<<"Введите фамилию заведующего кафедрой "<<endl;
cin>>surname;
cout<<"Введите кафедру заведующего "<<endl;
cin>>chair;
cout<<"Введите возраст заведующего кафедрой "<<endl;
cin>>age;
}
};
class Stack
{
int d;
Base*head;
public:
Stack()
{
head=NULL;
}
void Push(Stack*top,int d)
{..
Вот код моей программы без стека,я не знаю,как правильно создать и заполнить стек...Не могли б вы помочь!
Какой стек-то нужен?