2.1线性表的逻辑结构
线性表简称表,是n(n ≥0)个具有相同类型的数据元素的有限序列,线性表中数据元素的个数称为线性表的长度。长度等于0时称空表,一个非空表通常记作:
L=(a1,a2,......an)
1.有限性:元素个数有限
2.相同性:元素类型相同
3.顺序性:除首位元素外,相邻元素都有前驱和后继
2.1.2线性表的抽象数据类型定义
前置条件:线性表不存在
输入:无
功能:线性表的初始化
输出:无
后置条件:一个空的线性表
前置条件:线性表已存在
输入:无
功能:销毁线性表
输出:无
后置条件:释放线性表所占有的存储空间
前置条件:线性表已存在
输入:无
功能:求线性表的长度
输出:线性表中数据元素的个数
后置条件:线性表不变
前置条件:线性表已存在
输入:元素的序号i
功能:按位查找,在线性表中查找序号为i的数据元素
输出:如果序号合法,返回序号为i的元素值,否则抛出异常
后置条件:线性表不变
线性表的顺序存储结构称为顺序表
template<class DataType>
SqeList<DataType>::SeqList(DataType a[ ],int n)
{
if (n>MaxSize)throw"参数非法";
for(i=0;i<n;i++)
data[i ]=a[ i];
length=n;
}
template<class DataType>
DataType SeqList<DataType>::Get(int i)
{
if(i<1||i>length)throw"查找位置非法";
else return data[i-1];
}
template<class DataType>
int SeqList<DataType>::Locate(DataType x)
{
for(i=0;i<length;i++)
if(data[i]==x)returni+1;
return0;
}
template<class DataType>
void SeqList<DataType>::Insert(int i,DataType x)
{
if(length>=MaxSize)throw"上溢";
if(i<1||i>length+1)throw"位置";
for(j=length;j>i;j--)
data[j]=data[j-1];
data[i-1]=x;
length++;
}
template<class DataType>
DataType SeqList<DataType>::Delete(int i)
{
if (length==0)throw"下溢" ;
if(i<1||i>length)throw"位置";
x=data[i-1];
for(j=i;j<length:j++)
data[j-1]=data[j];
length--;
return x;
}
template<class DataTtpe>
int LinkList<DataType>::Length()
{
p=first->next;count=0;
while(p!=NULL)
{
p=p->next;
count++;
}
return count;
}
template<class DataType>
DataType LinkList<DataType>::Get(int i)
{
p=first->next;count=1;
while(p!=NULL&&count<i)
{
p=p->next;
count++;
}
if(p==NULL)throw"位置";
else return p->data;
}
template<class DataType>
DataType LinkList<DataType>::Get(int i)
{
p=first->next;count=1;
while(p!=NULL&&count<i)
{
p=p->next;
count++;
}
if(p==NULL)throw"位置";
else return p->data;
}
template<class DataType>
LinkList<DataType>::LinkList()
{
first=new Node;
first->next=NULL;
}
template<class DataType>
LinkList<DataType>::~LinkList()
{
while(first!=NULL)
{
q=first;
first=first->next;
delete q;
}
}
在单链表中,如果将终端结点的指针域由空指针改为指向头结点,就使整个单链表形成一个环,这种头尾相接的单链表被称为循环单链表,简称循环链表。