#include<stdlib.h>
#include"List.h"
#include<iostream>
using?namespace?std;
int??main(void)
{
List?*list=new?List(10);
int?e1=5;
int?e2=6;
list->ListInsert(0,&e1);
list->ListInsert(1,&e2);
list->ListTraverse();
????system("pause");
return?0;
}
#include"List.h"
#include<iostream>
using?namespace?std;
List::List(int?size)
{
m_iSize=size;
m_pList=new?int[m_iSize];
m_iLength=0;
}
List::~List()
{
delete?[]m_pList;
m_pList=NULL;
}
void?List::ClearList()
{
m_iLength=0;
}
bool?List::ListEmpty()
{
return?m_iLength==0?true:false;
}
int?List::ListLength()
{
return?m_iLength;
}
bool?List::GetElem(int?i,int?*e)
{
if(i<0||i>=m_iSize)
{
return?false;
}
else
{
*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;
}
bool?List::PriorElem(int?*currentElem,int?*preElem)
{
int?temp=LocateElem(currentElem);
if(temp==-1)
{
return?false;
}
else
{
if(temp==0)
{
return?false;
}
else
{
*preElem=m_pList[temp-1];
return?true;
}
}
}
bool?List::NextElem(int?*currentElem,int?*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;
}
}
}
void?List::ListTraverse()
{
for(int?i=0;i<m_iLength;i++)
{
cout?<<?m_pList[i]<<endl;
}
}
bool?List::ListInsert(int?i,int?*e)
{
if(i<0||i>=m_iLength)
{
return?false;
}
else
{
for(int?k=m_iLength-1;k>=i;k--)
{
m_pList[k+1]=m_pList[k];
}
m_pList[i]=*e;
m_iLength++;
return?true;
}
}
bool?List::ListDelete(int?i,int?*e)
{
if(i<0||i>m_iLength)
{
return?false;
}
else
{
*e=m_pList[i];
for(int?j=i+1;j<m_iLength;j++)
{
m_pList[j-1]=m_pList[j];
}
m_iLength--;
return?true;
}
}
#ifndef?LIST_H
#define?LIST_H
class?List
{
public:
List(int?size);
~List();
void?ClearList();
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;
};
#endif
2018-01-15
ListInsert這個方法中if(i<0||i>=m_iLength) { return false;} 這個判斷錯了。
一開始m_iLength=0; 你執(zhí)行 list->ListInsert(0,&e1);時,傳入i=0 就return false;了,當(dāng)然也就沒法正確插入元素。
要理解m_iLength這個變量其實總是指向于數(shù)組最后一個元素的下一個元素。插入時是允許插入在該位置上的。刪除時才不能刪除該位置的元素。
應(yīng)該改成if(i<0 || i > m_iLength) {return false;}
順便一說,ListDelete這個方法相應(yīng)的地方也是錯的。