2.1第二章作业1-顺序表


1-1
对于顺序存储的长度为N的线性表,访问结点和增加结点的时间复杂度分别对应为O(1)和O(N)。

(1分)

T

F
作者
DS课程组
单位
浙江大学
1-2
若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用顺序表存储最节省时间。

(2分)

T

F
作者
DS课程组
单位
浙江大学
1-3
对于顺序存储的长度为N的线性表,删除第一个元素和插入最后一个元素的时间复杂度分别对应为O(1)和O(N)。

(1分)

T

F
作者
徐镜春
单位
浙江大学
1-4
(neuDS)在顺序表中逻辑上相邻的元素,其对应的物理位置也是相邻的。

(1分)

T

F
作者
徐婉珍
单位
广东东软学院
1-5
(neuDS)所谓随机存取,就是通过首地址和元素的位序号值可以在O(1)的时间内找到指定的元素。

(1分)

T

F
作者
徐婉珍
单位
广东东软学院
1-6
(neuDS)顺序存储的线性表不支持随机存取。

(1分)

T

F
作者
徐婉珍
单位
广东东软学院
1-7
(neuDS)在顺序表上进行插入、删除操作时需要移动元素的个数与待插入或待删除元素的位置无关。

(1分)

T

F

2-1
对于顺序存储的长度为N的线性表,访问结点和增加结点的时间复杂度为:

(1分)

A.
O(1), O(1)


B.
O(1), O(N)


C.
O(N), O(1)


D.
O(N), O(N)

作者
DS课程组
单位
浙江大学
2-2
在N个结点的顺序表中,算法的时间复杂度为O(1)的操作是:

(2分)

A.
访问第i个结点(1≤i≤N)和求第i个结点的直接前驱(2≤i≤N)


B.
在第i个结点后插入一个新结点(1≤i≤N)


C.
删除第i个结点(1≤i≤N)


D.
将N个结点从小到大排序

作者
DS课程组
单位
浙江大学
2-3
若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用哪种存储方式最节省时间?

(2分)

A.
双链表


B.
单循环链表


C.
带头结点的双循环链表


D.
顺序表

作者
DS课程组
单位
浙江大学
2-4
顺序表中第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是( )。

(2分)

A.
100


B.
105


C.
108


D.
110

作者
周治国
单位
东北师范大学
2-5
(neuDS)线性表的顺序存储结构是一种( )

(2分)

A.
随机存取的存储结构


B.
顺序存取的存储结构


C.
索引存取的存储结构


D.
散列存取的存储结构

作者
徐婉珍
单位
广东东软学院
2-6
(neuDS)一个顺序表所占用的存储空间大小与( )无关。

(2分)

A.
表的长度


B.
元素的类型


C.
元素的存放顺序


D.
元素中各字段的类型

作者
徐婉珍
单位
广东东软学院
2-7
(neuDS)要将一个顺序表{a
​0
​​ ,a
​1
​​ ,……,a
​n−1
​​ }中第i个数据元素a
​i
​​ (0≤i≤n-1)删除,需要移动( )个数据元素。

(2分)

A.
i


B.
n-i-1


C.
n-i


D.
n-i+1

作者
徐婉珍
单位
广东东软学院
2-8
用数组表示线性表的优点是()。

(2分)

A.
便于插入和删除操作


B.
便于随机存取


C.
可以动态地分配存储空间


D.
不需要占用一片相邻的存储空间

作者
严冰
单位
浙江大学城市学院
2-9
若长度为n的线性表采用顺序存储结构,那么删除它的第i个数据元素之前,需要它一次向前移动()个数据元素。

(2分)

A.
n-i


B.
n+i


C.
n-i-1


D.
n-i+1

作者
严冰
单位
浙江大学城市学院
2-10
若长度为n的线性表采用顺序结构,在第i个数据元素之前插入一个元素,需要它依次向后移动()个元素。

(2分)

A.
n-i


B.
n-i+1


C.
n-i-1


D.
i

作者
严冰
单位
浙江大学城市学院
2-11
线性表L=(a1, a2 ,……,an )用一维数组表示,假定删除线性表中任一元素的概率相同(都为1/n),则删除一个元素平均需要移动元素的个数是()。

(2分)

A.
n/2


B.
(n+1)/2


C.
(n-1)/2


D.
n

