- 线性表作业(共50分)
- 答案链接链接
一、完成下面选择题(每空2分,共14分)。
1. 顺序存储结构中数据中数据元素之间逻辑关系是由( )表示的,链接存储结构中的数据元素之间的逻辑关系是由( )表示的。
A.线性结构 B.非线性结构 C.存储位置 D.指针
2. 线性表是( )。
A.一个有限序列,可以为空
B. 一个有限序列,不能为空
C. 一个无限序列,可以为空
D. 一个无限序列,不能为空
3. 已知一维数组A采用顺序存储结构,每个元素占用4个存储单元,第9个元素的地址为144,则第一个元素的地址是( )。
A. 108 B. 180 C. 176 D. 112
4. 在单链表中删除指针p所指结点的后继结点,则执行( )。
A. p->next= p->next->next
B. p->next= p->next
C. p= p->next->next
D. p= p->next; p->next= p->next->next
5. 若某链表最常用的操作是在最后一个结点之后插入一个结点删除最后一个结点,则采用( )存储方式最节省时间。
A. 单链表 B. 双链表
C. 带头结点的双循环链表 D. 单循环链表
6.二维数组A[7][8]以列序为主序的存储, 计算数组元素A[5][3] 的一维存储空间下标 k=( )。
A. 38 B. 43 C. 26 D. 29
- 完成下列填空题(每空3分,共9分)。
1.在顺序表L中第i个位置上插入一个新的元素e:
Status ListInsert_Sq(SqList &L , int i , ET e){
if ( i<1 || i>L.length+1) return ERROR;
if(L.length >= L.listsize){
p=(ET*)realloc(L.elem,(L.listsize+10)*sizeof(ET));
if (p==NULL) exit(OVERFLOW);
L.elem=p;
}
for( j=L.length ; j>=i ; --j )
;
L.elem[j]=e ;
;
return OK;
}
2. 删除双向链表中p所指向的节点算法:
status delete(DuLinkList L, DuLinkList p) {
if (p= =L)
return ERROR;
else {
p->prior->next=p->next;
;
}
free(p);
return OK;
}
- 编程题(共27分)。
1. (共12分)用顺序表表示集合,设计算法实现集合的求差集运算,要求不另外开辟空间。
顺序表的存储结构定义如下:
#define Maxsize 100
typedef struct
{
ElemType data[MaxSize]; // ElemType表示不确定的数据类型
int length; // length表示线性表的长度
}SqList;
将如下函数,伪码补充完整(8分),代码前先用文字描述自己的算法思想(4分)。
文字描述算法(4分):
void Difference(SqList A, SqList B)
{//(8分)
}
2. (共15分)已知带头结点的单循环链表L,编写算法实现删除其中所有值为e 的数据元素结点。
(要求:类型定义、伪码进行算法描述和算法时间复杂度分析)
类型定义:(3分)
伪码进行算法描述:(10分)
时间复杂度分析:(2分)
答案链接链接