第三章+栈和队列(参考答案)

第三章栈和队列

一、判断题

1、链栈的初始化是指开辟足够多的结点,然后置栈顶指针为 NULL。(×)

2、递归定义的数据结构通常不需要用递归的算法来实现对它的操作。(×)

二、填空题

1、向一个链式栈插入一个新结点时,首先把栈顶指针的值赋给新结点的指针域,然后把新结点的存储位置赋给___栈顶指针_____。

2、迷宫问题是一个回溯控制的问题,最好使用____栈______的方法来解决。

3、有如下递归过程:

Void Print(int w)

{

int i;

if (w!=0)

{

Print(w−1);

for (i=1;i<=w;i++) printf(“%3d”,w);

printf(“\n”);

}

}

调用语句print(4)的结果是__________。

1

2 2

3 3 3

4 4 4 4

4、假设用循环单链表实现队列,若队列非空,且队尾指针为R, 则将新结点S加入队列时,需执行下面语句:_ S->next=R->next _________;___ R->next=S _______;R=S;

三、选择题

1、设有4个数据元素a1、a

2、a3和a4,对他们分别进行栈操作或队操作。在进栈或进队操作时,按a1、a2、a

3、a4次序每次进入一个元素。假设栈或队的初始状态都是空。

现要进行的栈操作是进栈两次,出栈一次,再进栈两次,出栈一次;这时,第一次出栈得到的元素是 A 2,第二次出栈得到的元素是 B 4;类似地,考虑对这四个数据元素进行的队操作是进队两次,出队一次,再进队两次,出队一次;这时,第一次出队得到的元素是 C 1,第二次出队得到的元素是 D 2。经操作后,最后在栈中或队中的元素还有 E 2个。

供选择的答案:

A~D:①a1 ②a2 ③ a3 ④a4

E:①1 ②2 ③ 3 ④ 0

2、栈是一种线性表,它的特点是 A 2。设用一维数组A[1,…,n]来表示一个栈,A[n]为栈底,用整型变量T指示当前栈顶位置,A[T]为栈顶元素。往栈中推入(PUSH)一个新元素时,变量T的值 B 2;从栈中弹出(POP)一个元素时,变量T的值 C 1。设栈空时,有输入序列a,b,c,经过PUSH,POP,PUSH,PUSH,POP操作后,从栈中弹出的元素的序列是 D 6,变量T的值是 E 4。

供选择的答案:

A:①先进先出②后进先出③进优于出④出优于进⑤随机进出

B,C:①加1 ②减1 ③不变④清⑤加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

3、在做进栈运算时,应先判别栈是否 A 2;在做退栈运算时,应先判别栈是否 B 1。当栈中元素为n个,做进栈运算时发生上溢,则说明该栈的最大容量为 C 2。

为了增加内存空间的利用率和减少溢出的可能性,由两个栈共享一片连续的内存空间时,应将两栈的 D 4分别设在这片内存空间的两端,这样,只有当 E 3时,才产生上溢。

供选择的答案:

A,B:①空②满③上溢④下溢

C:①n-1 ② n ③ n+1 ④ n/2

D:①长度②深度③栈顶④栈底

E:①两个栈的栈顶同时到达栈空间的中心点

②其中一个栈的栈顶到达栈空间的中心点

③两个栈的栈顶在达栈空间的某一位置相遇

④两个栈均不空,且一个栈的栈顶到达另一个栈的栈底

4、以下哪一个不是队列的基本运算? B

A)在队尾插入一个新元素B)从队列中删除第i个元素

C)判断一个队列是否为空D)读取队头元素的值

四、综合题

1、写出下列程序段的输出结果(栈的元素类型SElem Type为char)。

void main( ){

Stack S;

InitStack(S);

x=’c’;y=’k’;

Push(S,x);

Push(S,’a’);

Push(S,y);

}

2、写出下列程序段的输出结果:(队列中的元素类型QElem Type为char)。

void main( ){

Queue Q; Init Queue (Q);

char x=’e’; y=’c’;

EnQueue(Q,’h’); EnQueue (Q,’r’);EnQueue (Q,’y’);

DeQueue (Q,x); EnQueue (Q,x);

DeQueue (Q,x); EnQueue (Q,’a’);

while(!QueueEmpty(Q)){ DeQueue (Q,y);printf(y); };

printf(x);

}

答:输出结果为:yhar

3、简述以下算法的功能(栈和队列的元素类型均为int)。

void algo3(Queue &Q)

{

Stack S; int d;

InitStack(S);

while(!QueueEmpty(Q))

{

DeQueue (Q,d); Push(S,d);

};

while(!StackEmpty(S))

{

Pop(S,d); EnQueue (Q,d);

}

}

答:算法功能为:将队列Q中的整数逆置。

4、有5 个元素,其入栈次序为:A,B,C,D,E,在各种可能的出栈次序中,以元素C,D 最先出栈(即C第一个且D第二个出栈)的次序有哪几个?

答:CDEBA CDBEA CDBAE

5、假设带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(注意不设头指针),试编写相应的队列初始化、入队列和出队列的算法。

typedef struct QNode {// 结点类型

QElemType data;

struct QNode *next;

} QNode, *QueuePtr;

typedef struct { // 链队列类型

QueuePtr rear; // 队尾指针

} LinkQueue;

Status InitQueue(LinkQueue &Q)

{ Q.rear=(Queueptr)malloc(sizeof(QNode));

If(!Q.rear) exit(-2);

Q.rear->next=Q.rear;//构成循环链表

Return 1;

}//初始化队列

Status EnQueue(LinkQueue &Q,QElemType e)

