📄 clist.h
字号:
//表类
#ifndef clist
#define clist
#include "listIterator.h"
#include <assert.h>
#include"link.h"
template <class T> class link;
template <class T> class listIterator;
template <class T> class list
{
public:
list();
list(const list<T> & source);
virtual ~list();
virtual void add (T value);
virtual void deleteAllValues();
T firstElement() const;
virtual int includes(T value)const;
int isEmpty()const;
virtual void removeFirst();
list<T> *duplicate()const;
protected:
link<T> *ptrToFirstLink;
friend class listIterator<T>;
};
template <class T> list<T>::list():ptrToFirstLink(0)
{
}
template <class T>int list<T>::isEmpty()const
{
return ptrToFirstLink==0;
}
template<class T> list<T>::list(const list<T> & source)
{
if(source.isEmpty())
ptrToFirstLink=0;
else
{
link<T> *firstlink=source.ptrToFirstLink;
ptrToFirstLink=firstlink->duplicate();
}
}
template <class T> void list<T>::add(T val)
{
ptrToFirstLink=new link<T>(val,ptrToFirstLink);
assert(ptrToFirstLink!=0);
}
template <class T> T list<T>::firstElement()const
{
assert(ptrToFirstLink!=0);
return ptrToFirstLink->value;
}
template <class T> void list<T>::removeFirst()
{
assert(ptrToFirstLink!=0);
link<T> *p=ptrToFirstLink;
ptrToFirstLink=p->ptrToNextLink;
delete p;
}
template <class T> int list<T>::includes(T v)const
{
for (link<T> *p=ptrToFirstLink;p;p=p->ptrToNextLink)
if (v==p->value)
return 1;
return 0;
}
template <class T> void list<T>::deleteAllValues()
{
link<T> *next;
for(link<T> *p=ptrToFirstLink;p!=0;p=next)
{
next=p->ptrToNextLink;
p->ptrToNextLink=0;
delete p;
}
ptrToFirstLink=0;
}
template <class T> list<T> *list<T>::duplicate()const
{
list<T> *newlist=new list<T>;
assert(newlist!=0);
if(ptrToFirstLink)
newlist->ptrToFirstLink=ptrToFistLink->duplicate();
return newlist;
}
template <class T>list<T>::~list()
{
deleteAllValues();
}
#endif //glist
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -