Скачиваний:
91
Добавлен:
01.05.2014
Размер:
2.64 Кб
Скачать
#if !defined(AFX_LISTEMPL_H__6DDC6F88_1337_43EA_AEB9_6B6F6DED87BE__INCLUDED_)
#define AFX_LISTEMPL_H__6DDC6F88_1337_43EA_AEB9_6B6F6DED87BE__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// ListEmpl.h : header file
//

#include <iostream.h>
#include <stdio.h>
//#include "Person.h"


//typedef CEmpl CInf;
template <class CInf>

class CElem{
public:
	CInf inf;
	CElem<CInf> *next;
	CElem<CInf> *prev;

	CElem(CInf inf0){
		inf = inf0;
		next = 0;
		prev = 0;
	}
	~CElem(){}
};

template <class CInf>

class CList{
public:
	CElem<CInf> *beg;
	CElem<CInf> *end;
public:

	CList(){ beg = 0; end = 0;}

	~CList(){
		if (beg != 0){
			CElem<CInf> *buf = beg;
			while(buf){
				buf = buf->next;
				delete beg;
				beg = buf;
			}
		}
	}

	void AddEl(CInf inf){
		CElem<CInf> *Elem = new CElem<CInf>(inf);
		if (beg == 0) beg = end = Elem;
		else{
			Elem->prev = end;
			end->next = Elem;
			end = Elem;
		}
	}
		void DelAllElem(){
		if (beg != 0){
			CElem<CInf> *buf = beg;
			while(buf){
				buf = buf->next;
				delete beg;
				beg = buf;
			}
		}
		beg=end=0;

	}

	void DelEl(CElem<CInf> *El){
		if (El==beg){
			if(El==end){
				beg=0;
				end=0;
			}else{
				beg=beg->next;
				beg->prev=0;
			}
		}else{
			if(El==end){
				end=end->prev;
				end->next=0;
			}
			else{
				(El->prev)->next = El->next;
				(El->next)->prev = El->prev;
			}
		}
		delete El;
	}
/*	void DelEl(int k){
		CElem<CInf> *buf = beg;
		int i = 0;
		while((i<k-1) && (buf->next != 0)){
			buf = buf->next;
			i++;
		}
		if (buf = beg){
			beg = beg->next;
			beg->prev = 0;
		}
		else{
			if (buf=end){
				end= end->prev;
				end->next=0;
			}
			else{
				buf->prev->next = buf->next;
				buf->next = buf->prev;
			}
		}
   		delete buf;
	}
*/
	void InsEl(int k, CInf d){
		CElem<CInf> *Elem = new CElem<CInf>(d);
		CElem<CInf> *buf = beg;
		int i = 1;
		while((i<k-1) && (buf->next != 0)){
			buf = buf->next;
			i++;
		}
		Elem->next = buf->next;
		buf->next = Elem;
		Elem->prev = buf;
		buf->next->prev = Elem;
	}

	void InsEl(int k, CElem *Elem){
		CElem<CInf> *buf = beg;
		int i = 1;
		if (k==1){
			Elem->next = beg;
			beg = Elem;
			return;
		}
		while((i<k-1) && (buf->next != 0)){
			buf = buf->next;
			i++;
		}
		if (buf->next == 0) end = Elem;
		Elem->next = buf->next;
		buf->next = Elem;
		Elem->prev = buf;
		buf->next->prev = Elem;

	}
	
	CElem * GetEnd(){return end;}
};


#endif // !defined(AFX_LISTEMPL_H__6DDC6F88_1337_43EA_AEB9_6B6F6DED87BE__INCLUDED_)
Соседние файлы в папке kurs