Int add_place, number;
do{
clrscr();
cout<<"Na mesto kakogo elementa dobavit'?";
cin>>add_place;
cout<<"n=";
cin>>number;
}while(add_place-1 > n || add_place <=0);
object->add( add_place, n, number);
}
}
}
else if(chose1 == 2){
if(object==NULL || n==0)
cout<<"Your list is empty\n";
else
object->output();
getch();
}
else if(chose1==3){
if(object==NULL)
cout<<"Your list is empty\n";
else{
Int add_place, number;
do{
clrscr();
cout<<"Na mesto kakogo elementa dobavit'?";
cin>>add_place;
cout<<"n=";
cin>>number;
}while(add_place-1 > n || add_place < 0);
object->add( add_place, n, number);
}
getch();
}
else if(chose1 == 4){
if(object==NULL)
cout<<"Your list is empty\n";
else{
Int del_place;
do{
clrscr();
cout<<"Which element is delete?: ";
cin>>del_place;
}while(del_place > n || del_place < 0);
object->Delete( del_place, n);
}
getch();
}
else if(chose1 == 5){
if(object==NULL)
cout<<"Your list is empty\n";
else
delete object;
object=NULL;
}
else{
delete object;
exit(1);
}
}
}
cls_list::cls_list(int n){
head=new list;
tail=NULL;
head->next=tail;
head->prev=NULL;
int i=1;
list *p, *prev;
p=head;
prev=head;
while(i<n){
cout<<"Input number: ";
cin>>p->number;
i++;
p->next=new list;
p=p->next;
p->prev=prev;
prev=prev->next;
}
cout<<"Input number: ";
cin>>p->number;
p->next=NULL;
p->prev=prev;
p->next=NULL;
tail=p->next;
}
cls_list::~cls_list(){
list *p;
while(head!=tail){
p=head;
head=head->next;
delete p;
}
}
void cls_list::add(int add_place, int &n, int number){
list *temp=new list;
temp->number=number;
if(add_place==1){
temp->next=head;
head->prev=temp;
head=temp;
}
else{
list *p, *prev_p;
p=head;
prev_p=head;
p=p->next;
for(int i=1;i<add_place-1;i++){
prev_p=prev_p->next;
p=p->next;
}
if(add_place == n+1){
prev_p->next=temp;
temp->next=tail;
temp->prev=prev_p;
}
else{
prev_p->next=temp;
temp->prev=prev_p;
temp->next=p;
p->prev=temp;
}
}
n++;
}
void cls_list::output(){
list *p=head;
while(p!=tail){
cout<<p->number<<" ";
p=p->next;
}
}
void cls_list::Delete(int del_place, int &n){
list *p;
p=head;
if(del_place == 1){
head=head->next;
head->prev=NULL;
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=NULL;
tail=prev_p->next;
}
else{
prev_p=p->prev;
next_p=p->next;
prev_p->next=next_p;
next_p->prev=prev_p;
}
delete p;
}
n--;
}
int cls_list::if_empty(){
if(head->next == NULL) return 0;
else return 1;
}
Скрины.
Двусвязный циклический.
#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();