Добавил:
Upload
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
#include<iostream.h>
#include<conio.h>
class _2svz {
private:
struct list {
int num;
list* next;
list* prev;
};
list* head,*tail;
public:
_2svz(int n);
~_2svz();
void output();
void add(int add_place, int &n);
void Del(int del_place, int &n);
};
void main(){
clrscr();
int n;
do{
clrscr();
cout<<"Vvedite kol-vo elementov n=";
cin>>n;
}while(n<=0 || n>100);
_2svz *object=new _2svz(n);
object->output();
int exit=1;
while(exit == 1){
clrscr();
cout<<"1-dobaviti"<<endl;
cout<<"2-udaliti"<<endl;
cout<<"Pres any another keys for exit"<<endl;
int chose;
cout<<"Chose=";
cin>>chose;
switch(chose){
case 1:
int add_place;
do{
cout<<"Vvedite posle kakogo el-ta dobaviti novii element: add_place=";
cin>>add_place;
}while(add_place>n || add_place<0);
object->add(add_place,n);
object->output();
break;
case 2:
int del_place;
do{
cout<<"Vvedite kakoi element udaliti: del_place=";
cin>>del_place;
}while((del_place>n || del_place<0) && n != 0);
if( n != 0){
object->Del( del_place, n);
object->output();
}
else
cout<<"Spisok pust";
break;
case 3:
object->output();
break;
default:
exit=0;
}
getch();
}
getch();
delete object;
}
void _2svz::Del(int del_place, int &n){
list *p=head;
if(del_place == 1){
head=head->next;
head->prev=tail;
tail->next=head;
delete p;
}
else{
p=p->next;
int i=2;
while(i != del_place){
p=p->next;
i++;
}
list *prev_p, *next_p;
prev_p=p->prev;
next_p=p->next;
if(del_place == n){
prev_p->next=head;
tail=prev_p;
head->prev=tail;
}
else{
prev_p->next=next_p;
next_p->prev=prev_p;
}
delete p;
}
n--;
}
_2svz::_2svz(int n){
list *p=new list;
head=p;
cout<<endl;
for(int i=0;i<n-1;i++) {
cout<<"num=";
cin>>p->num;
p->next=new list;
p->next->prev=p;
p=p->next;
}
cout<<"num=";
cin>>p->num;
tail=p;
tail->next=head;
head->prev=tail;
}
void _2svz::output() {
list *p=head;
do{
cout<<p->num<<" ";
p=p->next;
}
while(p->next != head->next);
cout<<endl;
}
void _2svz::add(int add_place,int &n){
list *p=head;
list *t=new list;
cout<<"Vvedite el-t: num=";
cin>>t->num;
if(add_place != 0 && add_place != n){
for (int i=1;i<add_place;i++)
p=p->next;
t->next=p->next;
t->prev=p;
p->next->prev=t;
p->next=t;
}
if(add_place == 0){
tail->next=t;
t->prev=tail;
t->next=p;
p->prev=t;
head=t;
}
if(add_place == n) {
tail->next=t;
t->prev=tail;
t->next=head;
head->prev=t;
tail=t;
}
n++;
}
_2svz::~_2svz() {
list* p;
while(head!=tail){
p=head;
head=head->next;
delete p;
}
delete tail;
}