- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第一部分各章考核的要点.doc
第一部分 各章考核的要点
?
第一章??????????? 绪论
?
本章内容不作考核要求,但同学们对算法的空间复杂度以及时间复杂度度量要了解,同时对抽象数据类型的概念也应有所了解。
?
第二章 线性表
1、? 二维数组定义、给定下标后计算数组元素实际存放地址
二数组定义为:二维数组也叫做矩阵,它可以看作是n个行向量和m个列向量所组成的向量。要注意的是,某一数组元素a[j][k]在数组中的位置由下标的二元组[j][k]唯一确定。
典型例题有:
例1、设有一个二维数组A[1..m,1..n], 假设A[1,1]存放位置在644(10), A[3,3]存放位置在676(10), 每个元素占一个空间, 问A[4,4]在什么位置, 下标(10)表示用10进数表示。
【解答】
因为 LOC(3, 3) = 676,LOC(1, 1) = 644。
则LOC(3, 3) = LOC(1, 1) + (3-1) * n + (3-1)
676 = 644+2 * n+2
解得 n = 15
又LOC(4, 4) = LOC(1, 1) + (4 - 1) * 15 + (4 - 1) = 644 + 3 *15 + 3 = 692
?
例2、数组A[1..10, -2..6, 2..8] 的元素按行顺序存储,第一个元素的首地址为100,每个元素的长度为3,试计算元素A[5, 0, 7]的存储地址。
【解答】已知第一个元素地址LOC(1, -2, 2) = 100,每个元素的长度l = 3,则
m1 = 10-1+1 = 10, m2 = 6- (-2)+1 = 9, m3 = 8-2+1 = 7,
LOC(5, 0, 7) = LOC(1, -2, 2) + { (5-1)*m2*m3 + (0- (-2))*m3 + (7-2) } * l = 100 + { 4 * 9 * 7 + 2 * 7 + 5 } * 3 = 913
?
?
2、? 顺序表的插入与删除算法
(1)顺序表的插入算法
template class Type int SeqlistType::Insert(Type x, int i){
// 插入x在表中第i个位置处。函数返回插入是否成功的信息,若为0则插入不成功。
if (i0||ilast+1||last==MaxSize-1) return 0;
else{
last++;
for(int j=last; ji; j--) data[j]=data[j-1];
data[i]=x;
return 1;
}
}
(2)顺序表的删除算法
template class Type Type * SeqlistType::Remove(Type x){
int i=Find(x); //在表中查找x
if (i=0) {
Type val=data[i];
last--;
for(int j=i; j=last; j++) data[j]=data[j+1];
return val ;
}
return NULL;
}
?
3、? 在顺序表中插入及删除元素时计算平均移动元素个数
????????? 在已有n个元素的顺序表中插入一个元素,有n+1个插入位置,平均移动元素个数为n/2。
????????? 在已有n个元素的顺序表中删除一个元素,有n个删除位置,平均移动元素个数为: (n-1)/2。
?
链接表
1、 单链表(带表头结点和不带表头结点)的插入与删除算法
(1)不带表头结点的插入与删除算法:
????????? 插入:
int List::Insert ( const int x, const int i ) {
//将新元素x插入到第i结点之前。i是结点号,从0开始。
ListNode *p = first; int k = 0;
while ( p != NULL k i-1 ) { p = p-link; k++; }
//循链找第i-1个结点
if ( p == NULL first != NULL ) {
//非空表而且链短,找不到第i-1个结点
cout Invalid position for Insertation!\n; return 0;
//终止插入, 函数返回0
}
ListNode *newnode= new ListNode ( x, NULL );
文档评论(0)