PTA 7-1 顺序表的建立及遍历 (30 分)
#include <iostream>
#include <cassert>
#include <cstdlib>
#include <ctime>
using namespace std;
typedef int T;
const int defaultSize = 100;
class SeqList
{
private:
T* data;//指向动态内存分配数组的指针
int maxSize;//动态内存分配数组的大小
int last;//标识顺序表中最后一个元素的位置
void Resize(int newSize)
{
maxSize=newSize;
}
public:
SeqList(int sz=defaultSize)//构造函数
{
last=-1;
data=new T[sz];
maxSize=defaultSize;
}
SeqList(const SeqList& L)//拷贝构造函数
{
maxSize=L.maxSize;
last=L.last;
for(int i=0;i<last;i++)
{
data[i]=L.data[i];
}
}
SeqList& operator=(const SeqList& L)//赋值运算符函数
{
maxSize=L.maxSize;
last=L.last;
for(int i=0;i<last;i++)
{
data[i]=L.data[i];
}
return *this;
}
~SeqList()//析构函数
{
delete []data;
last=0;
}
/* virtual int Size() const//返回顺序表的容量
{
return maxSize;
}
virtual int Length() const//返回顺序表中元素的个数
{
return last+1;
}
virtual int Search(T & x) const//在顺序表中搜索x
{
for(int i=0;i<=last;i++)
{
if(data[i]==x)
{
return i+1;
}
}
return 0;
}
virtual int Locate(int i) const//检验顺序表中是否存在第i个元素
{
if(i>last+1)
return false;
return true;
}
virtual bool GetData(int i, T& x) const//获取顺序表中第i个位置的元素
{
if(Locate(i-1))
{
x=data[i-1];
return true;
}
return false;
}
virtual void SetData(int i, T& x)//将顺序表中第i个位置的元素赋值为x
{
if(Locate(i-1))
{
data[i-1]=x;
}
}
virtual bool IsEmpty() const//顺序表是否为空
{
return last==0;
}
virtual bool IsFull() const//顺序表是否为满
{
return last==maxSize;
}
virtual bool Insert(int i, const T& x) //在顺序表的第i个元素的位置插入x
{
if(i<=last+2)
{
int j;
for( j=last+1;j>=i;j--)
{
data[j]=data[j-1];
}
data[j]=x;
last++;
return true;
}
return false;
}
virtual bool Remove(int i, T&x) //删除顺序表第i个位置的元素
{
if(Locate(i))
{
for(int j=i-1;j<last;j++)
{
data[j]=data[j+1];
}
last--;
return true;
}
return false;
}
virtual void Sort() //对顺序表中元素进行排序
{
for(int i=0;i<last;i++)
{
for(int j=i;j<=last;j++)
{
if(data[i]>data[j])
{
T temp;
temp=data[i];
data[i]=data[j];
data[j]=temp;
}
}
}
}*/
friend istream& operator>>(istream& in, SeqList & L)//输入运算符重载
{
int i,num;
in>>num;
if(num<0) L.last=-1;
L.last=num-1;
for(i=0;i<=L.last;i++)
{
in>>L.data[i];
}
return in;
}
friend ostream& operator<<(ostream& out, const SeqList& L)//输出运算符重载
{
int i;
for(i=0;i<=L.last;i++)
{
if(i==L.last)
{
out<<L.data[i];
}
else
out<<L.data[i]<<" ";
}
return out;
}
/* void Reverse ()//逆置顺序表中的元素
{
for(int i=0;i<=last/2;i++)
{
int temp;
temp=data[i];
data[i]=data[last-i];
data[last-i]=temp;
}
}*/
};
int main()
{
SeqList sList;
cin>>sList;
/* int i, val;
cin>>i>>val;
sList.Insert(i,val);*/
cout<<sList;
/* cin>>i;
sList.Remove(i,val);
cout<<sList;
cin>>val;
i=sList.Search(val);
if(i==0)
cout<<"Not found"<<endl;
else
cout<<i<<endl;
sList.Reverse();
cout<<sList;*/
}