6-1 顺序表创建和就地逆置 (10分)
本题要求实现顺序表的创建和就地逆置操作函数。L是一个顺序表,函数ListCreate_Sq(SqList &L)用于创建一个顺序表,函数ListReverse_Sq(SqList &L)是在不引入辅助数组的前提下将顺序表中的元素进行逆置,如原顺序表元素依次为1,2,3,4,则逆置后为4,3,2,1。

函数接口定义:

```
Status ListCreate_Sq(SqList &L);
void ListReverse_Sq(SqList &L);
```
裁判测试程序样例:

```
//库函数头文件包含
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

//函数状态码定义
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2

typedef int Status;

//顺序表的存储结构定义
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef int ElemType; //假设线性表中的元素均为整型
typedef struct{
ElemType* elem; //存储空间基地址
int length; //表中元素的个数
int listsize; //表容量大小
}SqList; //顺序表类型定义

Status ListCreate_Sq(SqList &L);
void ListReverse_Sq(SqList &L);

int main() {
SqList L;
ElemType *p;

if(ListCreate_Sq(L)!= OK) {
printf("ListCreate_Sq: 创建失败!!!\n");
return -1;
}

ListReverse_Sq(L);

if(L.length){
for(p=L.elem;p<L.elem+L.length-1;++p){
printf("%d ",*p);
}
printf("%d",*p);
}
return 0;
}
/* 请在这里填写答案 */
```
输入格式: 第一行输入一个整数n,表示顺序表中元素个数,接下来n个整数为表元素,中间用空格隔开。 输出格式: 输出逆置后顺序表的各个元素,两个元素之间用空格隔开,最后一个元素后面没有空格。

输入样例:
4
1 2 3 4

输出样例:
4 3 2 1
6-2 有序顺序表的插入 (10分)
本题要求实现递增顺序表的有序插入函数。L是一个递增的有序顺序表,函数Status ListInsert_SortedSq(SqList &L, ElemType e)用于向顺序表中按递增的顺序插入一个数据。 比如:原数据有:2 5,要插入一个元素3,那么插入后顺序表为2 3 5。 要考虑扩容的问题。

函数接口定义:
Status ListInsert_SortedSq(SqList &L, ElemType e);
裁判测试程序样例:

```
//库函数头文件包含
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

//函数状态码定义
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2

typedef int Status;

//顺序表的存储结构定义
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef int ElemType; //假设线性表中的元素均为整型
typedef struct{
ElemType* elem; //存储空间基地址
int length; //表中元素的个数
int listsize; //表容量大小
}SqList; //顺序表类型定义

//函数声明
Status ListInsert_SortedSq(SqList &L, ElemType e);

//顺序表初始化函数
Status InitList_Sq(SqList &L)
{
//开辟一段空间
L.elem = (ElemType*)malloc(LIST_INIT_SIZE * sizeof(ElemType));
//检测开辟是否成功
if(!L.elem){
exit(OVERFLOW);
}
//赋值
L.length = 0;
L.listsize = LIST_INIT_SIZE;

return OK;
}

//顺序表输出函数
void ListPrint_Sq(SqList L)
{
ElemType *p = L.elem;//遍历元素用的指针


for(int i = 0; i < L.length; ++i){
if(i == L.length - 1){
printf("%d", *(p+i));
}
else{
printf("%d ", *(p+i));
}
}
}
int main()
{
//声明一个顺序表
SqList L;
//初始化顺序表
InitList_Sq(L);

int number = 0;
ElemType e;

scanf("%d", &number);//插入数据的个数

for(int i = 0; i < number; ++i)
{
scanf("%d", &e);//输入数据
ListInsert_SortedSq(L, e);
}

ListPrint_Sq(L);

return 0;
}


/* 请在这里填写答案 */
```
输入样例:
5
2 3 9 8 4

输出样例:
2 3 4 8 9

7-2 jmu-ds-顺序表区间元素删除 (15分)
若一个线性表L采用顺序存储结构存储,其中所有的元素为整数。设计一个算法,删除元素值在[x,y]之间的所有元素,要求算法的时间复杂度为O(n),空间复杂度为O(1)。

输入格式:
三行数据,第一行是顺序表的元素个数,第二行是顺序表的元素,第三行是x和y。

输出格式:
删除元素值在[x,y]之间的所有元素后的顺序表。

输入样例:
10
5 1 9 10 67 12 8 33 6 2
3 10

输出样例:
1 67 12 33 2

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM