线性表的特性:有限性、相同性、顺序性
一、顺序表:
1、顺序表有参构造函数SeqList:
template<class DatType>
SeqList<DataType>::SeqList(DataType a[ ],int n)
{
if(n>MaxSize)throw"参数非法";
for(i=0;i<n;i++)
data[i]=a[i];
length=n;
}
2、顺序表按位查找算法Get:
template<class DataaType>
DataType SeqList<DataType>::Get(int i)
{
if(i<1||i>length)throw"查找位置非法";
else return data[i-1];
}
3、顺序表按值查找算法Locate:
template <class DataType>
int SeqList<DataType>::Locate(DataType x)
{
for(i=0;i<length;i++)
if(data[i]==x)return i+1;
return 0;
}
4、顺序表插入算法Insert:
template<class DataType>
void SeqList<DataType>::Inerst(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++;
}
5、顺序表删除算法Delete:
template<class DataType>
DataType SeqList<DataType>::Delete(int i)
{
if(length==0)throw"下溢";
if(1<||ilength)throw“位置”;
x=data[i-1];
for(j=i;j<length;j++)
data[j-1]=data[j];
length--;
return x;
}
6、顺序表遍历算法PrintList:
template<class DataType>
void SeqList<DataType>::PrintList()
{
for(i=0;i<length;i++)
cout<<data[i];
}
7、在顺序表中实现安置查找操作,如果查找成功,返回元素的序号,反之,返回查找失败的标志“0”。
8、注意算法中元素移动的方向,必须从最后一个元素开始移动,直至将第i个元素后移为止,如果表满了,则引发上溢异常;如果元素的插入位置不合理,则引发位置异常。
二、单链表:
1、单链表的开始结点之前福涉一个类型相同的结点,成为头结点。不存储数据,从第二个节点开始储存。
2、单链表遍历算法PrintList:
template <class DataType>
void LinkList<DataType>::PrintList()
{
p=first->next;
while(p!=NULL)
{
cout<<p->data;
p=p->next;
}
}
3、求线性表长度算法Length:
template <class DataType>
int LinkList<DataTyp>::Length()
{
p=first->next;cout=0;
while(p!=NULL)
{
p=p->next;
cout++;
}
return count;
}
4、单链表按位查找算法Get:
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;
}
5、单链表按值查找算法Locate:
template <class DataType>
int LinkList<DataType>::Locate(DataType x)
{
p=first->next;count=1;
while(p!=NULL)
{
if(p->data==x)return count;
p=p->next;
count++;
}
return 0;
}
6、单链表插入算法Insert:
template <class DataType>
void LinkList<DataType>::Insert(int i;DataTpe x)
{
p=first;count=0;
while(p!=NULL && count<i-1)
{
p=p->next;
count++;
}
if(p==NULL)throw"位置";
else{
s=new Node;s->data=x;
s->next=p->next;p->next=s;
}
}
7、无参构造函数LinkList:
template <class DataType>
LinkList<DataType>::LinkList()
{
first=new Node;
first->next=NULL;
}
8、头插法建立单链表LinkList:
template<class DataType>
LinkList<DataType>::LinkList(DataType a[ ],int n)
{
first=new Node;first->next=NULL;
for(i=0;i<n;i++)
{
s-new Node;s->data=a[i];
s->next=first->next;first->next=s;
}
}
9、单链表删除算法Delete:
template <class DataType>
DataType LinkList<DataType>::Delete(int i)
{
p=first;count=0;
while(p!=NULL && count<i-1)
{
p=p->next;
count++;
}
if(p==NULL || p->next==NULL)
THROW"";
els{
q=p->next;x=q->data;
p->next=q->next;
delete q;
return x;
}
}
10、单链表析构函数算法~LinkList:
template <class DataType>
LinkList<DataType>::~LnkList()
{
while(first!=NULL)
{
q=first;
first=first->next;
delete q;
}
}
三、循环链表:
在单链表中,如果将终端节点的指针域由空指针改为指向头结点,就是整个单链表形成一个环,这种头尾相接的单链表成为循环链表。
四、双链表:
1、data为数据域,存放数据元素。
2、prior为前驱指针域,存放该节点的前驱节点的地址。
3、next为后继指针域,存放该节点的后驱节点的地址。