template<typename T>
class CLinearList{
private:
// data;
T* m_pData;
int m_nLength;
int m_nSize;
public:
// constructors;
CLinearList(void);
CLinearList(int size);
~CLinearList(void);
// methods;
bool mFind(T data) const;
int mSearch(T data) const;
void mAdd(T data);
void mDelete(T data);
int mLength() const;
int mSize() const;
void mPrint() const;
};
template<typename T>
CLinearList<T>::CLinearList() :
m_nSize(100), m_nLength(0) {
m_pData = new T[m_nSize];
}
template<typename T>
CLinearList<T>::CLinearList(int size) :
m_nLength(0), m_nSize(size){
m_pData = new T[m_nSize];
}
// de-constructor;
template<typename T>
CLinearList<T>::~CLinearList(){
delete[] m_pData;
m_pData = NULL;
}
template<typename T>
bool CLinearList<T>::mFind(T data) const{
for (int i = 0; i < m_nLength; i++)
if (data == m_pData[i])
return true;
return false;
}
template<typename T>
int CLinearList<T>::mSearch(T data) const{
for (int i = 0; i < m_nLength; i++)
if (data == m_pData[i])
return i;
return -1;
}
template<typename T>
void CLinearList<T>::mAdd(T data){
if (m_nLength >= m_nSize){
m_nSize *= 2;
T* pData = new T[m_nSize];
for (int i = 0; i < m_nLength; i++)
pData[i] = m_pData[i];
delete[] m_pData;
m_pData = pData;
}
m_pData[m_nLength ] = data;
m_nLength++;
}
template<typename T>
void CLinearList<T>::mDelete(T data){
int j = mSearch(data);
if (j >= 0){
for (int i = j; i < m_nLength - 1 ; i++)
m_pData[i] = m_pData[i + 1];
m_nLength--;
}
else
return; // -1
}
template<typename T>
int CLinearList<T>::mLength() const{
return m_nLength;
}
template<typename T>
int CLinearList<T>::mSize() const{
return m_nSize;
}
template<typename T>
void CLinearList<T>::mPrint() const{
if (0 == m_nLength)
printf("No Data\n");
for (int i = 0; i < m_nLength; i++){
printf("%d\t", m_pData[i]);
if (i % 10 == 0)
printf("\n");
}
printf("\n");
}
利用数组实现的线性表,虽然可以弹性增减数组规模,并做到随机存取,然而,本身面对庞大的连续空间,很多情况下只能让人望而却步。<\p>