首先是头文件 里面写好 方法跟属性
class List
{
public://限定要写的操作
List(int size);//构造
~List();//析构
void ClearList();//将引用全部清空,length为0就可以了
bool ListEmpty();
int ListLength();
bool GetElem(int i, int* e);
int LocateElem(int* e);
bool PriorElem(int* currentElem, int* preElem);//寻找前驱元素
bool NextElem(int* currentElem, int* nextElem);//后驱元素
void ListTraverse();
//插入跟删除真的很不方便
bool ListInsert(int i,int* e);
bool ListDelete(int i,int* e);
private://限定数据成员
//指向内存
int* m_pList;//指向一块内存 来做线性表
int m_iSize;//总的大小
int m_iLength;//当前的长度
};
上面这里定义了一个 int * m_pList来做指针寻找内存(c++要重学一次)
构造函数析构函数
然后其实 new int[] 里面 用哪个size差别都不大。
List::List(int size)
{
m_iSize = size;//大小指定好
m_pList = new int[m_iSize];//指定好内存
m_iLength = 0;
}
List::~List()
{//释放内存
delete[] m_pList;
m_pList = NULL;
}
最最关键的 增加 删除
//这里就跟我c#中的顺序队列很像
增加的时候首先判断 i(也就是增加的位置)是否符合规则
然后符合规则**【length-1】= 这个括号刚好就是最好一个元素的下标**
一直递减 直到让出合适的位置给 新的元素
bool List::ListInsert(int i,int * 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;//顺序不能弄错 一旦收到true 循环就结束了
}
bool List::ListDelete(int i, int * e)
{
if (i<0|| i >= m_iLength)//为什么不可以
{
return false;
}
*e = m_pList[i];
for (int k = 0; k < m_iLength; k++)
{
m_pList[k - 1] = m_pList[k];
}
m_iLength--;
return true;
}
获得 想要的元素 想要元素所在的位置
bool List::GetElem(int i, int * e)
{
if (i<0||i>=m_iSize)
{
return false;
}
*e = m_pList[i];//
return true;
}
int List::LocateElem(int * e)
{
for (int i = 0; i < m_iLength; i++)
{
if (m_pList[i]==*e)
{
return i;//返回位置
}
}
return -1;
}
遍历函数
void List::ListTraverse()
{
for (int i = 0; i < m_iLength; i++)
{
cout << m_pList[i] << endl;
}
}
还是得用c#再完成一次