#pragma once
#ifndef _LIST_H_
#define _LIST_H_
#include<iostream>
using namespace std;
template<typename T>
class List
{
public:
List(int size);
~List();
void ClearList();
bool isEmpty(); //检测线性表是否为空
int ListLength(); //获取线性表的长度
bool GetElem(int i, T *e); //找寻对应元素的序号
int LocateElem(T *e); //获取第一个满足e的数据元素的位序
bool PriorElem(T *currentElem, T *preElem); //获取当前元素的前一个元素
bool NextElem(T *currentElem, T *nextElem); //获取当前元素的后一个元素
bool ListInsert(int i, T *e); //插入一个元素
bool ListDelete(int i, T *e); //删除一个元素
void ListTraverse(); //遍历线性表
private:
T *m_pList;
int m_iSize;
int m_iLength;
};
#endif // !_LIST_H_
template<typename T>
inline List<T>::List(int size)
{
m_iSize = size;
m_pList = new T[m_iSize];
m_iLength = 0;
}
template<typename T>
inline List<T>::~List()
{
delete[] m_pList;
m_pList = NULL;
}
template<typename T>
inline void List<T>::ClearList()
{
m_iLength = 0;
}
template<typename T>
inline bool List<T>::isEmpty()
{
return m_iLength == 0 ? true : false;
}
template<typename T>
inline int List<T>::ListLength()
{
return m_iLength;
}
template<typename T>
inline bool List<T>::GetElem(int i, T * e)
{
if (i < 0 || i >= m_iSize)
{
return false;
}
*e = m_pList[i];
return true;
}
template<typename T>
inline int List<T>::LocateElem(T * e)
{
for (int i = 0; i < m_iLength; i++)
{
if (m_pList[i] == *e)
{
return i;
}
}
return -1;
}
template<typename T>
inline bool List<T>::PriorElem(T * currentElem, T * preElem)
{
int temp = LocateElem(currentElem);
if (temp == -1)
{
return false;
}
else
{
if (temp == 0)
{
return false;
}
else
{
*preElem = m_pList[temp - 1];
return true;
}
}
}
template<typename T>
inline bool List<T>::NextElem(T * currentElem, T * nextElem)
{
int temp = LocateElem(currentElem);
if (temp == -1)
{
return false;
}
else
{
if (temp == m_iLength-1)
{
return false;
}
else
{
*nextElem = m_pList[temp + 1];
return true;
}
}
}
template<typename T>
inline bool List<T>::ListInsert(int i, T * e)
{
if (i<0 || i>m_iLength)
{
return false;
}
for (int k = m_iLength - 1; k >= i; k--)
{
m_pList[k + 1] = m_pList[k];
}
m_pList[i] = *e;
m_iLength++;
return true;
}
template<typename T>
inline bool List<T>::ListDelete(int i, T * e)
{
if (i<0 || i>=m_iLength)
{
return false;
}
*e = m_pList[i];
for (int k = i + 1; k < m_iLength; k++)
{
m_pList[k - 1] = m_pList[k];
}
m_iLength--;
return true;
}
template<typename T>
inline void List<T>::ListTraverse()
{
for (int i = 0; i < m_iLength; i++)
{
cout << m_pList[i] << endl;
}
}
《数据结构之线性篇》-线性表的C++实现
最新推荐文章于 2024-04-02 23:52:43 发布