线性表
来源:互联网 发布:查股网ddx日线数据 编辑:程序博客网 时间:2024/06/05 14:26
线性表
一、线性表的逻辑结构
1.线性表的定义
线性表简称表,是n个具有相同类型的数据元素的有限序列,线性表中数据元素个数称为线性表的长度。
2.线性表的抽象数据类型定义
线性表是一个相当灵活的数据结构,对线性表的数据元素不仅可以进行存取访问,还可以进行插入和删除等操作。其抽象数据类型定义为:
ADTList
Data
线性表中的数据元素具有相同类型,相邻元素具有前驱和后继关系
Operation
InitList
前置条件:线性不存在
输入:无
功能:线性表的初始化
输出:无
后置条件:一个空的线性表
DestroyList
前置条件:线性表已存在
输入:无
功能:销毁线性表
输出:无
后置条件:释放线性所占用的存储空间
Length
前置条件:线性表已存在
输入:无
功能:求线性的长度
输出:线性表中数据元素个数
后置条件:线性表不变
Get
前置条件:线性表已存在
输入:元素的序号1
功能:按位查找,在线性表中查找序号为1的元素
输出:如果序号合法,返回序号为1的元素值,否则抛出异常
后置条件:线性表不变
Locate
前置条件:线性表已存在
输入:数据元素x
功能:按值查找,在线性表中查找值等于x的元素
输出:如果查找成功,返回元素x在表中的序号,否则返回0
后置条件:线性表不变
Insert
前置条件:线性表已存在
输入:插入位置i,待插元素x
功能:插入操作,在线性表的第i个位置处插入一个新的元素x
输出:若出入不成功,抛出异常
后置条件:若插入成功,表中增加了一个新的元素
Delete
前置条件:线性表已存在
输入:删除位置i
功能:删除操作,删除线性表中的第i个元素
输出:若删除成功,返回被输出的元素,否则抛出异常
后置条件:若删除成功,表中减少一个元素
Empty
前置条件:线性表已存在
输入:无
功能:判空操作,判断线性表是否为空表
输出:若是空表,返回1,否则返回0
后置条件:线性表不变
PrintList
前置条件:线性表已存在
输入:无
功能:遍历操作,按序号依次输出线性表中的元素
输出:线性表的各个数据元素
后置条件:线性表不变
endADT
二、线性表的顺序存储结构及实现
1.线性表的顺序存储结构——顺序表
线性表的顺序存储结构称为顺序表,顺序表需要分配连续的存储空间。
顺序表中元素的序号是从1开始的,线性表中第i个元素存储在数组下表为i-1的位置。
2.顺序表的实现
Constint MaxSize=100;
Template<classDataType>
ClassSeqList
{
public:
Seqlist(){length=0;}
SeqList(DataTypea[],int n);
~SeqList(){}
intLength(){return length;}
DataTypeGet(int i);
intLocate(DataType x);
voidInsert(int i,DataType x);
DatatypeDelete(int i);
VoidPrintList();
private:
DataTypedata[MaxSize];
intlength;};
2.1顺序表有参构造函数SeqList
template<classDataType>
SeqList<DataType>::SeqList(DataTypea[],int n )
{
if(n>MaxSize)throw“参数非法”;
for(i=0;i<n;i++)
data[i]=a[i];
length=n;}
2.2求线性表的长度
求线性表的长度只需要返回成员变量length的值。
2.3查找操作
2.3.1按位查找算法Get
template<classDataType>
DataTypeSeqList<DataType>::Get(int i)
{
if(i<1&&i>length)throw “查找位置非法”;
elsereturn data[i-1];}
2.3.2按值查找locate
template<classDataType>
intSeqList<DataType>::Locate(DataType x)
{
for(i=0;i<length;i++)
if(data[i]==x)return i+1 ;
return0;}
2.4插入操作
顺序表插入算法Insert
template<classDataType>
voidSeqList<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++;}
2.5删除操作Delete
template<classDataType>
DataType SeqList<DataType>::Delete(inti)
{
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.6顺序表遍历操作PrintList
template <class DataType>
void SeqList<DataType>::PrintList()
{
for(i=0;i<length;i++)
cout<<data[i];}
3.线性表的链接存储结构及实现
3.1单链表
单链表是用一组任意的存储单元存放线性表的元素,这组存储单元可以连续也可以不连续。
在单链表的开始结点之前附设一个类型相同的结点。
3.2单链表的实现
template<class DataType>
class LinkList
{
public:
LinkList();
Linklist(DataType a[],int n);
~Linklist();
int Length();
DataType Get(int i);
int Locate(DataType x);
void Insert(int i,DataType x);
DataType Delete(int i);
void PrintList();
private:
Node<DataType>*first;};
3.3求线性表长度算法Length
template<class DataType>
int LinkList<DataType>::Length()
{
p=first->next;count=0;
while(p!=NULL)
{
p=p->next;
count++;}
return count;
}
3.4单链表按位查找算法Get
template<class DataType>
DataType LinkList<DataType>::Get(int i)
{
p=first->next;count=1;
while(p!=NULL&&count<1)
{
if (p->data==x)return count;
p=p->next;
count++;}
if(p==NULL)throw "位置";
else return p->data;
}
3.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;}
3.6单链表插入操作Insert
template<class DataType>
void LinkList<DataType>::Insert(int i;DataType 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;}}
3.7无参构造函数LinkList
template<class DataType>
LinkList<DataType>::LinkList()
{
first=new Node;
first->next=NULL;
}
3.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;}
}
3.9尾插法建立单链表LinkList
template<class DataType>
LinkList<DataType>::LinkList(DataType a[],int n)
{
first=new Node;
r=first;
for(i=0;i<n;i++)
{
s=new Node;s->data=a[i];
r->next=s;r=s;}
r->next=NULL;}
3.10单链表删除算法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"位置";
else{
q=p->next;x=q->next;
p->next=q->next;
delete q;
return x;}}
3.11单链表析构函数算法:~LinkList
template <class DataType>
LinkList<DataType>::~LinkList()
{
while(first!=NULL)
{q=first;
first=first->next;
delete q;}}
- 线性表--线性存储
- 线性表 线性结构
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- SAE中使用TmpFS功能
- 什么是可重入函数
- SAE虽然禁止了IO写操作,但是并没有禁止fwrite,file_put_contents等写操作函数
- la 3983 捡垃圾的机器人 dp 单调队列优化 典型 难
- Memcache的容量设置
- 线性表
- JS事件冒泡
- IOS设计模式学习 生成器
- 将窗口居中显示
- jqueryui的autocomplete一个简单例子
- Python宝典第22章:Python扩展和嵌入
- 【UMvp】1.Unity3d开源代码框架UMvp基础介绍
- hdoj_1007Quoit Design_最近点对(分治)
- Python监控Windows下的文件变化