- 1、本文档共38页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PAGE \* MERGEFORMAT1
线性表:
(一)、线性结构的特点(有序,有限):
① 存在一个唯一的被称为“第一个”的数据元素;
② 存在一个唯一的被称为“最后一个”的数据元素;
③ 除第一个元素外,每个元素均有唯一一个直接前驱;
④ 除最后一个元素外,每个元素均有唯一一个直接后继。
(二)、线性表的定义:
线性表(Linear List) :是由n(n≧0)个数据元素(结点)a1,a2, …an组成的有限序列。该序列中的所有结点具有相同的数据类型。其中数据元素的个数n称为线性表的长度。 概念有:(1)第一个元素叫首节点,最后一个叫尾节点。(2)后继;直接后继;前驱,直接前驱。
(三)、线性表的顺序存储:
1、定义:
把线性表的结点按逻辑顺序依次存放在一组地址连续的存储单元里。用这种方法存储的线性表简称顺序表。
2、特点:
若用L表示每个元素所占的存储单元,log(ai+1)表示第(i+1)个元素的存储地址,则有:(用数组形式表示)
Log(ai+1)=log(ai)+L;
Log(ai)=log(a1)+(i-1);
4、线性表的基本操作:
(1)、顺序线性表初始化:
Status Init_SqList( SqList *L )
{ L-elem_array=( ElemType * )malloc(MAX_SIZE*sizeof( ElemType ) ) ;
if ( !L - elem_array ) return ERROR ;
else { L-length= 0 ; return OK ; }
}
(2)、顺序线性表的插入:
*实现思想
? 将线性表L中的第i个至第n个结点后移一个位置。
?将结点e插入到结点ai-1之后。
?线性表长度加1。
*算法实现:
Status Insert_SqList(Sqlist *L,int i ,ElemType e)
{ int j ;
if ( i0||iL-length-1) return ERROR ;
if (L-length=MAX_SIZE)
{ printf(“线性表溢出!\n”); return ERROR ; }
for ( j=L-length–1; j=i-1; --j )
L-Elem_array[j+1]=L-Elem_array[j];
/* i-1位置以后的所有结点后移 */
L-Elem_array[i-1]=e; /* 在i-1位置插入结点 */
L-length++ ;
return OK ;
}
顺序表的插入操作 平均时间复杂度为 O(n)
(3)、顺序表的删除:
*实现思想:
?将线性表L中的第i+1个至第n个结点依此向前移动一个位置。
?线性表长度减1。
*算法实现:
ElemType Delete_SqList(Sqlist *L,int i)
{ int k ; ElemType x ;
if (L-length==0)
{ printf(“线性表L为空!\n”); return ERROR; }
else if ( i1||iL-length )
{ printf(“要删除的数据元素不存在!\n”) ;
return ERROR ; }
else { x=L-Elem_array[i-1] ; /*保存结点的值*/
for ( k=i ; kL-length ; k++)
L-Elem_array[k-1]=L-Elem_array[k];
/* i位置以后的所有结点前移 */
L-length--; return (x);
}
}
线性表的删除操作 平均时间复杂度为O(n)。
(4)、顺序线性表的查找定位删除:
*实现思想:
? 在线性表L查找值为x的第一个数据元素。
?将从找到的位置至最后一个结点依次向前移动一个位置。
?线性表长度减1。
*算法实现:
Status Locate_Delete_SqList(Sqlist *L,ElemType x)
/* 删除线性表L中值为x的第一个结点 */
{ int i=0 , k ;
while (iL-length) /*查找值
文档评论(0)