当前位置:文档之家› 数据结构第三章习题

数据结构第三章习题

数据结构第三章习题
数据结构第三章习题

数据结构第三章习题

3.1 单项选择题

2.一个栈的入栈序列a, b, c, d, e, 则栈的不可能的输出序列是。

A. edcba

B. Decba

C. Dceab

D. abcde

3. 若已知一个栈的入栈序列是1,2,3,………..n, 其输出序列为p1, p2, p3,……,pn, 若p1=n, 则pi为。

A.i.

B. n=I

C. n- i+1

D.不确定

4.栈结构通常采用的两种存储结构是。

A. 顺序存储结构和链表存储结构

B. 散链方式和索引方式

C.链表存储结构和数组

D. 线性存储结构和非线性存储结构

5.判定一个栈ST(最多元素为m0)为空的条件是。

A. ST->top<>0

B. ST->top=0

C.ST->top<>m0

D.ST->top=m0

6.判定一个栈ST(最多元素为m0)为栈满的条件是。

A. ST->top!=0

B.ST->top==0

C.ST->top!=m0

D.ST->top==m0

7.栈的特点是,队列的特点是。

A先进先出 B. 先进后出

8. 一个队列的入栈序列是1,2,3,4,则队列的输出序列是。

A. 4,3,2,1

B. 1,2,3,4

C. 1,4,3,2

D. 3,2,4,1

9. 判定一个队列QU(最多元素为m0)为空的条件是。

A.QU->rear- QU->front==m0

B.QU->rear- QU->front-1==m0

C.QU->front== QU->rear

D. QU->front== QU->rear+1

10.判定一个队列QU(最多元素为m0)为满队列的条件是。

A.QU->rear- QU->front==m0

B.QU->rear- QU->front-1==m0

C.QU->front== QU->rear

D.QU->front== QU->rear+1

11. 判定一个循环队列QU(最多元素为m0)为空的条件是。

A. QU->front== (QU->rear+1)%m0

B. QU->front!= (QU->rear+1)%m0

C.QU->front== QU->rear

D.QU->front!= QU->rear

12. 判定一个循环队列QU(最多元素为m0)为满队列的条件是。

A. QU->front== (QU->rear+1)%m0

B. QU->front!= (QU->rear+1)%m0

C.QU->front== QU->rear

D.QU->front!= QU->rear+1

12. 向一个栈顶指针为HS的链栈中插入一个s所指结点时,则执行。

HS->next=s;

A. s->next=HS->next; HS->next=s;

B. s->next=HS; HS=s;

C. s->next=HS; HS=HS->next;

13. 从一个栈顶指针为HS的链栈中删除一个结点时,用x保存被删结点的值,则执行。

A x=HS; HS=HS->next;

B. x=HS->data;

C. HS=HS->next; x=HS->data;

D. x=HS->data; HS=HS->next;

14. 在一个链队中,假设f和r分别为队首和队尾指针,则插入s所指结点的运算时。

A. f->next=s; f=s;

B. r->next=s;r=s;

C. s->next=r; r=s;

D. s->next=f; f=s;

15. 在一个链队中,假设f和r分别为队首和队尾指针,则删除一个结点的运算时。

A. r=f->next;

B. r=r->next;

C. f=f->next;

D. f=r-next;

3.2 填空题

4.向栈中压入元素的操作是

5.对栈进行退栈的操作是

6.在一个循环队列中,队首指针指向队首元素的

7.从循环队列中删除一个元素时,其操作是

8.在具有个单元的循环队列中,队满时共有个元素

9. 在栈顶指针为HS的链栈中,判定栈空的条件是。

10. 在栈顶指针为HS的链栈中,计算该链站中结点个数的函数时。

11. 在HQ的链队中,判定只有一个结点的条件是。

12. 在HQ的链队中,计算该链队中结点个数的函数是。

3.3 顺序栈习题解析

1. 对于一个栈,给出输入项A,B,C. 如果输入项序列由A,B,C所组成,是给出全部可能的输出序列。

解:本题利用栈的“后进先出”的特点,有如下几种情况:

A进A出B进B出C进C出产生输出序列ABC

A进A出B进C进C出B出产生输出序列ACB

A进B进B出 A出C进C出产生输出序列BAC

A进B进B出C进C出A出产生输出序列BCA

A进B进C进C出B出 A出产生输出序列CBA

不可能产生的输出序列CAB

2.有两个栈s1和s2共享存储空间c[1,m], 其中一个栈底设在c[1]处,另一个栈底设在c[m0]处,分别编写s1和s2的进栈push( i,x)、退栈pop(i)和设置栈空setnull(i)的函数,其中i=1,2。注意:仅当整个空间c[1,m0]占满时才产生上溢。

解:该共享栈的结构如图2.3所示,两栈的最多元素个数为m0, top1是栈1的栈指针,

top2 是栈2的栈指针,当top2=top1+1时出现上溢出,当top1=0时栈1出现下溢出,当top2=m0+1时栈2出现下溢出。根据上述原理得到如下

函数:

top1 top2

c的元素序号1 2 ……..n ……..m0-1 m0

a1 a2 …… a n ………. bm ………b2 b1

栈1底栈1顶栈2顶栈2底

图2.3 共享栈

/*top1,top2 和m0均为已赋初值的int型全局变量*/

void push(x,i)

int x,I

{

if (top1==top2-1) printf(“上溢出!\n”);

else

if(i==1)/*对第一个栈进行入栈操作*/

{

top1++; c[top1]=x;

}

else /*对第二个栈进行入栈操作*/

{

top2--; c[top2]=x;

}

}

/*函数pop*/

void pop(i)

int i ;

{

if (i ==1 )/*对第一个栈进行出栈操作*/

if(top1==0)printf(“栈1下溢出!\n”);

else

{

pop=c[top1]; top1--;

}

else /*对第二个栈进行出栈操作*/

if (top2==m0+1) printf(“栈2下溢出!\n”);

else

{

pop=c[top2];top2++;

}

}

