第二章 线性表

线性表的特性:有限性、相同性、顺序性

一、顺序表:

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为后继指针域,存放该节点的后驱节点的地址。

 


 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值