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

SIAOD / Списики / CIKL1SVZ

.CPP
Скачиваний:
6
Добавлен:
20.03.2015
Размер:
2.5 Кб
Скачать
#include<iostream.h>
#include<conio.h>
class _1svz{
	private:
		struct list{
			int num;
			list* next;
		};
		list* head,* tail;
	public:
		_1svz(int n);
		~_1svz();
		void output();
		void add(int add_place, int &n);
		void Del(int del_place, int &n);
};
void main(){
	int n;
	do{	
		clrscr();
		cout<<"Vvedite kol-vo elementov n=";
		cin>>n;
	}while(n<=0 || n>100);
	_1svz *object=new _1svz(n);
	object->output();
	cout<<endl;
	int exit=1;
	while(exit == 1){
		clrscr();
		cout<<"1-dobaviti"<<endl;
		cout<<"2-udaliti"<<endl;
		cout<<"3-vivod"<<endl;
		cout<<"Pres any another keys for exit"<<endl;
		int 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();
			default:
				exit=0;
			break;
		}
		getch();
	}
	delete object;
}
void _1svz::Del(int del_place, int &n){
	list *p=head;
	if(del_place == 1){
		head=head->next;
		tail->next=head;
		delete p;
	}
	else{
		list *prev_p=head;
		p=p->next;
		int i=2;
		while(i != del_place){
			p=p->next;
			prev_p=prev_p->next;
			i++;
		}
		prev_p->next=p->next;
		delete p;
		if(i == n){
			tail=prev_p->next;
			tail->next=head;
		}
	}
	n--;
}
_1svz::_1svz(int n){
	int y;
	list *p=new list;
	head=p;
	cout<<endl;
	for(int i=0; i<n ;i++){
		cout<<"num=";
		cin>>p->num;
		p->next=new list;
		p=p->next;
		tail=p;
	}
	tail->next=head;
}
void _1svz::output(){
	list *p=head;
	while(p->next!=head){
		cout<<p->num<<" ";
		p=p->next;
	}
}
void _1svz::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){
		for(int i=1;i<add_place;i++)
			p=p->next;
		t->next=p->next;
		p->next=t;
		if(add_place==n)
			tail=t;
	}
	if(add_place==0){
		tail->next=t;
		t->next=p;
		head=t;
	}
	n++;
}
_1svz::~_1svz(){
	list *p;
	while(head!=tail){
	    p=head;
	    head=head->next;
	    delete p;
	}
	delete tail;
}
Соседние файлы в папке Списики