/*函数setnull*/

setnull(i)

int i ;

{

if(i ==1 )top1=0;

else top2=m0+1;

}

4.证明:有可能从初始输入序列1,2,…….n, 利用一个栈得到输出序列

p1,p2,…..,pn(p1,p2……pn是1,2,…..n 的一种排列)的充分必要条件是:不存在这样的i , j, k, 满足i

证明:【充分条件】如果不存在这样的i ,j,k 满足i

…,pj… pk,…pi,…,(pj

不存在这样的输出序列:

…,pi… pj,…pk,…,

(或简单地对于输入序列1,2,3不存在输出序列3,1,2)

从中看到,pi?后进先出,是满足栈的特点,因为pi最大也就是在pj和pk之后进入,却在输出序列中排在pj和pk之前,同时也说明, 在pk之前先进入的pj不可能在pk之后出来,反过来说明满足先进后出的特点,所以构成一个栈。

【必要条件】如果初始输入序列是1,2,…,n,假设是进栈,又同时存在

i ,j,k

满足i

…,pj… pk,…pi,…,(pj

存在这样的输出序列:

…,pi… pj,…pk,…,

从中看到,pi?先进后出,是满足栈的特点,因为pi最大也就是在pj和pk之后进入,同时看到在pk之前先进入的pj却在pk之前出来,反过来说明不满足先进后出的特点,与前面的假设是栈不一致,本题即证。

6. 已知两个整数集合A和B,它们的元素分别依元素值递增有序存放在两个单链表HA 和HB中,编写一个函数求出这两个集合的并集C,并要求表示集合C的链表的结点仍依元素值递增有序存放。

解:假设HA和HB的头指针分别为ha和hb,先设置一个空的循环单链表HC,头指针为hc,之后依次比较HA和HB的当前结点的元素值,将较小元素值的结点复制一个并链接到HC的末尾,若相等,则将其中之一复制一个并链接到HC的末尾。当HA或HB为空后,把另一个链表的余下结点都复制并链接到HC的末尾。实现本题功能的函数如下:void union(ha,hb,hc)

node *ha,*hb,*hc;

{

node *p,*q,*r,*s;

hc={node *}malloc(sizeof(node));

/*建立一个头结点,r总是指向HC链表的最后一个结点*/

r=hc;p=ha;q=hb;

while(p!=NULL&&q!=NULL)

{

if (p->datadata)

{

s=(node*)malloc(sizeof(node));

s->data=p->data;

r->next=s;

r=s;

p=p->next;

}

else if (p->data>q->data)

{

s=(node*)malloc(sizeof(node));

s->data=q->data;

r->next=s;

r=s;

q=q->next;

}

else /*p->data==q->data的情况/

{

s={node*}malloc(sizeof(node));

q=q->next;

}

}

if(p==NULL)/* 把q及之后的结点复制到HC中*/

while (q!=NULL)

{

s=(node*)malloc(sizeof(node));

s->data=p->data;

r->next=s;

r=s;

p=p->next;

}

r->next=NULL;

s=hc;

hc=hc->next;

free(s); /*删除头结点*/

}

15. 假设在长度大于1的循环单链表中,既无头结点也无头指针,p为指向该链表中某个结点的指针,编写一个函数删除该结点的前驱结点。

解:本题利用循环单链表的特点,通过p指针可循环找到其前驱结点q及q的前驱结点r,然后将其删除。实现本题功能的函数如下:

node *del(p)

node *p;

{

node *q,*r;

q=p; /*查找p结点的前驱结点,用q指针指向* / while(q->next!=p) q=q->next;

r=q;/*查找q结点的前驱结点,用r指针指向*/

while(r->next!=q) r=r->next;

r->next=p;/*删除q所指的结点*/

free(q);

return(p);

}

数据结构第三章习题答案

第三章习题 1.按图3.1(b)所示铁道(两侧铁道均为单向行驶道)进行车厢调度,回答: ⑴如进站的车厢序列为123,则可能得到的出站车厢序列是什么? ⑵如进站的车厢序列为123456,能否得到435612和135426的出站序列,并说明原因。(即写出 以“S”表示进栈、以“X”表示出栈的栈操作序列)。 2.设队列中有A、B、C、D、E这5个元素,其中队首元素为A。如果对这个队列重复执行下列4步 操作: (1)输出队首元素; (2)把队首元素值插入到队尾; (3)删除队首元素; (4)再次删除队首元素。 直到队列成为空队列为止,得到输出序列: (1)A、C、E、C、C (2) A、C、E (3) A、C、E、C、C、C (4) A、C、E、C 3.给出栈的两种存储结构形式名称,在这两种栈的存储结构中如何判别栈空与栈满? 4.按照四则运算加、减、乘、除和幂运算(↑)优先关系的惯例,画出对下列算术表达式求值时操 作数栈和运算符栈的变化过程: A-B*C/D+E↑F 5.试写一个算法,判断依次读入的一个以@为结束符的字母序列,是否为形如‘序列1& 序列2’ 模式的字符序列。其中序列1和序列2中都不含字符’&’,且序列2是序列1的逆序列。例如,‘a+b&b+a’是属该模式的字符序列,而‘1+3&3-1’则不是。 6.假设表达式由单字母变量和双目四则运算算符构成。试写一个算法,将一个通常书写形式且书写 正确的表达式转换为逆波兰式。 7.假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(注意不设头指针), 试编写相应的队列初始化、入队列和出队列的算法。 8.要求循环队列不损失一个空间全部都能得到利用, 设置一个标志域tag , 以tag为0或1来区分 头尾指针相同时的队列状态的空与满,请编写与此结构相应的入队与出队算法。

经典数据结构面试题(含答案)

栈和队列的共同特点是__________________________ .栈通常采用的两种存储结构是______________________ .用链表表示线性表的优点是_______________________ 8.在单链表中,增加头结点的目的是___________________ 9.循环链表的主要优点是________________________- 12.线性表的顺序存储结构和线性表的链式存储结构分别是 __________________________ 13.树是结点的集合,它的根结点数目是_____________________ 14.在深度为5的满二叉树中,叶子结点的个数为_______________ 15.具有3个结点的二叉树有(_____________________ 16.设一棵二叉树中有3个叶子结点,有8个度为1的结点,则该二叉树中总的结点数为____________________ 17.已知二叉树后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是 ____________________________ 18.已知一棵二叉树前序遍历和中序遍历分别为ABDEGCFH和DBGEACHF,则该二叉树的后序遍历为______________________ 19.若某二叉树的前序遍历访问顺序是abdgcefh,中序遍历访问顺序是dgbaechf,则其后序遍历的结点访问顺序是_______________________ 20.数据库保护分为:安全性控制、完整性控制、并发性控制和数据的恢复。 在计算机中,算法是指_______________________ 算法一般都可以用哪几种控制结构组合而成_____________________ .算法的时间复杂度是指______________________ 5. 算法的空间复杂度是指__________________________ 6. 算法分析的目的是__________________________

数据结构第三章习题

数据结构第三章习题 3.1 单项选择题 2.一个栈的入栈序列a, b, c, d, e, 则栈的不可能的输出序列是。 A. edcba B. Decba C. Dceab D. abcde 3. 若已知一个栈的入栈序列是1,2,3,………..n, 其输出序列为p1, p2, p3,……,pn, 若p1=n, 则pi为。 A.i. B. n=I C. n- i+1 D.不确定 4.栈结构通常采用的两种存储结构是。 A. 顺序存储结构和链表存储结构 B. 散链方式和索引方式 C.链表存储结构和数组 D. 线性存储结构和非线性存储结构 5.判定一个栈ST(最多元素为m0)为空的条件是。 A. ST->top<>0 B. ST->top=0 C.ST->top<>m0 D.ST->top=m0 6.判定一个栈ST(最多元素为m0)为栈满的条件是。 A. ST->top!=0 B.ST->top==0 C.ST->top!=m0 D.ST->top==m0 7.栈的特点是,队列的特点是。 A先进先出 B. 先进后出 8. 一个队列的入栈序列是1,2,3,4,则队列的输出序列是。 A. 4,3,2,1 B. 1,2,3,4 C. 1,4,3,2 D. 3,2,4,1 9. 判定一个队列QU(最多元素为m0)为空的条件是。 A.QU->rear- QU->front==m0 B.QU->rear- QU->front-1==m0 C.QU->front== QU->rear D. QU->front== QU->rear+1 10.判定一个队列QU(最多元素为m0)为满队列的条件是。 A.QU->rear- QU->front==m0 B.QU->rear- QU->front-1==m0 C.QU->front== QU->rear D.QU->front== QU->rear+1 11. 判定一个循环队列QU(最多元素为m0)为空的条件是。 A. QU->front== (QU->rear+1)%m0 B. QU->front!= (QU->rear+1)%m0 C.QU->front== QU->rear D.QU->front!= QU->rear 12. 判定一个循环队列QU(最多元素为m0)为满队列的条件是。 A. QU->front== (QU->rear+1)%m0 B. QU->front!= (QU->rear+1)%m0 C.QU->front== QU->rear D.QU->front!= QU->rear+1 12. 向一个栈顶指针为HS的链栈中插入一个s所指结点时,则执行。 HS->next=s;

数据结构模拟卷(含答案)经典习题培训讲学

数据结构模拟卷(含答案)经典习题

练习题 一、单项选择题 1. 若将数据结构形式定义为二元组(K,R),其中K是数据元素的有限集合,则R是K上( ) A. 操作的有限集合 B. 映象的有限集合 C. 类型的有限集合 D. 关系的有限集合 2. 在长度为n的顺序表中删除第i个元素(1≤i≤n)时,元素移动的次数为( ) A. n-i+1 B. i C. i+1 D. n-i 3. 若不带头结点的单链表的指针为head,则该链表为空的判定条件是( ) A. head==NULL B. head->next==NULL C. head!=NULL D. head->next==head 4. 引起循环队列队头位置发生变化的操作是( ) A. 出队 B. 入队 C. 取队头元素 D. 取队尾元素 5. 若进栈序列为1,2,3,4,5,6,且进栈和出栈可以穿插进行,则不.可能出现的出栈序列是( ) A. 2,4,3,1,5,6 B. 3,2,4,1,6,5 C. 4,3,2,1,5,6 D. 2,3,5,1,6,4

6. 字符串通常采用的两种存储方式是( ) A. 散列存储和索引存储 B. 索引存储和链式存储 C. 顺序存储和链式存储 D. 散列存储和顺序存储 7. 数据结构是() A.一种数据类型 B.数据的存储结构 C.一组性质相同的数据元素的集合 D.相互之间存在一种或多种特定关系的数据元素的集合 8. 算法分析的目的是() A.辨别数据结构的合理性 B.评价算法的效率 C.研究算法中输入与输出的关系 D.鉴别算法的可读性 9. 在线性表的下列运算中,不.改变数据元素之间结构关系的运算是 () A.插入B.删除 C.排序D.定位10. 下列图示的顺序存储结构表示的二叉树是( )

完整版数据结构习题集第3章栈和队列

第3章栈和队列 一、选择题 1.栈结构通常采用的两种存储结构是(A )。 A、顺序存储结构和链表存储结构 B、散列和索引方式 C、链表存储结构和数组 D、线性链表结构和非线性存储结构 2.设栈ST 用顺序存储结构表示,则栈ST 为空的条件是( B ) A、ST.top-ST.base<>0 B、ST.top-ST.base==0 C、ST.top-ST.base<>n D、ST.top-ST.base==n 3.向一个栈顶指针为HS 的链栈中插入一个s 结点时,则执行( C ) A、HS->next=s; B、s->next=HS->next;HS->next=s; C、s->next=HS;HS=s; D、s->next=HS;HS=HS->next; 4.从一个栈顶指针为HS 的链栈中删除一个结点,用x 保存被删除结点的值,则执行( C) A 、x=HS;HS=HS->next; B 、HS=HS->next;x=HS->data; C 、x=HS->data;HS=HS->next; D 、s->next=Hs;Hs=HS->next; 5.表达式a*(b+c)-d 的后缀表达式为( B ) A、abcdd+- B、abc+*d- C、abc*+d- D、-+*abcd 6.中缀表达式A-(B+C/D)*E 的后缀形式是( D ) A、AB-C+D/E* B、ABC+D/E* C、ABCD/E*+- D、ABCD/+E*- 7.一个队列的入列序列是1,2,3,4,则队列的输出序列是( B ) A、4,3,2,1 B、1,2,3,4 C、1,4,3,2 D、3,2,4,1 8.循环队列SQ 采用数组空间SQ.base[0,n-1]存放其元素值,已知其头尾指针分别是front 和rear,则判定此循环队列为空的条件是() A、Q.rear-Q.front==n B、Q.rear-Q.front-1==n C、Q.front==Q.rear D、Q.front==Q.rear+1 9.循环队列SQ 采用数组空间SQ.base[0,n-1]存放其元素值,已知其头尾指针分别是front 和rear,则判定此循环队列为满的条件是() A、Q.front==Q.rear B、Q.front!=Q.rear C、Q.front==(Q.rear+1)%n D、Q.front!=(Q.rear+1)%n 10.若在一个大小为6 的数组上实现循环队列,且当前rear 和front 的值分别为0 和3,当从 队列中删除一个元素,再加入两个元素后,rear 和front 的值分别为() A、1,5 B、2, 4 C、4,2 D、5,1 11.用单链表表示的链式队列的队头在链表的()位置 A、链头 B、链尾 C、链中 12.判定一个链队列Q(最多元素为n 个)为空的条件是() A、Q.front==Q.rear B、Q.front!=Q.rear C、Q.front==(Q.rear+1)%n D、Q.front!=(Q.rear+1)%n 13.在链队列Q 中,插入s 所指结点需顺序执行的指令是() A 、Q.front->next=s;f=s; B 、Q.rear->next=s;Q.rear=s;

数据结构模拟卷(含答案)经典习题

练习题 一、单项选择题 1. 若将数据结构形式定义为二元组(K,R),其中K是数据元素的有限集合,则R是K上( ) A. 操作的有限集合 B. 映象的有限集合 C. 类型的有限集合 D. 关系的有限集合 2. 在长度为n的顺序表中删除第i个元素(1≤i≤n)时,元素移动的次数为( ) A. n-i+1 B. i C. i+1 D. n-i 3. 若不带头结点的单链表的指针为head,则该链表为空的判定条件是( ) A. head==NULL B. head->next==NULL C. head!=NULL D. head->next==head 4. 引起循环队列队头位置发生变化的操作是( ) A. 出队 B. 入队 C. 取队头元素 D. 取队尾元素 5. 若进栈序列为1,2,3,4,5,6,且进栈和出栈可以穿插进行,则不.可能出现的出栈序列是( ) A. 2,4,3,1,5,6 B. 3,2,4,1,6,5 C. 4,3,2,1,5,6 D. 2,3,5,1,6,4 1

6. 字符串通常采用的两种存储方式是( ) A. 散列存储和索引存储 B. 索引存储和链式存储 C. 顺序存储和链式存储 D. 散列存储和顺序存储 7. 数据结构是() A.一种数据类型 B.数据的存储结构 C.一组性质相同的数据元素的集合 D.相互之间存在一种或多种特定关系的数据元素的集合 8. 算法分析的目的是() A.辨别数据结构的合理性 B.评价算法的效率 C.研究算法中输入与输出的关系 D.鉴别算法的可读性 9. 在线性表的下列运算中,不.改变数据元素之间结构关系的运算是 () A.插入B.删除 C.排序D.定位 10. 下列图示的顺序存储结构表示的二叉树是( ) 2

数据结构第三章栈和队列3习题

第三章栈和队列试题 一、单项选择题 1.栈的插入和删除操作在()进行。 A. 栈顶 B. 栈底 C. 任意位置 D. 指定位置 2.当利用大小为n的数组顺序存储一个栈时,假定用top==n表示栈空,则向这个栈插入一个元素时, 首先应执行()语句修改top指针。 A. top++; B. top--; C. top = 0; D. top; 3.若让元素1,2,3依次进栈,则出栈次序不可能出现()种情况。 A. 3, 2, 1 B. 2, 1, 3 C. 3, 1, 2 D. 1, 3, 2 4.在一个顺序存储的循环队列中,队头指针指向队头元素的()位置。 A. 前一个 B. 后一个 C. 当前 D. 后面 5.当利用大小为n的数组顺序存储一个队列时,该队列的最大长度为()。 A. n-2 B. n-1 C. n D. n+1 6.从一个顺序存储的循环队列中删除一个元素时,需要()。 A. 队头指针加一 B. 队头指针减一 C. 取出队头指针所指的元素 D. 取出队尾指针所指的元素 7.假定一个顺序存储的循环队列的队头和队尾指针分别为front和rear,则判断队空的条件为()。 A. front+1 == rear B. rear+1 == front C. front == 0 D. front == rear 8.假定一个链式队列的队头和队尾指针分别为front和rear,则判断队空的条件为()。 A. front == rear B. front != NULL C. rear != NULL D. front == NULL 9.设链式栈中结点的结构为(data, link),且top是指向栈顶的指针。若想在链式栈的栈顶插入一 个由指针s所指的结点,则应执行操作()。 A. top->link = s; B.s->link = top->link; top->link = s; C. s->link = top; top = s; D. s->link = top; top = top->link; 10.设链式栈中结点的结构为(data, link),且top是指向栈顶的指针。若想摘除链式栈的栈顶结点, 并将被摘除结点的值保存到x中,则应执行操作()。 A. x = top->data; top = top->link; B. top = top->link; x = top->data; C. x = top; top = top->link; D. x = top->data; 11.设循环队列的结构是 #define MaxSize 100 typedef int ElemType;

经典数据结构上机题_答案解析

数据结构上机实验题目 实验一线性表的顺序存储结构 实验学时 2学时 背景知识:顺序表的插入、删除及应用。 目的要求: 1.掌握顺序存储结构的特点。 2.掌握顺序存储结构的常见算法。 实验容 1.输入一组整型元素序列,建立顺序表。 2.实现该顺序表的遍历。 3.在该顺序表中进行顺序查找某一元素,查找成功返回1,否则返回0。4.判断该顺序表中元素是否对称,对称返回1,否则返回0。 5.实现把该表中所有奇数排在偶数之前,即表的前面为奇数,后面为偶数。 6.输入整型元素序列利用有序表插入算法建立一个有序表。 7.利用算法6建立两个非递减有序表并把它们合并成一个非递减有序表。 8. 利用该顺序结构实现循环队列的入队、出队操作。 8.编写一个主函数,调试上述算法。 #include #include

#define OVERFLOW 0 #define MAXSIZE 100 typedef int ElemType; typedef struct list {ElemType elem[MAXSIZE]; int length; }Sqlist; void Creatlist(Sqlist &L) {int i; printf("请输入顺序表的长度:"); //输入一组整型元素序列,建立一个顺序表。 scanf("%d",&L.length); for(i=0;i

数据结构作业及答案

第一章绪论 一、选择题 1.数据结构是一门研究非数值计算的程序设计问题中计算机的1以及它们之间的2和运算等的学科。1 A.数据元素 B.计算方法 C.逻辑存储 D.数据映像 2 A.结构 B.关系 C.运算 D.算法 2.数据结构被形式地定义为(K, R),其中K是1的有限集,R是K上的2有限集。 1 A.算法 B.数据元素 C.数据操作 D.逻辑结构 2 A.操作 B.映像 C.存储 D.关系 3.在数据结构中,从逻辑上可以把数据结构分成。 A.动态结构和静态结构 B.紧凑结构和非紧凑结构 C.线性结构和非线性结构 D.内部结构和外部结构 4.线性结构的顺序存储结构是一种1的存储结构,线性表的链式存储结构是一种2的存储结构。A.随机存取 B.顺序存取 C.索引存取 D.散列存取 5.算法分析的目的是1,算法分析的两个主要方面其一是指2,其二是指正确性和简单性。1 A.找出数据结构的合理性 B.研究算法中的输入和输出的关系 C.分析算法的效率以求改进 D.分析算法的易懂性和文档性 2 A.空间复杂度和时间复杂度 B.研究算法中的输入和输出的关系 C.可读性和文档性 D.数据复杂性和程序复杂性k 6.计算机算法指的是1,它必须具备输入、输出和2等5个特性。 1 A.计算方法 B.排序方法 C.解决问题的有限运算序列 D.调度方法 2 A.可执行性、可移植性和可扩充性 B.可行性、确定性和有穷性 C.确定性、有穷性和稳定性 D.易读性、稳定性和安全性 7.线性表的逻辑顺序与存储顺序总是一致的,这种说法。A.正确 B.不正确 8线性表若采用链式存储结构时,要求内存中可用存储单元的地址。 A.必须连续的 B.部分地址必须连续的 C.一定是不续的D连续不连续都可以 9.以下的叙述中,正确的是。A.线性表的存储结构优于链式存储结构 B.二维数组是其数据元素为线性表的线性表C.栈的操作方式是先进先出D.队列的操作方式是先进后出10.每种数据结构都具备三个基本运算:插入、删除和查找,这种说法。A.正确B.不正确 二、填空题1.数据逻辑结构包括三种类型、和,树形结构和图形结构合称为。2.在线性结构中,第一个结点前驱结点,其余每个结点有且只有个前驱结点;最后一个结点后续结点,其余每个结点有且只有个后续结点。3.算法的五个重要特性是、、、、。 4.下面程序段的时间复杂度是。 for( i = 0; i < n; i++) for( j = 0; j < m; j++) A[i][j] = 0; 5.下面程序段的时间复杂度是。 i = s = 0; while ( s < n) { i ++; /* i = i +1*/ s += i; /* s = s + i*/ } 6.下面程序段的时间复杂度是。 s = 0; for( i = 0; i < n; i++) for( j = 0; j < n; j++) s += B[i][j]; sum = s; 7.下面程序段的时间复杂度是。 i = 1; while ( i <= n ) i = i * 3;

数据结构经典题目c语言代码

《数据结构》课程设计题目 (程序实现采用C语言) 题目1:猴子选王(学时:3) 一堆猴子都有编号,编号是1,2,3 ...m,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。 要求:m及n要求从键盘输入,存储方式采用向量及链表两种方式实现该问题求解。 //链表 #include #include // 链表节点 typedef struct _RingNode { int pos; struct _RingNode *next; }RingNode, *RingNodePtr; // 创建约瑟夫环,pHead:链表头指针,count:链表元素个数 void CreateRing(RingNodePtr pHead, int count) { RingNodePtr pCurr = NULL, pPrev = NULL; int i = 1; pPrev = pHead; while(--count > 0)

{ pCurr = (RingNodePtr)malloc(sizeof(RingNode)); i++; pCurr->pos = i; pPrev->next = pCurr; pPrev = pCurr; } pCurr->next = pHead; // 构成环状链表 } void KickFromRing(RingNodePtr pHead, int n) { RingNodePtr pCurr, pPrev; int i = 1; // 计数 pCurr = pPrev = pHead; while(pCurr != NULL) { if (i == n) { // 踢出环 printf("\n%d", pCurr->pos); // 显示出圈循序 pPrev->next = pCurr->next; free(pCurr); pCurr = pPrev->next; i = 1; } pPrev = pCurr;

数据结构(清华大学出版社)第3章习题

第3章:栈和队列 1.熟练掌握栈的类型定义和操作特点; 填空题: 1、向量、栈和队列都是线性结构,可以在向量的任何位置插入和删除元素;对于栈只能在栈顶插入和删除元素。 2、栈是一种特殊的线性表,允许插入和删除运算的一端称为栈顶。不允许插入和删除运算的一端称为栈底。 3、向栈中压入元素的操作是先移动栈顶指针,后存入元素。 选择题: (B)1、栈中元素的进出原则是() A.先进先出 B.后进先出 C.栈空则进 D.栈满则出 (C)2、若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…, pn,若p1=n,则pi为() A.i B.n=i C.n-i+1 D.不确定 解释:当p1=n,即n是最先出栈的,根据栈的原理,n必定是最后入栈的(事实上题目已经表明了),那么输入顺序必定是1,2,3,…,n,则出栈的序列是n,…,3,2,1。 (若不要求顺序出栈,则输出序列不确定) (B)3、判定一个栈ST(最多元素为m0)为空的条件是() A.ST->top<>0 B.ST->top=0 C.ST->top<>m0 D.ST->top=m0 4、从供选择的答案中,选出应填入下面叙述?内的最确切的解答,把相应编号写在答卷的对应栏内。 设有4个数据元素a1、a2、a3和a4,对他们分别进行栈操作。在进栈操作时,按a1、a2、a3、a4次序每次进入一个元素。假设栈初始状态都是空。现要进行的栈操作是进栈两次,出栈一次,再进栈两次,出栈一次;这时,第一次出栈得到的元素是 A ,第二次出栈得到的元素是 B ;经操作后,最后在栈中的元素还有 C个。 供选择的答案: A~B:①a1 ②a2 ③ a3 ④a4 C:①1 ②2 ③ 3 ④ 0 答:ABC=2, 4, 2 5、从供选择的答案中,选出应填入下面叙述?内的最确切的解答,把相应编号写在答卷的对应栏内。 栈是一种线性表,它的特点是 A 。设用一维数组A[1,…,n]来表示一个栈,A[n]为栈底,用整型变量T指示当前栈顶位置,A[T]为栈顶元素。往栈中推入(PUSH)一个新元素时,变量T的值 B ;从栈中弹出(POP)一个元素时,变量T的值 C 。设栈空时,有输入序列a,b,c,经过PUSH,POP,PUSH,PUSH,POP操作后,从栈中弹出的元素的序列是 D ,变量T的值是 E 。 供选择的答案: A:①先进先出②后进先出③进优于出④出优于进⑤随机进出 B,C:①加1 ②减1 ③不变④清0 ⑤加2 ⑥减2 D:① a,b ②b,c ③c,a ④b,a ⑤ c,b ⑥ a,c E:① n+1 ②n+2 ③ n ④ n-1 ⑤ n-2 答案:ABCDE= 2, 2, 1, 6, 4

数据结构经典例题

数据结构经典例题 1.设计一个算法将L拆分成两个带头节点的单链表L1和L2。 void split(LinkList *&L,LinkList *&L1,LinkList *&L2) { LinkList *p=L->next,*q,*r1; //p指向第1个数据节点 L1=L; //L1利用原来L的头节点 r1=L1; //r1始终指向L1的尾节点 L2=(LinkList *)malloc(sizeof(LinkList));//创建L2的头节点 L2->next=NULL; //置L2的指针域为NULL while (p!=NULL) { r1->next=p; //采用尾插法将*p(data值为ai)插入L1中 r1=p; p=p->next; //p移向下一个节点(data值为bi) q=p->next; //由于头插法修改p的next域,故用q保存*p的后继节点 p->next=L2->next; //采用头插法将*p插入L2中 L2->next=p; p=q; //p重新指向ai+1的节点 } r1->next=NULL; //尾节点next置空 } 2.查找链表中倒数第k个位置上的节点(k为正整数)。若查找成功,算法输出该节点的data域的值,并返回1;否则,只返回0。 typedef struct LNode {int data; struct LNode *link; } *LinkList; int Searchk(LinkList list,int k) { LinkList p,q; int count=0; p=q=list->link; while (p!=NULL) { if (countlink; p=p->link; } if (count

数据结构练习题第三章栈、队列和数组习题及答案

第三章栈、队列和数组 一、名词解释: 1.栈、栈顶、栈底、栈顶元素、空栈 2.顺序栈 3.链栈 4.递归 5.队列、队尾、队头 6.顺序队 7.循环队 8.队满 9.链队10.随机存储结构11.特殊矩阵12.稀疏矩阵13.对称方阵14.上(下)三角矩阵 二、填空题: 1.栈修改的原则是_________或称________,因此,栈又称为________线性表。在栈顶 进行插入运算,被称为________或________,在栈顶进行删除运算,被称为________ 或________。 2.栈的基本运算至少应包括________、________、________、________、________五 种。 3.对于顺序栈,若栈顶下标值top=0,此时,如果作退栈运算,则产生“________”。 4.对于顺序栈而言,在栈满状态下,如果此时在作进栈运算,则会发生“________”。 5.一般地,栈和线性表类似有两种实现方法,即________实现和________实现。 6.top=0表示________,此时作退栈运算,则产生“________”;top=sqstack_maxsize-1 表示________,此时作进栈运算,则产生“________”。 7.以下运算实现在顺序栈上的初始化,请在________处用适当的句子予以填充。 int InitStack(SqStackTp *sq) { ________; return(1);} 8.以下运算实现在顺序栈上的进栈,请在________处用适当的语句予以填充。 Int Push(SqStackTp *sq,DataType x) { if(sp->top==sqstack_maxsize-1}{error(“栈满”);return(0);} else{________________: ________________=x; return(1);} } 9.以下运算实现在顺序栈上的退栈,请在________________用适当句子予以填充。 Int Pop(SqStackTp *sq,DataType *x) {if(sp->top==0){error(“下溢”);return(0);} else{*x=________________; ________________; return(1);} } 10. 以下运算实现在顺序栈上判栈空,请在________________处用适当句子予以填充。 Int EmptyStack(SqStackTp *sq) {if(________________) return(1); else return(0); } 11.以下运算实现在顺序栈上取栈顶元素,请在________________处用适当句子予以填充。 Int GetTop(SqStackTp *sq,DataType *x) {if(________________) return(0);

数据结构典型例题

基本概念典型例题 一、单项选择题 [例6-1]数据结构用集合的观点可以表示为一个二元组DS=(D,R)。其中,D是( ①)的有穷集合,R是D上( ②)的有限集合。 ①A.算法B. 数据元素C. 数据操作D. 逻辑结构 ②A. 操作B. 映像C. 存储D.关系 解析:由数据结构的集合形式化定义可知,本题答案为:①B;②D。 [例6-2]数据的常用存储结构中不包括( )。 A.顺序存储结构B.线性结构C.索引存储结构D.散列存储结构 解析:数据通常有四种基本的存储方法,即顺序存储方法、链式存储方法、索引存储 方法和散列存储方法。由此可知,本题答案为:B。 [例6-3] 算法指的是( ①),它必须具备( ②)这三个特性。 ①A.计算方法B.排序方法C.解决问题的步骤序列D.调度方法 ②A.可执行性、可移植性、可扩充性B.可执行性、确定性、有穷性 C.确定性、有穷性、稳定性D.易读性、稳定性、安全性 解析:算法是对特定问题求解步骤的一种描述,是由若于条指令组成的有限序列。它 必须满足以下性质:输人性、输出性、有穷性、确定性、无二义性和可行性。由此可知,本 题答案为:①㈠②B。 [例6-4] 在下面的程序段中,对x的赋值语句的执行频度为( )。 for(i=0;i

数据结构(第二版)习题答案第3章

3.1 选择题 第3章线性表的链式存储 (1)两个有序线性表分别具有n个元素与m个元素且n≤m,现将其归并成一个有序表,其最少的比较次数是( A )。 A.n B.m C.n? 1D.m + n (2)非空的循环单链表 head 的尾结点(由 p 所指向)满足( C )。 A.p->next==NULL B.p==NULL C.p->next==head D.p==head (3)在带头结点的单链表中查找x应选择的程序体是( C )。 A.node *p=head->next; while (p && p->info!=x) p=p->next; if (p->info==x) return p else return NULL; B.node *p=head; while (p&& p->info!=x) p=p->next; return p; C.node *p=head->next; while (p&&p->info!=x) p=p->next; return p; D.node *p=head; while (p->info!=x) p=p->next ; return p; (4)线性表若采用链式存储结构时,要求内存中可用存储单元的地址( D )。 A.必须是连续的C.一定是不连续的B.部分地址必须是连续的D.连续不连续都可以 (5)在一个具有n个结点的有序单链表中插入一个新结点并保持单链表仍然有序的时间复杂度是( B )。 A.O(1) B.O(n)C.O(n2)D.O(n log2n )(6)用不带头结点的单链表存储队列时,其队头指针指向队头结点,其队尾指针指向队尾结点,则在进行删除操作时(D )。 A.仅修改队头指针 C.队头、队尾指针都要修改B.仅修改队尾指针 D.队头,队尾指针都可能要修改 (7)若从键盘输入n个元素,则建立一个有序单向链表的时间复杂度为( B )。 A.O(n)B.O(n2)C.O(n3)D.O(n× log2n)(8)下面哪个术语与数据的存储结构无关(D)。 A.顺序表B.链表C.散列表D.队列 (9)在一个单链表中,若删除 p 所指结点的后续结点,则执行( A )。 A.p->next=p->next->next; B.p=p->next; p->next=p->next->next; C.p->next=p->next; D.p =p->next->next; (10)在一个单链表中,若 p 所指结点不是最后结点,在 p 之后插入 s 所指结点,则执行( B )。 A.s->next=p;p->next=s; B.s->next=p->next;p->next=s; C.s->next=p->next;p=s; D.p->next=s;s->next=p; 3.2 设计一个算法,求一个单链表中的结点个数。 【答】:单链表存储结构定义如下(相关文件:linklist.h)

数据结构经典算法试题

1.假设有两个按元素值递增次序排列的线性表,均以单链表形式存储。请编写算法将这两个单链表归并为一个按元素值递减次序排列的单链表,并要求利用原来两个单链表的结点存放归并后的单链表。【北京大学1998 三、1 (5分)】 LinkedList Union(LinkedList la,lb) { pa=la->next; pb=lb->next; la->next=null; while(pa!=null && pb!=null) ∥当两链表均不为空时作 if(pa->data<=pb->data) { r=pa->next; pa->next=la->next; ∥将pa结点链于结果表中,同时逆置。 la->next=pa; pa=r; } else {r=pb->next; pb->next=la->next; ∥将pb结点链于结果表中,同时逆置。 la->next=pb; pb=r; } while(pa!=null) ∥将la表的剩余部分链入结果表,并逆置。 {r=pa->next; pa->next=la->next; la->next=pa; pa=r; } while(pb!=null) {r=pb->next; pb->next=la->next; la->next=pb; pb=r; } }

1)设有两个无头结点的单链表,头指针分别为ha,hb,链中有数据域data,链域next,两链表的数据都按递增序存放,现要求将hb表归到ha表中,且归并后ha仍递增序,归并中ha表中已有的数据若hb中也有,则hb中的数据不归并到ha中,hb的链表在算法中不允许破坏。【南京理工大学1997 四、3(15分)】 LinkedList Union(LinkedList ha, hb)∥ha和hb是两个无头结点的数据域值递增有序的单链 {LinkedList 表,本算法将hb中并不出现在ha中的数据合并到ha中,合并中不能破坏hb链表。 la; la=(LinkedList)malloc(sizeof(LNode)); la->next=ha; pa=ha; pb=hb; pre=la; while(pa&&pb) if(pa->datadata)∥处理ha中数据 {pre->next=pa;pre=pa;pa=pa->next;} else if(pa->data>pb->data)∥处理hb中数据。 {r=(LinkedList)malloc(sizeof(LNode)); r->data=pb->data; pre->next=r; pre=r; pb=pb->next;} Else∥处理pa- >data=pb->data; {pre->next=pa; pre=pa; pa=pa->next;∥两结点数据相等时,只将ha的数据链入。 pb=pb->next; } if(pa!=null)pre->next=pa;∥将两链表中剩余部分链入结果链表。 else pre->next=pb; free(la); }

数据结构课后习题详解(超完整,超经典)

第1章 绪论 1.1 简述下列术语:数据,数据元素、数据对象、数据结构、存储结构、数据类型和抽象数据类型。 解:数据是对客观事物的符号表示。在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。 数据元素是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。 数据对象是性质相同的数据元素的集合,是数据的一个子集。 数据结构是相互之间存在一种或多种特定关系的数据元素的集合。 存储结构是数据结构在计算机中的表示。 数据类型是一个值的集合和定义在这个值集上的一组操作的总称。 抽象数据类型是指一个数学模型以及定义在该模型上的一组操作。是对一般数据类型的扩展。 1.2 试描述数据结构和抽象数据类型的概念与程序设计语言中数据类型概念的区别。 解:抽象数据类型包含一般数据类型的概念,但含义比一般数据类型更广、更抽象。一般数据类型由具体语言系统内部定义,直接提供给编程者定义用户数据,因此称它们为预定义数据类型。抽象数据类型通常由编程者定义,包括定义它所使用的数据和在这些数据上所进行的操作。在定义抽象数据类型中的数据部分和操作部分时,要求只定义到数据的逻辑结构和操作说明,不考虑数据的存储结构和操作的具体实现,这样抽象层次更高,更能为其他用户提供良好的使用接口。 1.3 设有数据结构(D,R),其中 {}4,3,2,1d d d d D =,{}r R =,()()(){}4,3,3,2,2,1d d d d d d r = 试按图论中图的画法惯例画出其逻辑结构图。 解: 1.4 试仿照三元组的抽象数据类型分别写出抽象数据类型复数和有理数的定义(有理数是其分子、分母均为自然数且分母不为零的分数)。 解: ADT Complex{ 数据对象:D={r,i|r,i 为实数} 数据关系:R={} 基本操作: InitComplex(&C,re,im) 操作结果:构造一个复数C ,其实部和虚部分别为re 和im DestroyCmoplex(&C) 操作结果:销毁复数C Get(C,k,&e) 操作结果:用e 返回复数C 的第k 元的值 Put(&C,k,e) 操作结果:改变复数C 的第k 元的值为e IsAscending(C) 操作结果:如果复数C 的两个元素按升序排列,则返回1,否则返回0

[IT认证]全国计算机等级考试《数据结构》典型试题

典型题目分类 §1 概述 [全真模拟试卷3选择题3]数据结构中,与计算机无关的是数据的 A存储结构B物理结构C逻辑结构D物理和存储结构 答案:C [全真模拟试卷5选择题1]数据结构作为计算机的一门学科,主要研究数据的逻辑结构、对各种数据结构进行的运算,以及A数据的存储结构B计算方法C数据映象D逻辑存储 答案:A [全真模拟试卷5选择题3]在计算机中,算法是指 A加工方法B解决方案的准确而完整的描述 C排序方法D查询方法 答案:B [全真模拟试卷1填空题1]算法的基本特征是可行性、确定性、和拥有足够的情报。 答案:有穷性 [全真模拟试卷6选择题2]算法分析的目的是 A找出数据结构的合理性B找出算法中输入和输出之间的关系C分析算法的易懂性和可靠性D分析算法的效率以求改进 答案:D [全真模拟试卷6填空题1]在算法正确的前提下,评价一个算法的两个标准是。答案:时间复杂度和空间复杂度[专家预测试卷3填空题1]算法的工作量大小和实现算法所需的存储单元多少分别称为算法的。 答案:时间复杂度和空间复杂度 [全真模拟试卷3选择题1]算法的空间复杂度是指 A算法程序的长度B算法程序中的指令条数 C算法程序所占的存储空间D执行过程中所需要的存储空间答案:D §2 线性表 [全真模拟试卷6选择题3]线性表L=(a1,a2,……,a i,……,a n),下列说法正确的是 A每个元素都有一个直接前件和直接后件 B线性表中至少要有一个元素

C表中诸元素的排列顺序必须是由小到大或由大到小 D除第一个元素和最后一个元素外,其余每个元素都有且只有一个直接前件和一个直接后件 答案:D [全真模拟试卷7选择题1]下列叙述正确的是 A线性表是线性结构B栈和队列是非线性结构 C线性链表是非线性结构D二叉树是线性结构 答案:A [专家预测试卷3选择题1]根据数据结构中各数据元素之间前后件关系的复杂程度,一般将数据结构分成 A动态结构和静态结构B紧凑结构和非紧凑结构 C线性结构和非线性结构D内部结构和外部结构 答案:C [全真模拟试卷3填空题1]数据的逻辑结构有线性结构和两大类。 答案:非线性结构 [专家预测试卷1选择题3]线性表的顺序存储结构和线性表的链式存储结构分别是 A顺序存取的存储结构,顺序存取的存储结构 B随机存取的存储结构,顺序存取的存储结构 C随机存取的存储结构,随机存取的存储结构 D任意存取的存储结构,任意存取的存储结构 答案:B [全真模拟试卷5填空题1]长度为n的顺序存储线性表中,当在任何位置上插入一个元素概率都相等时,插入一个元素所需移动元素的平均个数为。 答案:n/2 §3 栈和队列 [全真模拟试卷1选择题1]栈和队列的共同特点是 A都是先进先出B都是后进先出 C只允许在端点处插入和删除元素D没有共同点 答案:C [全真模拟试卷2选择题3]如果进栈序列为e1,e2,e3,e4,则可

相关主题
文本预览
相关文档 最新文档