第二章线性表
来源:互联网 发布:网络主播低俗 编辑:程序博客网 时间:2024/06/05 19:27
2.1线性表的逻辑结构
定义:
线性表简称表,是n(n ≥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 循环链表
在单链表中,如果将终端结点的指针域由空指针改为指向头结点,就使整个单链表形成一个环,这种头尾相接的单链表被称为循环单链表,简称循环链表。
- 第二章 线性表
- 第二章:线性表
- 第二章 线性表
- 第二章 线性表
- 第二章 线性表
- 线性表 第二章
- 第二章:线性表
- 第二章线性表
- 第二章 线性表
- 第二章:线性表
- 第二章:线性表
- 第二章线性表
- 第二章 线性表
- 第二章 线性表
- 第二章 线性表
- 第二章线性表
- 第二章 线性表
- 第二章 线性表
- 关于非线性方程组的求解问题
- keyDown keyPress keyUp 事件的区别
- hdu1244——Max Sum Plus Plus Plus
- http与https的区别
- java中设置环境变量时bin和lib的作用是什么?
- 第二章线性表
- Linux 下crontab定时任务的使用及案例
- 【LeetCode】Linked List Cycle II
- vi 中使用了 ctrl+s
- android studio在mac上的安装过程及问题解决
- C++ base64编码和解码算法
- cocos2dx 3D 学习
- iOS疯狂详解之将摄像头捕获的视频数据转为jpeg格式
- android控件开发之Spinner控件