版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2.2最简单的一种顺序映象方法是:令y
的存储位置和x
的存储位置相邻。顺序映象——以x
的存储位置和y
的存储位置之间某种关系表示逻辑关系<x,y>用一组地址连续的存储单元依次存放线性表中的数据元素a1a2…ai-1ai…an线性表的起始地址,称作线性表的基地址以“存储位置相邻”表示有序对<ai-1,a即:LOC(ai)=LOC(ai-1)+C一个数据元素所占存储量所有数据元素的存储位置均取决于第一个数据元素的存储位置LOC(ai)
=LOC(a1)
+
(i-1)×C↑基地址顺序映象的C
语言描述也称为顺序表intint}
SqList;#define
LIST_INIT_SIZE
80//线性表存储空间的初始分配量#define
LISTINCREMENT
10//线性表存储空间的分配增量typedef struct
{ElemType
*elem;
//存储空间基址length; //当前长度listsize; //当前分配的存储容量//(以sizeof(ElemType)为单位)线性表的基本操作在顺序表中的实现InitList(&L)
//结构初始化LocateElem(L,
e,
compare()) //
查找ListInsert(&L,
i,
e) //
插入元素ListDelete(&L,
i) //
删除元素Status
InitList_Sq(
SqList&
L,
int
maxsize
)
{//构造一个最大容量为maxsize的顺序表L.elem
=
new
ElemType[maxsize];//为顺序表分配大小为maxsize的数组空间if
(!L.elem)
exit(OVERFLOW);L.length
=
0;L.listsize
=
maxsize;return
OK;}
//
InitList_Sq算法时间复杂度:O(1)顺序表的查找例如:23754138546217L.elemL.length
=
7L.listsizee
=
38pppppi12341850
查找不成功,返回0!
值e相比较。p查找的基本操作是:将顺序表中的查找成功,返回i值!元素逐个和给定pint
LocateElem_Sq(SqList
L,
ElemType
e,Status
(*compare)(ElemType,
ElemType))
{//在顺序表中查询第一个满足判定条件的数据元素,//若存在,则返回它的位序,否则返回0i=1;
//i的初值为第1元素的位序p=L.elem;
//p的初值为第1元素的存储位置while
(i
<=L.length&&!(*compare)(*p++,
e)
)++i;if
(i
<=
L.length)
return
i;else return
0;}//
LocateElem_Sq算法的时间复杂度为:O(
ListLength(L)
)线性表操作ListInsert(&L,
i,
e)的实现:首先分析:插入元素时,线性表的逻辑结构发生什么变化?(a1,…,ai-1,ai,…,an)改变为a2…ai-1a1
ai
…
ana1a2…ai-1eai…a(a1,
…,
ai-1,
e,
ai,
…,
an)<ai-1,
ai> <ai-1,
e>, <e,
ai>表的长度增加nStatus
ListInsert_Sq(SqList
&L,
int
i,
ElemType
e)
{//
在顺序表L的第i
个元素之前插入新的元素e,//i
的合法范围为1≤i≤L.length+1}//
ListInsert_SqO(
ListLength(L)
)//表长增1算法时间复杂度为:++L.length;return
OK;q=&(L.elem[i-1]); //q
指示插入位置for(p
=
&(L.elem[L.length-1]);p
>=
q;
--p)*(p+1)=*p; //插入位置及之后的元素右移*q=e;
//插入e……(合法性检查、分配空间满需追加空间等)if
(i
<
1
||
i
>
L.length+1)
return
ERROR;//插入位置不合法if
(L.length
>=
L.listsize)
{//当前存储空间已满,增加分配newbase
=
(ElemType
*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof
(ElemType));if
(!newbase)exit(OVERFLOW);//存储分配失败L.elem=newbase;
//新基址L.listsize+=LISTINCREMENT;//增加存储容量}211830754256872118307566425687例如:ListInsert_Sq(L,
5,66)L.length-10pppq=&(L.elem[i-1]); //q
指示插入位置for(p=
&(L.elem[L.length-1]);p>=
q;
--p)*(p+1)
=*p;p
q考虑移动元素的平均情况:假设在第
i
个元素之前插入的概率为
pi
,n+1则在长度为n的线性表中插入一个元素所需移动元素次数的期望值为:Eis
=
pi
(n
-
i
+1)i=1若假定在线性表中任何一个位置上进行插入的概率都是相等的,则移动元素的期望值为:n+1(n
-
i
+1)n
+1
i=11isE
=2=
n线性表操作ListDelete(&L,
i,
&e)的实现:首先分析:删除元素时,线性表的逻辑结构发生什么变化?(a1,…,ai-1,ai,ai+1,…,an)改变为<ai-1,
ai>,<ai,
ai+1><ai-1,
ai+1>表的长度减少a1a2…ai-1aiai+1…ana1a2…ai-1ai+1…an(a1,
…,
ai-1,
ai+1,
…,
an)Status
ListDelete_Sq(SqList
&L,
int
i,
ElemType
&e)
{--L.length;
//表长减1return
OK;}//
ListDelete_Sqfor
(++p;
p<=
q;
++p)
*(p-1)
=*p;//被删除元素之后的元素左移算法时间复杂度为:O(
ListLength(L))//p
为被删除元素的位置//被删除元素的值赋给ep
=
&(L.elem[i-1]);e=*p;q
=
L.elem+L.length-1;//表尾元素的位置if
((i
<
1)
||
(i
>
L.length))
return
ERROR;//删除位置不合法考虑移动元素的平均情况:假设删除第
i个元素的概率为
qi
,n则在长度为n
的线性表中删除一个元素所需移动元素次数的期望值为:Edl
=
qi
(n
-
i)i=1若假定在线性表中任何一个位置上进行删除
的概率都是相等的,则移动元素的期望值为:nn
i=1(n
-
i)
=dlE
=1
n
-1221183075425687211830755687L.length-
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业管理-保洁档案管理制度
- 湖北省鄂州市梁子湖区吴都中学2026年初三重点班下学期开学物理试题含解析
- 湖北省黄冈市2026年初三3月联合考试数学试题含解析
- 广东省湛江市名校2025-2026学年初三三诊数学试题试卷含解析
- 四川省德阳中学江县2026年初三第一轮复习质量检测试题物理试题含解析
- 肺结核咯血患者的护理案例分析
- 浙江省温州市八校2026届初三调研考试生物试题含解析
- 驻马店职业技术学院《大型数据库技术》2024-2025学年第二学期期末试卷
- 高中语文《以工匠精神雕琢时代品质》课件+统编版高一语文必修上册
- 2026年及未来5年市场数据中国社交网络行业发展运行现状及投资潜力预测报告
- 新能源建设课件
- “时空对话”朗诵剧剧本
- 光伏电站建设工程合同范本
- 五方面人员考试试题及答案
- 幼儿园扭扭棒教学课件
- 幼儿园区域材料投放讲座
- 国家职业标准 -碳排放管理员
- 销售加速公式培训课件
- 设备报废配件管理制度
- 冀教版五年级下册小学英语全册单元测试卷(含听力音频文件)
- 琉璃瓦施工合同协议书
评论
0/150
提交评论