第二章线性表

来源:互联网 发布:网络主播低俗 编辑:程序博客网 时间:2024/06/05 19:27

2.1线性表的逻辑结构

定义:

线性表简称表,是nn ≥0)个具有相同类型的数据元素的有限序列,线性表中数据元素的个数称为线性表的长度。长度等于0时称空表,一个非空表通常记作:

L=a1,a2,......an

线性表的性质:

1.有限性:元素个数有限

2.相同性:元素类型相同

3.顺序性:除首位元素外,相邻元素都有前驱和后继

2.1.2线性表的抽象数据类型定义

I nitList

前置条件:线性表不存在

输入:无

功能:线性表的初始化

输出:无

后置条件:一个空的线性表

DsetroyList

前置条件:线性表已存在

输入:无

功能:销毁线性表

输出:无

后置条件:释放线性表所占有的存储空间

Length

前置条件:线性表已存在

输入:无

功能:求线性表的长度

输出:线性表中数据元素的个数

后置条件:线性表不变

Get

 前置条件:线性表已存在

输入:元素的序号i

功能:按位查找,在线性表中查找序号为i的数据元素

输出:如果序号合法,返回序号为i的元素值,否则抛出异常

后置条件:线性表不变

2.2线性表的顺序存储结构及实现

2.2.1线性表的顺序存储结构——顺序表

定义:

线性表的顺序存储结构称为顺序表

顺序表有参构造函数Seqlist

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;

}

顺序表按位查找算法Get

template<class DataType>

DataType SeqList<DataType>::Get(int i)

{

if(i<1||i>length)throw"查找位置非法";

else return data[i-1];

}

顺序表查找算法Locate

template<class DataType>

 int SeqList<DataType>::Locate(DataType  x)

{

for(i=0;i<length;i++)

if(data[i]==x)returni+1;

return0;

}

顺序表插入算法Insert

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++;

}

顺序表删除算法Delete

 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;

}

2.3线性表的链接存储结构及实现

2.3.1单链表

求线性表长度算法Length

template<class DataTtpe>

 int LinkList<DataType>::Length()

{

p=first->next;count=0;

while(p!=NULL)

{

p=p->next;

count++;

}

return count;

}

单链表按位查找算法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;

}

 单链表按值查找算法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;

}

无参构造函数LinkList

template<class DataType>

LinkList<DataType>::LinkList()

{

first=new Node;

first->next=NULL;

}

单链表析构函数~LinkList

template<class DataType>

LinkList<DataType>::~LinkList()

{

while(first!=NULL)

{

q=first;

first=first->next;

delete q;

}

}

2.3.2 循环链表

在单链表中,如果将终端结点的指针域由空指针改为指向头结点,就使整个单链表形成一个环,这种头尾相接的单链表被称为循环单链表,简称循环链表。

0 0
原创粉丝点击