InitList( ):初始化顺序表
Insert(int L,int Elem):在L位置插入值Elem
1.检查内存空间是否够,如果实际长度大于或等于最大容量,则要用realloc扩展内存空间
2.判断插入的位置L是否合法
3.如果插入到表头或表中,则要把元素往后挪。如果插入到表尾,直接赋值。长度加一
Delete(int L):删除L位置上的元素
1.检查线性表是否为空
2.判断位置是否合法
3.取出L位置的值,作为返回值
4.把后边的元素往前移,长度减一
Locate(int Elem):返回Elem的位置
GetElem(int L):返回L位置上的值
ListLength( ):返回线性表的长度
ListEmpty( ):返回布尔值,线性表空返回真,不空返回假
class SqList{
private:
int *Head;//顺序表的首地址
int length;//实际长度,从1开始
int MaxSize;//最大长度,超过这个数就要扩展申请的内存空间
public:
SqList(int N);
~SqList();
void InitList();//初始化线性表
bool ListEmpty();//是否为空
int ListLength();//线性表的长度
int GetElem(int L);//获取某个位置的值
int Locate(int Elem);//某个值的位置
int Insert(int L,int Elem);//插入
int Delete(int L);//删除
};
SqList::SqList(int N)
{
MaxSize=N;
length=0;
Head=(int*)malloc(N*sizeof(int));//申请一块内存
}
SqList::~SqList()
{
free(Head);
MaxSize=0;
length=0;
}
void SqList::InitList()
{
cout<<"请输入所有的数值:"<<endl;
for (int i=0;i<MaxSize;i++)
{
cin>>*(Head+i);
length++;
}
}
bool SqList::ListEmpty()
{
if(!length)//length==0时返回真
return true;
else
return false;
}
int SqList::ListLength()
{
return length;
}
int SqList::GetElem(int L)
{
if (L<1||L>length)
{
cout<<"位置不合法"<<endl;
return -1;
}
return *(Head+L-1);
}
int SqList::Locate(int Elem)
{
for (int i=0;i<length;i++)
if (Head[i]==Elem)
return i+1;
cout<<"无法找到"<<endl;
return -1;
}
int SqList::Delete(int L)
{
int j,elem;
if (length==0)
{
cout<<"下溢"<<endl;
return -1;
}
if (L<1||L>length)
{
cout<<"位置不合法"<<endl;
return -1;
}
elem=*(Head+L-1);
for (j=L-1;j<length-1;j++)
{
*(Head+j)=*(Head+j+1);//等于后一位的值
}
length--;
return elem;
}
int SqList::Insert(int L,int Elem)
{
int j;
if (length>=MaxSize)//如果空间不够,就要扩大申请的内存
{
Head=(int*)realloc(Head,MaxSize*2*sizeof(int));
MaxSize+=MaxSize;
}
if (L<1||L>length+1)
{
cout<<"位置错误,无法插入"<<endl;
return -1;
}
if (L!=length+1)
//把L-1及之后的元素往后挪
for (j=length-1;j>=L-1;j--)
{
*(Head+j+1)=*(Head+j);//等于前一个的值
}
*(Head+L-1)=e;
length++;
return 0;
}