Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

SIAOD / Списики / 2CLS

.CPP
Скачиваний:
6
Добавлен:
20.03.2015
Размер:
4.09 Кб
Скачать
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
class cls_list{
	private:
		struct list{
			int number;
			list *next;
			list *prev;
		};
		list *head, *tail;
	public:
		cls_list(int n);
		void output();
		void Delete(int del_place, int &n);
		void add(int add_place, int &n, int number);
		int if_empty();
		~cls_list();
};
void main(){
	clrscr();
	cls_list *object=NULL;
	int n;
	while(1){
		cout<<"1 - vvod"<<endl;
		cout<<"2 - vivod"<<endl;
		cout<<"3 - dobavit'"<<endl;
		cout<<"4 - udalit' 1 element"<<endl;
		cout<<"5 - udalit' spisok"<<endl;
		cout<<"chose=";
		int chose1;
		cin>>chose1;
		if(chose1 == 1){
			if(object->if_empty()==0 && object==NULL){
				do{
					clrscr();
					cout<<"n=";
					cin>>n;
				}while(n<=0);
				object=new cls_list(n);
			}
			else{
				cout<<"Your list is not empty. Do you want add any new elements?\n 1-Yes\n Any key = no\n";
				char chose;
				cin>>chose;
				if(chose == '1'){
					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;
}
Соседние файлы в папке Списики