第二章 线性表-顺序表

  • 格式: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).