软工期末数据结构复习习题 下载本文

内容发布更新时间 : 2024/5/27 11:49:30星期一 下面是文章的全部内容请认真阅读。

数据结构练习题

数据结构练习题(1-5章)

一、选择题

1、从逻辑上可以把数据结构分为( C )两大类。

A.动态结构、静态结构 B.顺序结构、链式结构 C.线性结构、非线性结构 D.初等结构、构造型结构 2、以下数据结构中,哪一个是线性结构( D )?

A.广义表 B. 二叉树 C. 稀疏矩阵 D. 串 3、在下面的程序段中,对x的赋值语句的频度为( C )

for (i=1;i<=n;i++) for (j=1;j<=n;i++) x=x+1;

2n

A. O(2n) B.O(n) C.O(n) D.O(log2) 4、下面关于线性表的叙述中,错误的是哪一个?( B )

A.线性表采用顺序存储,必须占用一片连续的存储单元。 B.线性表采用顺序存储,便于进行插入和删除操作。 C.线性表采用链接存储,不必占用一片连续的存储单元。 D.线性表采用链接存储,便于插入和删除操作。

5、某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用( D )存储方式最节省运算时间。

A.单链表 B.仅有头指针的单循环链表 C.双链表 D.仅有尾指针的单循环链表

6、 静态链表中指针表示的是( B ).

A. 内存地址 B.数组下标 C.下一元素地址 D.左、右孩子地址 7、下面的叙述不正确的是( BC )

A.线性表在链式存储时,查找第i个元素的时间同i的值成正比 B. 线性表在链式存储时,查找第i个元素的时间同i的值无关

C. 线性表在顺序存储时,查找第i个元素的时间同i 的值成正比 D. 线性表在顺序存储时,查找第i个元素的时间同i的值无关

8、 若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法的时间复杂度为( C )(1<=i<=n+1)。

A. O(0) B. O(1) C. O(n) D. O(n2)

9、在单链表指针为p的结点之后插入指针为s的结点,正确的操作是:( B )。

A.p->next=s;s->next=p->next; B. s->next=p->next;p->next=s; C.p->next=s;p->next=s->next; D. p->next=s->next;p->next=s;

10、对于一个头指针为head的带头结点的单链表,判定该表为空表的条件是( B )

A.head==NULL B.head→next==NULL C.head→next==head D.head!=NULL 11、 一个栈的输入序列为123?n,若输出序列的第一个元素是n,输出第i(1<=i<=n)个元素是( B )。

A. 不确定 B. n-i+1 C. i D. n-i 12、 有六个元素6,5,4,3,2,1 的顺序进栈,问下列哪一个不是合法的出栈序列?( C )

A. 5 4 3 6 1 2 B. 4 5 3 1 2 6 C. 3 4 6 5 2 1 D. 2 3 4 1 5 6 13、 设有三个元素X,Y,Z顺序进栈(进的过程中允许出栈),下列得不到的出栈排列是( C )。

A.XYZ B. YZX C. ZXY D. ZYX

14、 假设以数组A[m]存放循环队列的元素,其头尾指针分别为front和rear,则当前队列中

1

的元素个数为( A )。

A.(rear-front+m)%m B.rear-front+1 C.(front-rear+m)%m D.(rear-front)%m

15、 若用一个大小为6的数组来实现循环队列,且当前rear和front的值分别为0和3,当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为多少?( B )

A. 1和 5 B. 2和4 C. 4和2 D. 5和1 16、下面关于串的的叙述中,哪一个是不正确的?( B )

A.串是字符的有限序列 B.空串是由空格构成的串->(空格串是由空格组成的) C.模式匹配是串的一种重要运算 D.串既可以采用顺序存储,也可以采用链式存储 17、设有两个串p和q,其中q是p的子串,求q在p中首次出现的位置的算法称为( C )

A.求子串 B.联接 C.匹配 D.求串长

18、 设有数组A[i,j],数组的每个元素长度为3字节,i的值为1 到8 ,j的值为1 到10,数组从内存首地址BA开始顺序存放,当用以列为主存放时,元素A[5,8]的存储首地址为( B )。30*6=180

A. BA+141 B. BA+180 C. BA+222 D. BA+225 19、已知广义表L=((x,y,z),a,(u,t,w)),从L表中取出原子项t的运算是( D )。

A. head(tail(tail(L))) B. tail(head(head(tail(L)))) C. head(tail(head(tail(L)))) D. head(tail(head(tail(tail(L))))) 20、广义表A=(a,b,(c,d),(e,(f,g))),则下面式子的值为( D )。

Head(Tail(Head(Tail(Tail(A)))))

A. (g) B. (d) C. c D. d

二、判断题

1、 数据元素是数据的最小单位。( × )

2、算法可以用不同的语言描述,如果用C 语言或PASCAL语言等高级语言来描述,则算法实际上就是程序了。( Y )

3、 顺序存储方式的优点是存储密度大,且插入、删除运算效率高。( × )

4、线性表采用链表存储时,结点和结点内部的存储空间可以是不连续的。( × ) 5、线性表的特点是每个元素都有一个前驱和一个后继。( × )

6、一个稀疏矩阵Am*n采用三元组形式表示, 若把三元组中有关行下标与列下标的值互换,并把m和n的值互换,则就完成了Am*n的转置运算。( × ) 7、所谓取广义表的表尾就是返回广义表中最后一个元素。( × )

三、填空题

1、数据的物理结构包括 数据元素 的表示和 关系 的表示。

2、当线性表的元素总数基本稳定,且很少进行插入和删除操作,但要求以最快的速度存取线性表中的元素时,应采用___顺序__存储结构。

3、线性表L=(a1,a2,?,an)用数组表示,假定删除表中任一元素的概率相同,则删除一个元素平均需要移动元素的个数是_(n-1)/2____。

4、对于一个具有n个结点的单链表,在已知的结点*p后插入一个新结点的时间复杂度为__O(1)__,在给定值为x的结点后插入一个新结点的时间复杂度为___ O(n)_____。 5、带头结点的双循环链表L中只有一个元素结点的条件是:__L->next->next==L __ 6、一个栈的输入序列是:1,2,3则不可能的栈输出序列是__3 1 2___。 7、用S表示入栈操作,X表示出栈操作,若元素入栈的顺序为1234,为了得到1342出栈顺序,相应的S和X的操作串为_ SXSSXSXX__。 8、__队列__又称作先进先出表。

2

9、组成串的数据元素只能是__字符___。

10、设有C语言描述的二维数组A[10][20],其每个元素占两个字节,第一个元素的存储地址为100,若按行优先顺序存储,则元素A[6][6]存储地址为__352__。(没说明,则下标从0开始)

四、算法与应用题

1. 设线性表存放在向量A[arrsize]的前elenum个分量中且递增有序,试写一算法将x插入到线性表的适当位置,以保持线性表的有序性并分析其时间复杂度。 #define arrsize 100

bool sortinsert(Elemtype A[],int elenum , Elemtype x) {

int i;

if(elenum = = arrsize) {

printf(“该数组向量已满”); return false; }

i=elenum-1;

while(A[i]>x && i>=0) {

A[i+1]=A[i];

i- -; }

A[i+1]=x; return true; }//

2.已知带头结点的动态单链表L中的结点是按整数值递增排列的,试写一算法将值x为的结点插入到表L中,使L仍然有序。 ///线性表的单链表存储结构 typedef struct Lnode

{ ElemType data; struct Lnode *next; } LNode , *LinkList;

LinkList sortinsert(LinkList L,int x) /* 带头结点*/ {

LinkList p,q, s;

s=(LinkList)malloc(sizeof(LNode));

if(!s) { printf(“动态空间分配不成功”); exit(-1);}

s->data=x; q=L;

3