- UID
- 2198
注册时间2005-6-29
阅读权限255
最后登录1970-1-1
副坛主
该用户从未签到
|
楼主 |
发表于 2009-9-1 20:03:23
|
显示全部楼层
用老师课上的参数来实现顺序表
//----------------------------------
//
// Code By: Nisy/KeRui05
// Array.h 文件
//
//----------------------------------
template <typename T>
class Array
{
private:
T * pFirst;
T * pLast;
int nSpace;
public:
// 创建、销毁
Array(int nSize);
virtual ~Array();
public:
// 清空、追加、插入、删除、取元素
void ClearArray();
int AppendArray(T& data); // 在添加数据时 如果是浅Copy 则直接赋值 否则重载'='
int InsertArray(int nIndex,T& data);
int DeleteArray(int nIndex,T& data);
int GetElement(int nIndex,T& data);
public:
// 判空、判满、释放空间、申请空间
int IsFull();
int IsEmpty();
void Release();
void AllocSpace();
T * Begin() {return pFirst;}
T * End() {return pLast;}
public:
// 开始模拟迭代器
class iterator
{
private:
T * pCur;
public:
iterator(T * cur)
{
pCur=cur;
}
T* operator++(int)
{
T * pTemp = pCur;
pCur++;
return pTemp;
}
bool operator!=(T * cur)
{
return pCur!=cur;
}
T operator*()
{
return * pCur;
}
};
};
//================================================== 函数的定义
//================================ 实现创建、销毁、清空
template <typename T>
Array<T>::Array(int nSize)
{
pFirst = pLast = new T[nSpace=nSize];
}
template <typename T>
Array<T>::~Array()
{
Release();
}
template <typename T>
void Array<T>::ClearArray()
{
pLast = pFirst;
}
//================================ 实现追加、插入、删除、查找
template <typename T>
int Array<T>::AppendArray(T& data)
{
if(IsFull())
AllocSpace();
pLast[0]=data; // 这里是浅Copy 无需重载等号 // nLast[0] == *(nLast+0)
pLast++;
return 1;
}
template <typename T>
int Array<T>::InsertArray(int nIndex,T& data)
{
if(IsEmpty())return 0;
for(int i=pLast-pFirst;i>=nIndex;i--)
{
pFirst[i]=pFirst[i-1];
}
pFirst[nIndex-1]=data;
pLast++;
return 1;
}
template <typename T>
int Array<T>::DeleteArray(int nIndex,T& data)
{
if(nIndex < 0 || nIndex > pLast - pFirst || IsEmpty()) return 0;
data=pFirst[nIndex-1];
for(int i=nIndex;i<pLast-pFirst;i++) // Err
pFirst[i-1]=pFirst[i];
pLast--;
return 1;
}
template <typename T>
int Array<T>::GetElement(int nIndex,T& data)
{
;
}
//================================ 实现空间释放、空间申请、判空、判满
template <typename T>
void Array<T>::Release()
{
if(pFirst)
{
delete[] pFirst;
pFirst=NULL;
}
}
template <typename T>
void Array<T>::AllocSpace()
{
int nNewSize = nSpace * 2; // 这里偷个懒 直接* 2操作
T * pNewSpace = new T[nNewSize];
if(!pNewSpace) return; // 申请失败 直接挂掉
memcpy(pNewSpace,pFirst,sizeof(T)*nSpace);
Release();
pFirst = pNewSpace;
pLast = pFirst + nSpace;
nSpace = nNewSize;
}
template <typename T>
int Array<T>::IsFull()
{
return pLast == pFirst + nSpace;
}
template <typename T>
int Array<T>::IsEmpty()
{
return pLast == pFirst;
}
//-------------- Array.h End -------------------- |
|