顺序表基本代码(C++)
还是小白不喜误喷!!!
#include<iostream>
using namespace std;
class SqList
{
public:
**//构造函数**
SqList()
{
cout<<"请输入顺序表的初始分配量:";
cin>>size;
data=new int[size];
if(!data)exit('OVERFLOW');
length=0;
}
**//析构函数**
~SqList()
{
cout<<"Destruct called."<<endl;
delete[]data;
}
**//创建顺序表**
void InitSqList()
{
int n;
cout<<"请输入该顺序表中的元素个数:";
cin>>n;
cout<<"该顺序表为:";
for(int i=0;i<n;i++)
{
cin>>data[i];
}
length=n;
}
**//获取长度**
int SqListLength()
{
return length;
}
**//获取元素**
bool GetElem(int i,int &e)
{
if(i<1||i>length+1)
return false;
e=data[i-1];
return true;
}
**//定位元素**
void LocateElem(int e)
{
int i;
for(i=0;i<length;i++)
{
if(data[i]==e)break;
}
if(i==length)
cout<<"找不到"<<endl;
else
cout<<"该结点位置为:"<<(i+1)<<endl;
}
**//插入操作**
void SqListInsert(int i,int e)
{
if(i<1||i>length+1)cout<<"ERROR"<<endl;
if(length>=size)
{
int *newdata;
newdata=new int[size+10];
if(!newdata)exit('OVERFLOW');
for(int i=0;i<length;i++)
{
newdata[i]=data[i];
}
delete[]data;
data=newdata;
size+=10;
}
int *p;
int *q;
q=&data[i-1];
for(p=&data[length-1];p>=q;p--)
{
*(p+1)=*p;
}
*q=e;
length+=1;
}
**//删除操作**
void SqListDelete(int i,int &e)
{
if(i<1||i>length-1)cout<<"ERROR"<<endl;
int *p;
int *q;
p=&data[i-1];
q=&data[length-1];
e=*p;
for(;p<q;p++)
{
*p=*(p+1);
}
length-=1;
}
**//选择排序(升序)**
void SqListResort()
{
int i,j,k,tem;
for(i=0;i<length-1;i++)
{
k=i;
for(j=i+1;j<length;j++)
{
if(data[k]>data[j])
k=j;
}
tem=data[k];
data[k]=data[i];
data[i]=tem;
}
}
**//倒置操作**
void SqListInversion()
{
int tem;
for(int i=0;i<length/2;i++)
{
tem=data[i];
data[i]=data[length-1-i];
data[length-1-i]=tem;
}
}
**//输入操作**
void print()
{
for(int i=0;i<length;i++)
{
cout<<data[i]<<" ";
}
cout<<endl;
}
private:
int size;
int *data;
int length;
};
int main()
{
SqList sqlist;
sqlist.InitSqList();
int a;
cout<<"输入所要查找的整数:";
cin>>a;
sqlist.LocateElem(a);
int i,x;
cout<<"输入欲插入的位置i:";
cin>>i;
cout<<"输入欲插入的数值x:";
cin>>x;
sqlist.SqListInsert(i,x);
sqlist.print();
int j,y;
cout<<"输入欲删除的位置j:";
cin>>j;
sqlist.SqListDelete(j,y);
cout<<"该删除的数值y为:"<<y<<endl;
sqlist.print();
cout<<"排序后(升序)的顺序表为:";
sqlist.SqListResort();
sqlist.print();
cout<<"倒置后的顺序表为:";
sqlist.SqListInversion();
sqlist.print();
return 0;
}