代码:
#include <iostream>
#include <vector>
#include <string.h>
#include <cmath>
#include <algorithm>
using namespace std;
class ListClass{
int *ListPtr;//指向线性表的指针
int nLen;//线性表的长度
int nElem;//线性表中元素个数
public:
ListClass(int n=10)//构造函数
{
nElem=0;
nLen=n;
if(n)
ListPtr=new int[n];//分配空间
else
ListPtr=NULL;
}
~ListClass()//析构函数
{
delete []ListPtr;//释放线性表的空间
}
int Elem(int);//重载函数1:在线性表末尾添加元素
int &Elem(unsigned n)//重载函数2:返回下标为n的元素的引用
{
return ListPtr[n];
}
int Elem(void)//重载函数3:返回线性表中的元素个数
{
return nElem;
}
int Len(void)
{
return nLen;
}
int GetElem(int i)
{
if(i<nElem&&i>=0)
return ListPtr[i];
else
{
cout<<"下标越界"<<endl;
return -1;
}
}
void Print(void);
};
int ListClass::Elem(int elem)
{
if(nLen==nElem)//线性表已满
{
int *newptr;
newptr=new int[nLen+10];//申请新的线性表的空间,一次扩充10个
for(int i=0;i<nLen;i++)
newptr[i]=ListPtr[i];
delete []ListPtr;
ListPtr=newptr;
nLen+=10;
}
ListPtr[nElem++]=elem;
return nElem;
}
void ListClass::Print(void)
{
for(int i=0;i<nElem;i++)
cout<<ListPtr[i]<<"\t";
cout<<endl;
}
int main()
{
ListClass list(6);
for(int i=0;i<5;i++)
list.Elem(i);//向线性表中添加元素
cout<<"线性表的长度为:"<<list.Len()<<endl;
cout<<"线性表中的元素个数为:"<<list.Elem()<<endl;//调用重载函数3
cout<<"线性表中的元素为:";
list.Print();
list.Elem(3u)=100;
cout<<"线性表中下标为3的元素的值为:"<<list.GetElem(3)<<endl;
list.Elem(20);
list.Elem(200);//向线性表末尾添加20和200
cout<<"现在线性表的长度为:"<<list.Len()<<endl;
cout<<"现在线性表中元素个数为:"<<list.Elem()<<endl;//调用重载函数3
cout<<"现在线性表中的元素为:"<<endl;
list.Print();
cout<<"线性表中的最后一个元素为:"<<list.GetElem(list.Elem()-1)<<endl;//调用重载函数3
return 0;
}
输出结果:
线性表的长度为:6
线性表中的元素个数为:5
线性表中的元素为:0 1 2 3 4
线性表中下标为3的元素的值为:100
现在线性表的长度为:16
现在线性表中元素个数为:7
现在线性表中的元素为:
0 1 2 100 4 20 200
线性表中的最后一个元素为:200