- 1、本文档共134页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第2章 线性表; 2.1 线性表的定义与运算;非空的线性表 (n0) 记作:
( a1,a2, …ai, …an);(4) ai 是属于某个数据对象的元素, 它可以是
一个数字、一个字母或一个记录。; 3.线性表的特性;例: 26个英文字母组成的字母表;姓 名; 4. 线性表的运算;2.2 线性表的顺序表示和实现;1. 顺序表的定义; ; 只要知道顺序表基地址和每个数据元素所占字节数,即可求出第 i 个数据元素的存储地址。
所以顺序表具有按数据元素序号随机存取的特点。; 3. 顺序表的描述(静态);;从结构性考虑,通常将一个顺序表封装成一个结构(静态):; (a1,a2,…,ai-1,x,ai,…,an);将 an---ai 之间的结点依次后移,为新结点让出第 i 个位置。
将新结点 x 插入到第 i 个位置。
若 i=n+1, 则将 x 插入到表尾。
修改last,使之仍指向最后一个元素。 相当于修改了表长。;int InsList(SeqList *L, int i , datatype x)
{ int j;
if( L-last==MAXLEN-1)
{ printf(“顺序表已满”); // 最后一个结点的位置是 MAXLEN-1
// 表明顺序表 已满,不能插入。
return( -1 );
}
if( i1 || i L-last+2 ) // i1 即 i=0 为空表
// L-last=n-1 L-last+2=n-1+2=n+1
// i L-last+2 即 i n+1 即 i = n+2
// 检查空表及插入位置合法性
{ printf(“位置出错”);
return( 0 );
}
;// 以下处理 i 的有效范围 1=i=n+1
for( j=L-last; j=i-1; j--)
L-data[j+1]=L-data[j] ; // 结点依次向后移动
// 当 i=n+1 时,j= L-last=n-1, i-1=n+1-1=n
// 不满足j=i-1 所以不做此循环即不移动结点
L-data[i-1]=x ; // 新元素插入 将 x 放在原来 ai 的位置
// 当 i=n+1时, data[i-1]= data[n]= x
// 将 x 直接作为an+1 放在线性表的最后
L-last++; // last仍指向最后的元素
return( 1 )
};插入算法时间性能分析:;按等概率考虑:
可能插入的位置为 i=1,2,……n,n+1 共 n+1 个,
则 pi=1/(n+1) 所以:;(a1,a2,…,ai-1,ai+1,…,an);若i=n,只需删除终端结点,不用移动结点。
当1=in时,将ai+1---an之间的结点依次向前移动。
(共需移动 n-i 个结点)。
修改 last 指针(相当于修改表长)使之仍指向最后一个
结点。;int DelList( SeqList *L, int i )
{ int j;
if( i1 || iL-last+1 ) // i1为空表
// iL-last+1
文档评论(0)