{ p=(QueuePtr)malloc(sizeof(QNode));

If(!p) exit(-2)

p->data=e;p->next=Q.rear->next;

Q.rear->next=p;Q.rear=p;

Return 1;

}//插入元素e到队尾

Status DeQueue(LinkQueue &Q,QElemType &e)

{ if(Q.rear->next=Q.rear) return -1;

P=Q.rear->next->next;e=p->data;

Q.rear->next->next=p->next;free(p);

Return 1;

}//删除队首元素,并用e返回其值

6、设顺序双向循环队列的数据结构定义为:

typedef struct

{

DataType list[MaxSize];

int front; /*队头指针*/

int rear; /*队尾指针*/

} BSeqCQueue;

设Q为BSeqCQueue类型的变参,并设初始化操作时有:Q->rear = Q->front = 0,现要求:(1)给出顺序双向循环队列满和空的条件。

(2)给出顺序双向循环队列的入队列操作和出队列操作算法思想。

解:顺序双向循环队列的数据类型已给出,要区分队空和队满,可采用少用一个存储空间的方式。

故有,队空条件:Q->rear == Q->front

队满条件:(Q.rear+1) % MaxSize == Q.front

(1)算法

Status EnQueue(BSeqCQueue &Q,QElemType e)

{ if((Q.rear+1) % MaxSize == Q.front) return -1;

Q.list[Q.rear]=e; Q.rear=(Q.rear+1) % MaxSize;

Return 1;

}//将元素e入队

(2)算法

Status DeQueue(BSeqCQueue &Q,QElemType &e)

{ if(Q.front==Q.rear return -1;

e=Q.list[Q.front];

Q.front=(Q.font+1) % MaxSize;

Return 1;

}//将队首元素出队

7、假设称正读和反读都相同的字符序列为“回文”,例如‘abba’和‘abcba’是回文,‘abcde’和‘ababab’则不是回文,试写一个算法判别读入的一个以‘@’为结束符的字符序列是否是“回文”。

【解答】算法如下:

int IsHuiWen()

{

Stack *S;

Queue *Q

Char ch,temp;

InitStack(&S);

InitQueue(&Q);

Printf(“\n请输入字符序列:”);

ch=getchar();

While( ch!=‘@’) /*序列入栈和队列*/

{ Push(&S,ch);

EnQueue(&Q,ch);

ch=getchar();

}

while(!IsEmpty(&S)) /*判断序列正读和反读是否一致*/

{ Pop(&S,&temp1);

DeQueue(&Q,&temp2);

if(temp1!= temp2) /*序列不等于逆序列*/

{ return(FALSE); printf(“\nNO”);}

}

return(TRUE); printf(“\nYES”);} /*序列等于逆序列*/

}/*IsHuiWen()*/

8、要求循环队列不损失一个空间全部都能得到利用,设置一个标志tag,以tag为0或1来区分头尾指针相同时的队列状态的空与满,请编写与此相应的入队与出队算法。

【解答】

#define maxQSize 100

Typedef struct{

QElemType element[maxQsize];

Int front;

Int rear;

}SeqQueue;

Int tag;

入队算法:

int EnQueue(SeqQueue *Q, QElemType x)

{ /*将元素x入队*/

if(Q.front==Q.front && Q.tag==1) /*队满*/

return(FALSE);

if(Q.front==Q.front && Q.tag==0) /*x入队前队空,x入队后重新设置标志*/ tag=1;

Q->elememt[Q.rear]=x;

Q->rear=(Q.rear+1)%MAXSIZE; /*设置队尾指针*/

Return(TRUE);

}

出队算法:

int DeQueue( SeqQueue *Q , QElemType *x)

{ /*删除队头元素,用x返回其值*/

if(Q.front==Q.rear && tag==0) /*队空*/

return(FALSE);

*x=Q.element[Q.front];

Q.front=(Q.front+1)%MAXSIZE; /*重新设置队头指针*/

if(Q.front==Q.rear) tag=0; /*队头元素出队后队列为空,重新设置标志域*/ Return(TRUE);

}

*****************思考以下问题,不做在本子上****************

1、什么叫堆栈?什么叫队列?

2、线性表、堆栈和队列这三种抽象数据类型有什么相同之处和不同之处?

3、在顺序队列中,什么叫真溢出?什么叫假溢出?为什么顺序队列通常都采用顺序循环队列结构?

4、什么叫优先级队列?优先级队列和队列有什么相同之处和不同之处?

5.(1)什么是递归程序?

(2)递归程序的优、缺点是什么?

(3)递归程序在执行时,应借助于什么来完成?

(4)递归程序的入口语句、出口语句一般用什么语句实现?

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

第三章栈、队列和数组 一、名词解释: 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)

数据结构习题集:第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; C 、s->next=Q.rear;Q.rear=s; D 、s->next=Q.front;Q.front=s; 14.在一个链队列Q 中,删除一个结点需要执行的指令是() A、Q.rear=Q.front->next; B、Q.rear->next=Q.rear->next->next;

《数据结构及其应用》笔记含答案 第三章_栈和队列

