www.pudn.com > compressor.zip > Seqlist.h


#ifndef SeqList_H 
#define SeqList_H 
#include 
template 
class SeqList 
{ 
	private: 
		T *data; 
		int MaxSize; 
		int last; 
	public: 
		SeqList(int MaxSize=100); 
		~SeqList(){delete []data;MaxSize=0;last=-1;} 
		int Length() const {return last+1;} 
		int Find(const T& x); 
		int IsIn(T& x) const; 
		int Insert(T& x,int i); 
		int Remove(T& x); 
		int Next(T& x); 
		int Prior(T& x); 
		int IsEmpty() {return last==-1;} 
		int IsFull() {return last==MaxSize-1;} 
		void SetSize(int s){MaxSize = s;} 
		T& operator [](int i) {return data[i];} 
		const T&  operator[](int  index)const 
		{ 
			assert(index>=0 && indexlast?NULL:data[i];} 
		friend ostream& operator << (ostream& os,const SeqList& p); 
		friend istream& operator >> (istream& is,SeqList& p); 
}; 
 
template 
SeqList::SeqList(int sz) 
{ 
	if(sz>0){ 
		MaxSize = sz; 
		last =-1; 
		data = new T[MaxSize]; 
	} 
} 
 
template 
int SeqList::Find (const T& item) 
{ 
	for(int i=0;i<=last;i++) 
		if(data[i]==item) 
			return i; 
		return -1; 
} 
 
template 
int SeqList::IsIn(T& x) const 
{ 
	int i=0,found=0; 
	while(i<=last && !found) 
		if(data[i]!=x) i++; 
		else found=1; 
    return found; 
} 
 
template 
int SeqList::Insert(T& x,int i) 
{ 
 
	if(i<0||i>last+1||i>MaxSize) return 0; 
	else{ 
		last++; 
		for(int j=last;j>i;j--) 
			data[j]=data[j-1]; 
		data[i]=x; 
		return 1; 
	} 
} 
 
template 
int SeqList::Remove(T& x) 
{ 
	int i=Find(x); 
	if(i>=0){ 
		for(int j=i;j<=last;j++) 
			data[j] = data[j+1]; 
		last--; 
		return 1; 
	} 
	return 0; 
} 
 
template 
int SeqList::Next(T& x) 
{ 
	int i=Find(x); 
	if(x>=0 && i 
int SeqList::Prior(T& x) 
{ 
	int i=Find(x); 
	if(i>0 && i 
ostream& operator << (ostream& os,const SeqList& p) 
{ 
	for(int i=0;i<=p.last;i++) 
		os< 
istream& operator >> (istream& is,SeqList& p) 
{ 
	T item; 
	is>>item; 
	p.Insert(item,p.last+1); 
	return is; 
} 
#endif