//线性表
//由同类型的数据元素构成的有序序列的线性结构
//线性表中没有元素的时候称为空表
//表起始位置称为表头,表结束的位置称为表尾
# include <iostream>
using namespace std;
class SubsequenceList
{
private:
int* pData;//指向顺序表
int tail;//指向当前的最后一个元素的后面的下标
int maxSize;//最大长度
public:
SubsequenceList(int maxSize)
{
this->maxSize=maxSize;
pData=new int[maxSize];
tail=0;
}
~SubsequenceList()
{
delete [] pData;
tail=0;
}
void showList();//显示整个顺序表
bool insertIntoList(int element,int index);//在指定的下标来插入元素
bool deleteElementByIndex(int index);//通过下标来删除元素
int findElementByIndex(int index);//通过下标查找元素
bool updataElementByIndex(int index,int element);//根据下标来更新内容
int getTail();//返回目前的尾部
int findElementByContent(int element);//通过元素的内容来查找元素
};
bool SubsequenceList::insertIntoList(int element,int index)//插入元素
{
if(index>this->tail+1)//在超过当前最大长度的时候,插入失败
{
return false;
}
else
{
if(index==this->tail)//如果要插在顺序表的最后一个元素的后一个元素
{
this->pData[index]=element;
this->tail++;//尾部下标后移
return true;//插入成功
}
else//插入的下标位于中间部分
{
for(int i=this->tail;i>index;i--)//依次向后移动位置
{
this->pData[i]=this->pData[i-1];
}
this->pData[index]=element;//插入元素
this->tail++;//指向最后元素的下标向后移动
return true;
}
}
}
int SubsequenceList::getTail() //返回当前的尾部
{
return this->tail;
}
void SubsequenceList::showList()//显示整个顺序表
{
//依次打印出所有的内容
for(int i=0;i<this->tail;i++)
{
cout<<this->pData[i]<<' ';
}
cout<<endl;
}
bool SubsequenceList::deleteElementByIndex(int index)//按照下标来删除元素
{
if(index>=this->tail||index<0)//如果要删除不在该顺序表中的元素
{
return false;//删除失败
}
else
{
for(int i=index;i<this->tail;i++)
{
this->pData[i]=this->pData[i+1];
}
//移动来删除要删除的位置
this->tail--;//长度减少
return true;//删除成功
}
}
int SubsequenceList::findElementByIndex(int index)//根据下标查找元素
{
if(index<0||index>=this->tail)//如果不在范围
{
return -1;//返回-1,查找失败
}
else
{
return this->pData[index];//返回效果
}
}
bool SubsequenceList::updataElementByIndex(int index,int element)//根据下标来更新数据
{
if(index<0||index>=this->tail)//不在范围的话,无法更新失败
{
return false;
}
else
{
this->pData[index=element];
return true;
}
}
int SubsequenceList::findElementByContent(int element)//根据内容查找对应的信息
{
bool isFind=false;//是否找到的标志
int index=-1;//找到的下标
for(int i=0;i<this->tail;i++)
{
if(this->pData[i]==element)//找到了
{
isFind=true;
index=i;
break;
}
}
if(isFind)
{
return index;
}
else
{
return index;
}
}
int main(void)//测试类
{
SubsequenceList* s=new SubsequenceList(100);
s->insertIntoList(1,0);
s->insertIntoList(2,1);
s->insertIntoList(3,2);
s->insertIntoList(6,1);
s->deleteElementByIndex(0);
s->showList();
return 0;
}