第3章栈和队列 一、填空题 1、栈是限定仅在表尾进行插入或删除操作的线性表。 2、栈的修改是按照后进先出的原则进行的。 3、队是一种先进先出的线性表。 4、把队列头尾相接的顺序存储结构称为循环队列。 5、队列也是一种操作受限的线性表,允许插入的一端叫做__队尾___,允许删除的一端叫做__队头__。 二、判断题 1、栈和队列的存储,既可以采用顺序存储结构,又可以采用链式存储结构。(√) 2、任何一个递归过程都可以转换成非递归过程。(√) 3、若输入序列为1,2,3,4,5,6,则通过一个栈可以输出序列3,2,5,6,4,1。(√) 4、通常使用队列来处理函数的调用。(╳) 5、循环队列通常用指针来实现队列的头尾相接。(╳) 三、单项选择题 1、若让元素1,2,3,4,5依次进栈,则出栈次序不可能出现在(C)种情况。 A.5,4,3,2,1 B.2,1,5,4,3 C.4,3,1,2,5 D.2,3,5,4,1 解释:栈是后进先出的线性表,不难发现C选项中元素1比元素2先出栈,违背了栈的后进先出原则,所以不可能出现C选项所示的情况。 2、若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则pi为(C)。 A.i B.n-i C.n-i+1 D.不确定 解释:栈是后进先出的线性表,一个栈的入栈序列是1,2,3,…,n,而输出序列的第一个元素为n,说明1,2,3,…,n一次性全部进栈,再进行输出,所以p1=n,p2=n-1,…,pi=n-i+1。3、数组Q[n]用来表示一个循环队列,f为当前队列头元素的前一位置,r为队尾元素的位置,假定队列中元素的个数小于n,计算队列中元素个数的公式为(D)。 A.r-f B.(n+f-r)%n C.n+r-f D.(n+r-f)%n 解释:对于非循环队列,尾指针和头指针的差值便是队列的长度,而对于循环队列,差值可能为负数,所以需要将差值加上MAXSIZE(本题为n),然后与MAXSIZE(本题为n)求余,即(n+r-f)%n。 4、链式栈结点为:(data,link),top指向栈顶.若想摘除栈顶结点,并将删除结点的值保存到x中,则应执行操作(A)。 A.x=top->data;top=top->link;B.top=top->link;x=top->link; C.x=top;top=top->link;D.x=top->link; 解释:x=top->data将结点的值保存到x中,top=top->link栈顶指针指向栈顶下一结点,即摘除栈顶结点。 5、设有一个递归算法如下 int fact(int n) { //n大于等于0 if(n<=0) return 1; else return n*fact(n-1); } 则计算fact(n)需要调用该函数的次数为(A )。

《数据结构》期末复习题及参考答案 - 第3章 栈和队列【HSH2013级】给学生---

《数据结构》期末复习题及参考答案- 第3章栈和队列 一、选择题 1、对于栈,操作数据的原则是()。 A. 先进先出 B. 后进先出 C. 后进后出 D. 不分顺序 2、要求数据遵循FIFO(先进先出)原则的数据结构是()。 A. 线性表 B. 链表 C. 队列 D. 栈 3、若进栈的序列为1,2,3,4,则以下哪一个不可能是一个出栈序列。 4、有六个元素6,5,4,3,2,1 的顺序进栈,问下列哪一个不是合法的出栈序列?() 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 5、设栈的输入序列是1,2,3,4, 则()不可能是其出栈序列。 6、在一个链队列中,若f,r分别为队首、队尾指针,则插入s所指结点的操作为( ) (A) f->next=c;f=s (B) r->next=s;r=s (C) s->next=r;r=s (D) s->next=f;f=s 7、一个栈的输入序列为1 2 3 4 5,则下列序列中不可能是栈的输出序列的是()。 A. 2 3 4 1 5 B. 5 4 1 3 2 C. 2 3 1 4 5 D. 1 5 4 3 2 9、设一个栈的输入序列是1,2,3,4,5,则下列序列中,是栈的合法输出序列的是()。 10、某堆栈的输入序列为a, b,c ,d,下面的四个序列中,不可能是它的输出序列的是()。 A. a,c,b,d B. b, c,d,a C. c, d,b, a D. d, c,a,b 11、顺序存储的栈和队列中已经各有N个结点,要删除一个结点分别需要移动数据() 次和()次。 A. N/2 , N B. N , N/2 C. 0 , N D. N , 0 12、设有三个元素X,Y,Z顺序进栈(进的过程中允许出栈),下列得不到的出栈排列是( )。 13、一个递归算法必须包括()。 A. 递归部分 B. 终止条件和递归部分 C. 迭代部分 D.终止条件和迭代部分

第3章++栈和队列+课后习题答案

第3章栈和队列 习题 1.选择题 (1)若让元素1,2,3,4,5依次进栈,则出栈次序不可能出现在()种情况。 A.5,4,3,2,1 B.2,1,5,4,3 C.4,3,1,2,5 D.2,3,5,4,1 (2)若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则pi为()。 A.i B.n-i C.n-i+1 D.不确定(3)数组Q[n]用来表示一个循环队列,f为当前队列头元素的前一位置,r为队尾元素的位置,假定队列中元素的个数小于n,计算队列中元素个数的公式为()。 A.r-f B.(n+f-r)%n C.n+r-f D.(n+r-f)%n (4)链式栈结点为:(data,link),top指向栈顶.若想摘除栈顶结点,并将删除结点的值保存到x中,则应执行操作()。 A.x=top->data;top=top->link;B.top=top->link;x=top->link; C.x=top;top=top->link;D.x=top->link; (5)设有一个递归算法如下 int fact(int n) { //n大于等于0 if(n<=0) return 1; else return n*fact(n-1); } 则计算fact(n)需要调用该函数的次数为()。 A. n+1 B. n-1 C.n D.n+2 (6)栈在()中有所应用。 A.递归调用B.函数调用C.表达式求值D.前三个选项都有(7)为解决计算机主机与打印机间速度不匹配问题,通常设一个打印数据缓冲区。主机将要输出的数据依次写入该缓冲区,而打印机则依次从该缓冲区中取出数据。该缓冲区的逻辑结构应该是()。 A.队列 B.栈C.线性表D.有序表(8)设栈S和队列Q的初始状态为空,元素e1、e2、e3、e4、e5和e6依次进入栈S,一个元素出栈后即进入Q,若6个元素出队的序列是e2、e4、e3、e6、e5和e1,则栈S的容量至少应该是()。 A.2 B.3 C.4 D.6(9)在一个具有n个单元的顺序栈中,假设以地址高端作为栈底,以top作为栈顶指针,则当作进栈处理时,top的变化为()。 A.top不变B.top=0 C.top-- D.top++(10)设计一个判别表达式中左,右括号是否配对出现的算法,采用()数据结构最佳。 A.线性表的顺序存储结构 B.队列 C. 线性表的链式存储结构 D. 栈

第3章 栈和队列

第三章栈和队列 基本概念 1、栈的定义、特点 2、顺序栈和链栈的进栈和退栈操作;栈空和栈满的判定条件 3、队列的定义和特点 4、循环队列、链队列的出队和入队操作、判定队列为空、队列为满的条件 一、选择题 1、一个栈的输入序列为:a,b,c,d,e,则栈的不可能输出的序列是()。 A. a,b,c,d,e B. d,e,c,b,a C. d,c,e,a,b D. e,d,c,b,a 2、判断一个循环队列Q(最多n个元素)为满的条件是()。 A. Q->rear==Q->front B. Q->rear==Q->front+1 C. Q->front==(Q->rear+1)%n D. Q->front==(Q->rear-1)%n 3、设计一个判别表达式中括号是否配对的算法,采用()数据结构最佳。 A. 顺序表 B. 链表 C. 队列 D. 栈 4、带头结点的单链表head为空的判定条件是()。 A. head==NULL B. head->next==NULL C. head->next!=NULL D. head!=NULL 5、一个栈的输入序列为:1,2,3,4,则栈的不可能输出的序列是()。 A. 1243 B. 2134 C. 1432 D. 4312 E. 3214 6、若用一个大小为6的数组来实现循环队列,且当rear和front的值分别为0,3。当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为()。 A. 1和5 B. 2和4 C. 4和2 D. 5和1 大小为6的数组:下标从0-5;从前面出队,从后面入队 front(前面)=3 rear(后面)=0 当出队列中删除一个元素,也就是出队,即front+1:=4 再插入两个元素,即rear+2= 2 7、队列的插入操作是在()。 A. 队尾 B. 队头 C. 队列任意位置 D. 队头元素后 8、循环队列的队头和队尾指针分别为front和rear,则判断循环队列为空的条件是()。 A. front==rear B. front==0 C. rear==0 D. front=rear+1 9、一个顺序栈S,其栈顶指针为top,则将元素e入栈的操作是()。 A. *S->top=e;S->top++; B. S->top++;*S->top=e;

第三部分 栈 队列 带答案

第三部分栈队列 一、选择题 1.( A )又称为FIFO表。 A.队列 B.散列表 C.栈 D.哈希表 2.设依次进入一个栈的元素序列为c,a,b,d,不可得到出栈的元素序列有(B D )。 A.a.b,c,d B.a,d,c,b C.b,a,d,c D.c,d,a,b 3.链式栈与顺序栈相比,一个比较明显的优点是( B )。 A. 插入操作更加方便 B. 通常不会出现栈满的情况 C. 不会出现栈空的情况 D. 删除操作更加方便 4.在一个顺序存储的循环队列中,队头指针指向队头元素的( A )。 A. 前一个位置 B. 后一个位置 C. 队头元素位置 D. 队尾元素的前一位置 5.若一个栈的输入序列是1,2,3……n,则输出序列的第一个元素是n,则第i个输出元素是(C )。 A n-i B i C n-i+1 D n-i-1 6.栈的数组表示中,top为栈顶指针,栈空的条件是( D )。 (A)top=0 (B)top=maxSize (C)top=maxSize(D)top=-1 7.在数组表示的循环队列中,front、rear分别为队列的头、尾指针,maxSize为数组的最大长度,队满的条件是( B )。 (A)front=maxSize (B)(rear+1)%maxSize=front (C)rear=maxSize (D)rear=front 8. 栈和队列的共同特点是( C )。 (A)都是先进后出(B)都是先进先出 (C)只允许在端点处插入和删除(D)没有共同点 9.与中缀表达式a+b*c-d等价的前缀表达式是( C )。 A.+a-*bcd B.*+-abcd C.-+a*bcd D.abcd+*- 10.中缀表达式A-(B+C)*D/E的后缀形式是( D )。 A.ABC+-D*E/ B.ABC+D*-E/ C.ABC+D-*E/ D.ABC+D*E/- 11.若非空队列采用链式存储结构,front和rear分别为队头元素与队列尾元素的指针,

第三章+栈和队列(参考答案)

第三章栈和队列 一、判断题 1、链栈的初始化是指开辟足够多的结点,然后置栈顶指针为 NULL。(×) 2、递归定义的数据结构通常不需要用递归的算法来实现对它的操作。(×) 二、填空题 1、向一个链式栈插入一个新结点时,首先把栈顶指针的值赋给新结点的指针域,然后把新结点的存储位置赋给___栈顶指针_____。 2、迷宫问题是一个回溯控制的问题,最好使用____栈______的方法来解决。 3、有如下递归过程: Void Print(int w) { int i; if (w!=0) { Print(w?1); for (i=1;i<=w;i++) printf(“%3d”,w); printf(“\n”); } } 调用语句print(4)的结果是__________。 1 2 2 3 3 3 4 4 4 4 4、假设用循环单链表实现队列,若队列非空,且队尾指针为R, 则将新结点S加入队列时,需执行下面语句:_ S->next=R->next _________;___ R->next=S _______;R=S; 三、选择题 1、设有4个数据元素a1、a 2、a3和a4,对他们分别进行栈操作或队操作。在进栈或进队操作时,按a1、a2、a 3、a4次序每次进入一个元素。假设栈或队的初始状态都是空。 现要进行的栈操作是进栈两次,出栈一次,再进栈两次,出栈一次;这时,第一次出栈得到的元素是 A 2,第二次出栈得到的元素是 B 4;类似地,考虑对这四个数据元素进行的队操作是进队两次,出队一次,再进队两次,出队一次;这时,第一次出队得到的元素是 C 1,第二次出队得到的元素是 D 2。经操作后,最后在栈中或队中的元素还有 E 2个。 供选择的答案: A~D:①a1 ②a2 ③ a3 ④a4 E:①1 ②2 ③ 3 ④ 0 2、栈是一种线性表,它的特点是 A 2。设用一维数组A[1,…,n]来表示一个栈,A[n]为栈底,用整型变量T指示当前栈顶位置,A[T]为栈顶元素。往栈中推入(PUSH)一个新元素时,变量T的值 B 2;从栈中弹出(POP)一个元素时,变量T的值 C 1。设栈空时,有输入序列a,b,c,经过PUSH,POP,PUSH,PUSH,POP操作后,从栈中弹出的元素的序列是 D 6,变量T的值是 E 4。 供选择的答案: A:①先进先出②后进先出③进优于出④出优于进⑤随机进出 B,C:①加1 ②减1 ③不变④清⑤加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 3、在做进栈运算时,应先判别栈是否 A 2;在做退栈运算时,应先判别栈是否 B 1。当栈中元素为n个,做进栈运算时发生上溢,则说明该栈的最大容量为 C 2。

第三章 栈和队列

第三章栈和队列 一.选择题 1.在一个具有n个单元的顺序栈中,假定以地址低端作为栈底,以top作为栈顶指针,则当做退栈处理时,top变化为。 A.top不变 B.top=top-n C.top=top-1 D.top=top+1 2.在一个顺序存储的循环队列中,队首指针指向队首元素的。 A.前一个位置 B.后一个位置 C.队首元素位置 D.队尾元素位置3.若进栈序列为1,2,3,4,栈过程中可以出栈,则不可能是一个出栈序列。A.3,4,2,1 B.2,4,3,1 C.1,4,2,3 D.3,2,1,4 4.在具有n个单元的顺序存储的循环队列中,假定front和rear分别为队首指针和队尾指针,则判断队空的条件是。 A.front= =rear+1 B.front+1= =rear C.front= =rear D.front= =0 5.向一个栈项指针为hs的链栈中插入一个*s结点时,则执行。 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; 6.下列说法哪个正确:_______ A.堆栈是在两端操作、先进后出的线性表 B.堆栈是在一端操作、先进先出的线性表 C.队列是在一端操作、先进先出的线性表 D.队列是在两端操作、先进先出的线性表 7.栈和队列的共同点_______ A.都是先进后出 B.都是先进先出 C.只允许在端点处插入和删除元素 D.没有共同点 8.以下数据结构中哪一个是非线性结构?_______ A.队列 B.栈 C.线性表 D.二叉树 9.若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3 ,…,pn,若p1=n,则 pi 为_______ A.i B.n=i C.n-i+1 D.不确定 10.当利用大小为 N 的一维数组顺序存储一个栈时,假定用top==N 表示栈空,则向这个栈插入一个元素时,首先应执行_______语句修改top指针。 A.top++ B.top-- C.top=0 D.top 11.4个元素进S栈的顺序是 A,B,C,D,经运算 POP(S)后栈顶元素是_______ A.A B.B C.C D.D 12.一个栈的输入序列是a,b,c,d,e,则栈的不可能的输出序列是_______ A. edcba B.decba C.dceab D. abcde 13.设用链表作为栈的存储结构则退栈操作_______。 A.必须判别栈是否为满 B.必须判别栈是否为空 C.判别栈元素的类型 D.对栈不作任何判别 14.设输入序列是 1、2、3、……、n,经过栈的作用后输出序列的第一个元素是 n,则输出序列中第i个输出元素是_______。 A. n-i B.n-1-i C.n+1-i D.不能确定 15.递归函数f(n)=f(n-1)十 n(n>1) 的递归出口是_______。 A.f(1)=0 B.f(1)=1 C.f(0)=1 D.f(n)=n 16.中缀表达式A-(B+C/D)*E 的后缀形式是_______。

《数据结构》习题汇编03 第三章 栈和队列 试题(答案)

第三章栈和队列 一、单项选择题 参考答案: 1. A 2. B 3. C 4. A 5. B 6. B 7. D 8. D 9. C 10. A 11. D 12. A 13. A 14. D 15. C 二、填空题 参考答案: 1. 先进后出 2. 先进先出 3. 队尾,队头 4. 栈顶指针 5. 栈顶指针 6. MaxSize-1 7. top==0 8. 空栈 9. 栈顶指针10. p->link=top,top=p 11. top=top->link 12. Q.front==Q.rear 13. (Q.rear+1)%MaxSize==Q.front 14. 队尾指针15. 空,只含有一个结点 16. front == rear && front != NULL或者front == rear && rear != NULL 17. 两端18. 3x2+*5- 19. 15 20. 3 三、判断题 参考答案: 1. 是 2. 是 3. 否 4. 是 5. 是 6. 否 7. 否 8. 是 9. 否10. 否 11. 否12. 是13. 否14. 是15. 否 16. 否 四、运算题 参考答案: 1.根据以上规则,给出计算中缀表达式a + b * c – d / e时两个栈的变化。 步扫描项项类型动作OPND栈OPTR栈 0 OPTR栈与OPND栈初始化, ‘#’ 进OPTR栈, # 取第一个符号 1 a 操作数a进OPND栈, 取下一符号 a # 2 + 操作符icp (‘+’ ) > isp (‘#’ ), 进OPTR栈, 取 a # + 下一符号 3 b 操作数b进OPND栈, 取下一符号 a b # + a b # + * 4 * 操作符icp (‘*’ ) > isp (‘+’ ), 进OPTR栈, 取 下一符号 5 c 操作数c进OPND栈, 取下一符号 a b c # + * a s1# + 6 - 操作符icp (‘-’ ) < isp (‘*’ ), 退OPND栈‘c’, 退OPND 栈‘b’, 退OPTR栈‘*’, 计算 b * c→ s1, 结果 进OPND栈 s2# 7 同上同上ic p (‘-’ ) < isp (‘+’ ), 退OPND栈‘s ’, 1 退OPND 栈‘a’, 退OPTR栈‘+’, 计算 a * s1→ s2, 结果 进OPND栈

数据结构栈和队列习题及答案

习题三栈和队列 一单项选择题 1. 在作进栈运算时,应先判别栈是否(① ),在作退栈运算时应先判别栈是否(② )。当栈中元素为n个,作进栈运算时发生上溢,则说明该栈的最大容量为(③ )。 ①, ②: A. 空 B. 满 C. 上溢 D. 下溢 ③: A. n-1 B. n C. n+1 D. n/2 2.若已知一个栈的进栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,...,pn,若p1=3,则p2为( )。 A 可能是2 B 一定是2 C 可能是1 D 一定是1 3. 有六个元素6,5,4,3,2,1 的顺序进栈,问下列哪一个不是合法的出栈序列?() 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 4.设有一顺序栈S,元素s1,s2,s3,s4,s5,s6依次进栈,如果6个元素出栈的顺序是s2,s3,s4, s6, s5,s1,则栈的容量至少应该是() A.2 B. 3 C. 5 D.6 5. 若栈采用顺序存储方式存储,现两栈共享空间V[1..m],top[i]代表第i个栈( i =1,2)栈顶,栈1的底在v[1],栈2的底在V[m],则栈满的条件是()。 A. |top[2]-top[1]|=0 B. top[1]+1=top[2] C. top[1]+top[2]=m D. top[1]=top[2] 6. 执行完下列语句段后,i值为:() int f(int x) { return ((x>0) ? x* f(x-1):2);} int i ; i =f(f(1)); A.2 B. 4 C. 8 D. 无限递归 7. 表达式3* 2^(4+2*2-6*3)-5求值过程中当扫描到6时,对象栈和算符栈为(),其中^为乘幂。 A. 3,2,4,1,1;(*^(+*- B. 3,2,8;(*^- C. 3,2,4,2,2;(*^(- D. 3,2,8;(*^(- 8. 用链接方式存储的队列,在进行删除运算时()。 A. 仅修改头指针 B. 仅修改尾指针 C. 头、尾指针都要修改 D. 头、尾指针可能都要修改 9. 递归过程或函数调用时,处理参数及返回地址,要用一种称为()的数据结构。 A.队列 B.多维数组 C.栈 D. 线性表 10.设C语言数组Data[m+1]作为循环队列SQ的存储空间, front为队头指针,rear为队尾指针,则执行出队操作的语句为() A.front=front+1 B. front=(front+1)% m C.rear=(rear+1)%(m+1) D. front=(front+1)%(m+1) 11.循环队列的队满条件为 ( ) A. (sq.rear+1) % maxsize ==(sq.front+1) % maxsize; B. (sq.front+1) % maxsize ==sq.rear C. (sq.rear+1) % maxsize ==sq.front D.sq.rear ==sq.front

数据结构第三章堆栈和队列测试题及答案

堆栈和队列测试题 一、选择题 1. 对于栈操作数据的原则是(B)。 A. 先进先出 B. 后进先出 C. 后进后出 D. 不分顺序 2. 在做进栈运算时,应先判别栈是否( B),在做退栈运算时应先判别栈是否( A)。当栈中元素为n个,做进栈运算时发生上溢,则说明该栈的最大容量为( B )。为 了增加内存空间的利用率和减少溢出的可能性,由两个栈共享一片连续的内存空 间时,应将两栈的( D )分别设在这片内存空间的两端。 ①, ②: A. 空 B. 满 C. 上溢 D. 下溢 ③: A. n-1 B. n C. n+1 D.n/2 ④: A. 长度 B. 深度 C. 栈顶 D. 栈底 3. 一个栈的输入序列依次为1,2,3,…n,若输出序列的第一个元素是n,输出第i(1<=i<=n)个元素是(B)。 A. 不确定 B. n-i+1 C. i D. n-i 4. 若一个栈的输入序列为1,2,3,…,n,输出序列的第一个元素是i,则第j个输出 元素是( D )。 A. i-j-1 B. i-j C. j-i+1 D. 不确定的 5. 若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,p N,若p N是n,则pi是( D )。 A. i B. n-i C. n-i+1 D. 不确定 6.有六个元素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 7. 设栈的输入序列是1,2,3,4,则( D )不可能是其出栈序列。 A. 1,2,4,3, B. 2,1,3,4, C. 1,4,3,2, D. 4,3,1,2, E. 3,2,1,4, 8. 一个栈的输入序列为1 2 3 4 5,则下列序列中不可能是栈的输出序列的是 ( B )。 A. 2 3 4 1 5 B. 5 4 1 3 2 C. 2 3 1 4 5 D. 1 5 4 3 2 9. 设一个栈的输入序列是1,2,3,4,5,则下列序列中,是栈的合法输出序列的是(D)。 A. 5 1 2 3 4 B. 4 5 1 3 2 C. 4 3 1 2 5 D. 3 2 1 5 4

第三章栈和队列习题答案

第三章栈和队列习题答案 一、基础知识题 3.1 设将整数1,2,3,4 依次进栈,但只要出栈时栈非空,则可将出栈操作按任何次序夹入其中,请回答下述问题: (1) 若入、出栈次序为Push(1), Pop(),Push(2),Push(3), Pop(), Pop( ),Push(4), Pop( ),则出栈的数字序列为何(这里Push(i)表示i进栈,Pop()表示出栈)? (2) 能否得到出栈序列1423 和1432?并说明为什么不能得到或者如何得到。 (3) 请分析1,2 ,3 ,4 的24 种排列中,哪些序列是可以通过相应的入出栈操作得到的。 答:(1)出栈序列为:1324 (2) 不能得到1423 序列。因为要得到14 的出栈序列,则应做 Push(1),Pop(),Push(2),Push (3),Push(4),Pop()o这样,3在栈顶,2在栈底,所以不能得到23的出栈序列。能得到1432 的出栈序列。具体操作为:Push(1), Pop(),Push(2),Push(3),Push(4),Pop(),Pop(),Pop() (3) 在1,2 ,3 ,4 的24 种排列中,可通过相应入出栈操作得到的序列是: 1234,1243,1324,1342,1432,2134,2143,2314,2341,2431,3214,3241,3421,4321 不能得到的序列是: 1423,2413,3124,3142,3412,4123,4132,4213,4231,4312 3.2 链栈中为何不设置头结点? 答:链栈不需要在头部附加头结点,因为栈都是在头部进行操作的,如果加了头结点,等于要对头结点之后的结点进行操作,反而使算法更复杂,所以只要有链表的头指针就可以了。 3.3 循环队列的优点是什么? 如何判别它的空和满? 答:循环队列的优点是:它可以克服顺序队列的"假上溢"现象,能够使存储队列的向量空间得到充分 的利用。判别循环队列的”空"或"满"不能以头尾指针是否相等来确定,一般是通过以下几种方法:一是另设一布尔变量来区别队列的空和满。二是少用一个元素的空间,每次入队前测试入队后头尾指针是否会重合,如果会重合就认为队列已满。三是设置一计数器记录队列中元素总数,不仅可判别空或 满,还可以得到队列中元素的个数。 3.4 设长度为n 的链队用单循环链表表示,若设头指针,则入队出队操作的时间为何? 若只设尾指针呢? 答:当只设头指针时,出队的时间为1,而入队的时间需要n,因为每次入队均需从头指针开始查找, 找到最后一个元素时方可进行入队操作。若只设尾指针,则出入队时间均为1。因为是循环链表,尾 指针所指的下一个元素就是头指针所指元素,所以出队时不需要遍历整个队列。 3.5 指出下述程序段的功能是什么? (1) void Demo1(SeqStack *S){ int i; arr[64] ; n=0 ; while ( StackEmpty(S)) arr[n++]=Pop(S); for (i=0, i< n; i++) Push(S, arr[i]); } //Demo1 (2) SeqStack S1, S2, tmp; DataType x; …〃假设栈tmp和S2已做过初始化 while ( ! StackEmpty (&S1)) {x=Pop(&S1) ; Push(&tmp,x); } while ( ! StackEmpty (&tmp) )

《数据结构》第三章习题参考答案 殷人昆版

《数据结构》第三章习题参考答案殷人昆版,《数据结构》第三章习题参考答案 一、判断题(在正确说法的题后括号中打“√”,错误说法的题后括号中打“×”) 1、栈和队列都是线性表,只是在插入和删除时受到了一些限制。( √ ) 2、循环队 列也存在空间溢出问题。( √ ) 3、任何一个递归过程都可以转换成非递归过程。( √ ) 4、消除递归不一定需要使 用栈。( √ ) 5、有n个数顺序(依次)进栈,出栈序列有Cn种,Cn=(1/(n+1))* (2n)!/((n!)*(n!))。(√ ) 6、循环队列方式能很好地解决队列的假溢出现象。(√ ) 二、单项选择题 1、1.设有一个顺序栈S,元素P1,P2,P3,P4,P5,P6依次进栈,得到的出栈顺序 P2, P3,P4,P6,P5,P1,则顺序栈的容量至少为( B )。 A.2 B.3 C.4 D.无法确定 2.一个队列的输出序列是1,2,3,4,则队列的入队序列是( A )。 A.1,2,3,4 B.1,4,3,2 C.4,3,2,1 D.不确定 3、对于一个循环队列(最大元素个数为maxSize)进行入队操作时,对队列指针的修 改 正确的语句是( C )。 A.rear = rear + 1 B.front = front + 1 C.rear = (rear + 1)% maxSize D.front = (front + 1)% maxSize

4、假设以数组A[m]存放循环队列的元素,其头尾指针分别为front和rear,则当前 队列中的元素个数为( A )。 A.(rear-front+m)%m B.rear-front+1 C.(front-rear+m)%m D.(rear-front)%m 5、表达式a*(b+c)-d的后缀表达式是( B )。 A.abcd*+- 表达式[a- (c*d+b)] B. abc+*d- C. abc*+d- 表达式b*c+a-d D. -+*abcd 6、 若用一个大小为6的数组来实现循环队列,且当前rear和front的值分别为0和3, 当从队列中删除一个元素,再加入两个元素后,rear和front的值分 别为多少?( B ) A. 1和 5 B. 2和4 C. 4和2 D. 5和1 7、设abcdef以所给的次序进栈,若在进栈操作时,允许退栈操作,则下面得不到的 序列为( D )。 A.fedcba B. bcafed C. dcefba D. cabdef 三、填空题 1、一个栈的输入序列是:1,2,3则不可能的栈输出序列是_3,1,2____。 2、用S表示入栈操作,X表示出栈操作,若元素入栈的顺序为1234,为了得到1342 出栈顺序,相应的S和X的操作串为_SXSSXSXX_____。 3、循环队列的引入,目的是为了克服假溢出时大量移动数据元素。 4、顺序栈的类声明如下,试: 1、填空完成进栈(push)和出栈(pop)函数的代码。 2、填空完成利用栈编写一个将 十进制数N转换为另一基为B的B进制数的算法。 template template class SeqStack{ void SeqStack :: Push(const T& x) { public: SeqStack(); if(__IsEmpty()==true__) return; ~SeqStack(){delete []elements;}

栈与队列习题参考答案

第3章栈与队列习题参考答案(总 2页) --本页仅作为文档封面,使用时请直接删除即可-- --内页可以根据需求调整合适字体及大小--

习题三参考答案 备注: 红色字体标明的是与书本内容有改动的内容。 一、选择题 1.在栈中存取数据的原则是( B )。 A.先进先出 B. 先进后出 C. 后进后出 D. 没有限制 2.若将整数1、2、3、4依次进栈,则不可能得到的出栈序列是( D )。 A.1234 B. 1324 C. 4321 D. 1423 3.在链栈中,进行出栈操作时( B )。 A.需要判断栈是否满 B. 需要判断栈是否为空 C. 需要判断栈元素的类型 D. 无需对栈作任何差别 4.在顺序栈中,若栈顶指针top指向栈顶元素的下一个存储单元,且顺序栈的最大容量是maxSize,则顺序栈的判空条件是( A )。 A.top==0 ==-1 C. top==maxSize ==maxSize-1 5.在顺序栈中,若栈顶指针top指向栈顶元素的下一个存储单元,且顺序栈的最大容量是maxSize。则顺序栈的判满的条件是( C )。 A.top==0 ==-1 C. top==maxSize ==maxSize-1 6.在队列中存取数据元素的原则是( A )。 A.先进先出 B. 先进后出 C. 后进后出 D. 没有限制 7.在循环顺序队列中,假设以少用一个存储单元的方法来区分队列判满和判空的条件,front和rear分别为队首和队尾指针,它们分别指向队首元素和队尾元素的下一个存储单元,队列的最大存储容量为maxSize,则队列的判空条件是( A )。 A.front==rear B. front!=rear C. front==rear+1 D. front==(rear+1)% maxSize 8.在循环顺序队列中,假设以少用一个存储单元的方法来区分队列判满和判空的条件,front和rear分别为队首和队尾指针,它们分别指向队首元素和队尾元素的下一个存储单元,队列的最大存储容量为maxSize,则队列的判满条件是( D )。 A.front==rear B. front!=rear C. front==rear+1 D. front==(rear+1)% maxSize 9. 在循环顺序队列中,假设以少用一个存储单元的方法来区分队列判满和判空的条件,front和 rear分别为队首和队尾指针,它们分别指向队首元素和队尾元素的下一个存储单元,队列的最大存储容量为maxSize,则队列的长度是( C )。 A.rear-front B. rear-front+1 C. (rear-front+maxSize)%maxSize D. (rear-front+1)%maxSize 10.设长度为n的链队列采用单循环链表加以表示,若只设一个头指针指向队首元素,则入队操作 的时间复杂度为( B )。 n) D.O(n2) A.O(1) B.O(n) C.O(log 2 二、填空题 1.栈是一种操作受限的特殊线性表,其特殊性体现在其插入和删除操作都限制在表尾进行。允 许插入和删除操作的一端称为栈顶,而另一端称为栈底。栈具有后进先出的特点。

3.数据结构作业答案第3章--第3章栈和队列自测卷答案作业答案

head 第3章 栈和队列 自测卷答案 姓名 班级 一、填空题(每空1分,共15分) 1. 【李春葆】向量、栈和队列都是 线性 结构,可以在向量的 任何 位置插入和删除元素;对于栈只能在 栈顶 插入和删除元素;对于队列只能在 队尾 插入和 队首 删除元素。 2. 栈是一种特殊的线性表,允许插入和删除运算的一端称为 栈顶 。不允许插入和删除运算的一端称为 栈底 。 3. 队列 是被限定为只能在表的一端进行插入运算,在表的另一端进行删除运算的线性表。 4. 在一个循环队列中,队首指针指向队首元素的 前一个 位置。(注:不一定,这是一种约定,在殷教材中是队首指针指向队列的首元素位置) 5. 在具有n 个单元的循环队列中,队满时共有 n-1 个元素。 6. 向栈中压入元素的操作是先 移动栈顶指针 ,后 存入元素 。 7. 从循环队列中删除一个元素时,其操作是 先 移动队首指针 ,后 取出元素 。(注:不一定,这是一种约定,在殷教材中是先 取出元素 ,后移动队首指针 ) 8. 〖00年统考题〗带表头结点的空循环双向链表的长度等于 0 。 解: 二、判断正误(判断下列概念的正确性,并作出简要的说明。)(每小题1分,共10分) ( × )1. 线性表的每个结点只能是一个简单类型,而链表的每个结点可以是一个复杂类型。 错,线性表是逻辑结构概念,可以顺序存储或链式存储,与元素数据类型无关。 ( × )2. 在表结构中最常用的是线性表,栈和队列不太常用。 错,不一定吧调用子程序或函数常用,CPU 中也用队列。 ( √ )3. 栈是一种对所有插入、删除操作限于在表的一端进行的线性表,是一种后进先出型结构。

相关主题
相关文档
最新文档