⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 list.h

📁 M树源代码
💻 H
字号:
#ifndef LIST_H#define LIST_H#include <ostream.h>#include <assert.h>template<class T> struct GiSTlistnode;// this class extends the GiSTlist by adding the count and some access functionstemplate <class T>class list {public:	list(): count(0), front(NULL), rear(NULL) {}	int IsEmpty() const { return front==NULL; }	T First() const {		assert(front!=NULL);		return front->entry;	}	T Last() const {		assert(rear!=NULL);		return rear->entry;	}	T RemoveFirst() {		assert(front!=NULL);		GiSTlistnode<T> *temp=front;		T e=front->entry;		front=front->next;		if(front) front->prev=NULL;		else rear=NULL;		delete temp;		return e;	}	T RemoveLast() {		assert(rear!=NULL);		GiSTlistnode<T> *temp=rear;		T e=rear->entry;		rear=rear->prev;		if(rear) rear->next=NULL;		else front=NULL;		delete temp;		return e;	}	virtual void Insert(T entry) { Append(entry); }	unsigned int Count() const { return count; }#ifdef PRINTING_OBJECTS	void Print(ostream& os) const {		GiSTlistnode<T> *temp=front;		os << "List entries:\n";		while(temp) {			os << "\t" << temp->entry;			temp=temp->next;		}		os << endl;	}#endifprotected:	void Append(T entry) {		GiSTlistnode<T> *temp=new GiSTlistnode<T>;		temp->entry=entry;		temp->prev=rear;		temp->next=NULL;		if(front==NULL) front=temp;		else rear->next=temp;		rear=temp;	}	unsigned int count;	GiSTlistnode<T> *front, *rear;};// this class implements an ordered listtemplate <class T>class orderedlist: public list<T> {public:	orderedlist(int func(T, T)): compare(func), list<T>() { }	virtual void Insert(T entry) {		GiSTlistnode<T> *temp=front;		while((temp)&&(compare(temp->entry, entry)<0))			temp=temp->next;		if(temp) InsertBefore(temp, entry);		else Append(entry);	}private:	void InsertAfter(GiSTlistnode<T> *node, T entry) {		GiSTlistnode<T> *temp=new GiSTlistnode<T>;		temp->entry=entry;		temp->prev=node;		temp->next=node->next;		node->next=temp;		if(rear==node) rear=temp;		else temp->next->prev=temp;	}		void InsertBefore(GiSTlistnode<T> *node, T entry) {		GiSTlistnode<T> *temp=new GiSTlistnode<T>;		temp->entry=entry;		temp->prev=node->prev;		temp->next=node;		node->prev=temp;		if(front==node) front=temp;		else temp->prev->next=temp;	}		int (*compare)(T, T);	// should return <0 if T1<T2};#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -