您好,欢迎来到好走旅游网。
搜索
您的当前位置:首页数据结构试题

数据结构试题

来源:好走旅游网
复习题

一、填空题

1、数据的逻辑结构描述的是数据元素之间的逻辑关系,通常有下列4类基本结构:集合、线性结构、树形结构和图状结构(或称为网状结构)。 2、栈顶的位置是随着 进栈和退栈 操作而变化的。

3、链表对于数据元素的插入和删除操作不需移动结点,只需改变相关结点的 指针 域的值。

4、在一棵树中, 叶子 结点没有后继结点。

5、在串S=\"structure\"中,以t为首字符的子串有 12 个。

6、当线性表的元素总数基本稳定,且很少进行插入和删除操作,但要求以最快的速度存取线性表中的元素时,应采用 顺序 存储结构。 7、具有256个结点的完全二叉树的深度为___ 9___。 8、二维数组a[4][5](下标从0开始计,a有4*5个元素),每个元素的长度是2,则a[3][2]的地址是 1034 。(设a[0][0]的地址是1000,数据以行为主方式存储)。 9、中缀表达式a+b*3+4*(c-d)对应的前缀表达式为 ++a*b3*4-cd 。 10、在二叉树中,指针p所指结点为叶子结点的条件是_p→rchild==NULL && p→lchild==NULL 。

11、在串S=\"statistics\"中,以t为首字符的子串有 20 个。 12、数据结构中评价算法的两个重要指标是 时间复杂度 空间复杂度 。 13、在一个长度为n的顺序表中第i个元素(1<=i<=n)之前插入一个元素时,需向后移动 n-i+1 个元素。

14、空格串是指 由一个或多个空格组成的串 ,其长度等于 空格数 。 15、在单链表中设置头结点的作用是_头结点用来存放指向链表中首个结点的指针_。 16、顺序存储结构是通过__数组下标__表示元素之间的关系的;链式存储结构是通过_结点的指针域_表示元素之间的关系的。

17、在单链表p结点之后插入s结点的操作是: s->next=p->next;p->next=s; 。 18、INDEX(‘DATASTRUCTURE’, ‘STR’)= 5 。

19、设数组a[1..50,1..80]的基地址为2000,每个元素占2个存储单元,若以行序为主序顺序存储,则元素a[45,68]的存储地址为 9174 ;若以列序为主序顺序存储,则元素a[45,68]的存储地址为 8788 。

20、假设根结点的层数为1,具有n个结点的二叉树的最大高度是 log2n+1 。 二、选择题

1、算法指的是( )

A.计算机程序 B.解决问题的计算方法

C.排序算法 D.解决问题的有限运算序列 2、将长度为n的单链表链接在长度为m的单链表之后的算法的时间复杂度为( ) A.O(1) B.O(n) C.O(m) D.O(m+n) 3、线性表采用链式存储时,结点的存储地址( ) A.必须是不连续的 B.连续与否均可 C.必须是连续的

D.和头结点的存储地址相连续 4、以下数据结构中,( )是非线性数据结构。 A.树 B.字符串 C.队 D.栈

5、一个栈的输入序列为123…n,若输出序列的第一个元素是n,输出第i(1<=i<=n)个元素是( )。

A. 不确定 B. n-i+1 C. i D. n-i

6、设有三个元素X,Y,Z顺序进栈(进的过程中允许出栈),下列得不到的出栈排列是( )。 A.XYZ B. YZX C. ZXY D. ZYX 7、线性表是具有n个( )的有限序列(n>0)。

A.表元素 B.信息项 C.数据元素 D.数据项

8、若串S1=‘ABCDEFG’, S2=‘9898’ ,S3=‘###’,S4=‘012345’,执行

concat(replace(S1,substr(S1,length(S2),length(S3)),S3),substr(S4,index(S2,‘8’),length(S2))),其结果为( )。(说明:下标和位置索引均从1开始计)

A.ABC###G1234 B.ABCD###2345 C.ABC###G2345 D.ABC###2345 E.ABC###G0123 F.ABCD###1234 G.ABC###01234 9、在一棵高度为k的满二叉树中,结点总数为( )。 A.2k-1 B.2k C.2k-1 D.log2k + 1

10、深度为h的二叉树的第k层至多有( )个结点。(1=11、线性表(a1,a2,…,an)以链接方式存储时,访问第i位置元素的时间复杂性为( ) A.O(i) B.O(1) C.O(n) D.O(i-1)

12、在一个以 h 为头的单循环链中,p 指针指向链尾的条件是( )。 A. p->next=h B. p->next=NULL C. p->next->next=h D. p->data=-1 13、栈和队列的共同点是( )。

A. 都是先进先出 B. 都是先进后出

C. 只允许在端点处插入和删除元素 D. 没有共同点 14、串的长度是指( )。

A.串中所含不同字母的个数 B.串中所含字符的个数 C.串中所含不同字符的个数 D.串中所含非空格字符的个数 15、数组A[0..4,-1..-3,5..7]中含有元素的个数( )。 A. 55 B. 45 C. 36 D. 16 16、已知一算术表达式的中缀形式为 A+B*C-D/E,后缀形式为ABC*+DE/-,其前缀形式为( ) A.-A+B*C/DE B. -A+B*CD/E C.-+*ABC/DE D. -+A*BC/DE 17、具有10个叶结点的二叉树中有( )个度为2的结点. A.8 B.9 C.10 D.11

18、设栈S和队列Q的初始状态为空,元素e1,e2,e3,e4,e5和e6依次通过栈S,一个元素出栈后即进队列Q,若6个元素出队的序列是e2,e4,e3,e6,e5,e1则栈S的容量至少应该是( )。

A. 6 B. 4 C. 3 D. 2 19、用不带头结点的单链表存储队列时,其队头指针指向队头结点,其队尾指针指向队尾结点,则在进行删除操作时( )。

A.仅修改队头指针 B. 仅修改队尾指针

C. 队头、队尾指针都要修改 D. 队头,队尾指针都可能要修改

20、递归过程或函数调用时,处理参数及返回地址,要用一种称为( )的数据结构。 A.队列 B.多维数组 C.栈 D. 线性表 三、判断题

1、完全二叉树一定存在度为1的结点。.×

2、二叉树的遍历结果不是唯一的。√ 3、栈与队列是一种特殊操作的线性表。√

4、栈和队列的存储方式,既可以是顺序方式,又可以是链式方式。√ 5、通常使用队列来处理函数或过程的调用。×

6、取线性表的第i个元素的时间同i的大小有关。×

7、顺序存储结构的主要缺点是不利于插入或删除操作。√ 8、算法的优劣与算法描述语言无关,但与所用计算机有关。× 9、数据结构的抽象操作的定义与具体实现有关。×

10、在顺序存储结构中,有时也存储数据结构中元素之间的关系。×

11、顺序存储方式插入和删除时效率太低,因此它不如链式存储方式好。× 12、线性表就是顺序存储的表。×

13、所谓静态链表就是一直不发生变化的链表。× 14、程序一定是算法。×

15、顺序存储方式只能用于存储线性结构。×

16、队列是一种插入与删除操作分别在表的两端进行的线性表,是一种先进后出型结构× 四、应用题

已知L是带表头结点的非空单链表,且P结点既不是首元结点,也不是尾元结点,试从下列提供的答案中选择合适的语句序列。

A、删除首元结点的语句序列是 (12) (11) (3) (14) 。

B、删除P结点的直接前驱结点的语句序列是 (10) (12) (8)(11) (3) (14) 。 C、删除尾元结点的语句序列是 (9) (11) (3) (14) 。

D、删除P结点的直接后继结点的语句序列是 (11) (3) (14) 。 E、删除P结点的语句序列是 (10) (12) (7) (3) (14) 。 (1) P = P->next; (2) P->next = P;

(3) P->next = P->next->next; (4) P = P->next->next;

(5) while(P != NULL) P = P->next;

(6) while(Q->next != NULL) { P = Q; Q = Q->next; } (7) while(P->next != Q) P = P->next;

(8) while(P->next->next != Q) P = P->next; (9) while(P->next->next != NULL) P = P->next; (10) Q = P;

(11) Q = P->next; (12) P = L;

(13) L = L->next; (14) free(Q);

&&已知L是无表头结点的单链表,且P结点既不是首元结点,也不是尾元结点,试从下列提供的答案中选择合适的语句序列。

a.在P结点后插入S结点的语句序列是 (4) (1) b.在P结点前插入S结点的语句序列是 (7) (11) (8) (4) (1) c.在首表插入S结点的语句序列是 (5) (12) d.在尾表插入S结点的语句序列是 (9) (1) (6) (1))P->next=S;

(2)P->next=P->next->next; (3)P->next=S->next; (4)S->next=P->next; (5)S->next=L; (6)S->next=NULL; (7)Q=p;

(8)while (P->next!=Q) P=P->next; (9)while (P->next!=NULL) P=P->next; (10)P=Q; (11)P=L; (12)L=S; (13)L=P;

五、算法设计题

1、栈的顺序存储结构定义如下: #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 typedef struct{

ElemType *base; ElemType *top; int stacksize; }SqStack;

入栈操作的函数原型为:

Status Push( SqStack *S, ElemType e) //插入元素e为新的栈顶元素 请实现该函数算法。

Status Push(SqStack *S, ElemType e) {

/*如果空间不够就重新分配*/

if ((*S).top-(*S).base > (*S).size) {

(*S).base =(ElemType *)realloc((*S).base,

((*S).size+STACKINCREMENT)*sizeof(ElemType)); /*重新确定base指针 */ (*S).top = (*S).base + (*S).size; /*重新确定top指针 */ (*S).size+=STACKINCREMENT; }

*(*S).top = e; (*S).top++; return OK; }

2、单链队列的存储结构定义为: typedef struct QNode { QElemType data; struct QNode *next; } QNode, *QueuePtr;

typedef struct { QueuePtr front; QueuePtr rear; } LinkQueue;

出队函数原型为:

Status DeQueue( LinkQueue *Q, QElemType *e)

//若队列不空,则删除Q的队头元素,用e返回其值,并返回OK;否则返回ERROR 请实现该函数算法。

Status DeQueue(SqQueue &Q,QElemType &e){/*若队列不空,则删除Q的队头元素,用e返回其值,并返回OK,否则返回ERROR*/ if(Q.rear==Q.front) return ERROR;/*队列空*/ e=Q.base[Q.front]; Q.front=(Q.front+1)%MaxQsize; return OK;}

3、串的堆分配存储结构定义为: typedef struct{ char *ch; int length; }HString;

串联接操作的函数原型为:

Status Concat(HString *T, HString S1, HString S2) //用T返回由S1和S2联接而成的新串 请实现该函数算法。

Status Concat(HString &T,HString S1,HString S2) {//用T返回值由S1和S2联接而成的新串 if (T.ch) free(T.ch); //释放原有的空间

if (!(T.ch=(char *)malloc((S1.length+S2.length)*sizeof(char)))) exit(OVERFLOW); int i;

for (i=0;ifor (i=0;i4、串的堆分配存储结构定义为: typedef struct{ char *ch; int length; }HString;

求字串操作的函数原型为:

HString SubString(HString *Sub, HString S, int pos, int len); //用Sub返回串S的第pos个字符起长度为len的字串。 //其中,1≤pos≤StrLength(S)且0≤len≤StrLength(S)-pos+1。 请实现该函数算法。

void SubString(HString *sub,HString s,int pos,int len) {

//用sub返回串s的第pos个字符起长度为len的子串

//其中,1<=pos<=strlenth(s)且0<=len<=strlength(s)-pos + 1. int i,j;

if(pos<1 || pos>s.length || len<0 || len>s.length-pos+1) {

printf(\"SubString's Location error!\\n\"); exit(1); }

if(sub->ch) free(sub->ch); //释放旧空间 if(!len) {

sub->ch = NULL; sub->length = 0; } else {

sub->ch = (char*)malloc((len+1)*sizeof(char)); for(i=0,j=pos-1;j<=pos+len-2;++i,++j) sub->ch[i] = s.ch[j]; sub->length = len; sub->ch[sub->length] = '\\0'; } }

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- haog.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务