第二章 线性表-顺序表
- 格式:docx
- 大小:23.10 KB
- 文档页数:2
第二章 线性表—顺序表
一、 单项选择题
1、线性表是具有n个( C )的有限序列。
A、数据表 B、字符 C、数据元素 D、数据项
2、以下( A )是一个线性表。
A、由n个实数组成的集合;
B、由n个字符组成的序列;
C、所有整数组成的序列;
D、邻接表
3、线性表的顺序存储结构是一种( B )
A、随机存取的存储结构
B、顺序存取的存储结构
C、索引存取的存储结构
D、散列存取的存储结构
4、一个顺序表所占用的存储空间大小与( B)无关。
A、表的长度 B、元素的存放顺序
C、元素的类型 D、元素中各字段的类型
5、若线性表最常用的操作是存取第i个元素及其前驱和后继元素的值,为了提高效率,应采用( B )的存储结构。
A、单链表 B、双向链表
C、单循环链表 D、顺序表
二、 应用题
1、从有序顺序表中删除所有其值重复的元素,使得表中所有元素的值均不同。
void DelListaelem (List L )
{
if ( L.length<=0 )
{
printf( “List is empty!”); exit(1); }
int i = 0, j, k;
elemType temp;
while ( i <= L.length)
{//循环检测
j = i + 1; temp = L.data[i];
while ( j <= L.length )
{ //对于每一个i, 重复检测一遍后续元素
if ( temp == L.data[j] )
{//如果相等, 后续元素前移 for ( k = j+1; k <= L.length; k++ )
L.data[k-1] =L. data[k];
L.length--; //表最后元素位置减1
}
else j++;
}
i++; //检测完L.data[i], 检测下一个
}
}
2、设将n(n>1)个整数存放到一维数组R中。试设计一个算法:将R中保存的序列循环左移p(0
(1)给出算法的基本设计思路;
(2)根据设计思路,采用C语言描述算法,关键之处给出注释;
(3)说明你所设计算法的时间复杂性和空间复杂性
(1)算法基本设计思想:
先将N个数据x0,x1,x2……xp,………xn-1原地逆置,得到Xn-1,…Xp,Xp-1,…,X0,然后再将前n-p个和后P个元素分别原地逆置,得到最终结果:
Xp,Xp+1,…X0,X1,…Xp-1
(2)void Reverse(int r[],int left,int right)
{
Int k=left,i=right,temp;
While(k
Temp=r[k];
r[i]=temp;
k++;i++;
}
}
Void leftshift(int r[],int n,int p)
{ if(p>0 && p Reverse(r,o,n-1); Reverse(r,o,n-p-1); Reverse(r,n-p,n-1); } } (3)时间复杂度为O(n),空间复杂度O(1).