楚雄师范学院计科系2011级《算法与数据结构》课后习题及参考答案(第3章)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【课后习题】第3章栈和队列
2011级计科(网工) 班学号:姓名:
一、填空题(每空1.5分,共27 分)
1.栈可以看成一种运算受限制的线性表,也称为的线性表
2.栈中允许进行插入和删除的一端为。
3.队列可以看成一种运算受限制的线性表,也称为的线性表。
4.队列中允许进行插入的一端为,允许进行删除的一端为。
5.设循环队列的空间大小为MAX,当rear<front时,队列的长度
为。
6.设循环队列的容量为50(序号从0到49),现经过一系列的入队和出队运算后,有front=27,
rear=11,问在这种情况下,循环队列中有个元素。
如果front=11,rear=27,问在这种情况下,循环队列中有个元素。
7.中缀表达式(B+D) * (A-C) 对应的前缀表达式是,后缀表达式
是。
8.后缀表达式ABC+* 对应的前缀表达式是,中缀表达式是。
9.线性表、栈和队列都是线性结构,可以在线性表的位置插入和删除元素;栈只能
在插入和删除元素;队列只能在插入和删除元素。
10.在栈顶指针为head的链式栈中,判定栈空的条件是。
11.设有一个顺序栈S,元素s1, s2, s3, s4, s5, s6依次进栈,如果6个元素的出栈
顺序为s2, s3, s4, s6, s5, s1,则顺序栈的容量至少应为
二、单项选择(请将正确答案的代号填写在下表对应题号下面。
每题1.5分,共33分)
1、栈是限定在()处进行插入或删除操作的线性表。
A.端点
B.栈底
C.栈顶
D.中间
2、在栈顶一端可进行的全部操作是()。
A.插入
B.删除
C.插入和删除
D.进栈
3、4个元素按A、B、C、D顺序连续进S栈,进行Pop(S,x)运算后,x的值是()。
A.A
B.B
C.C
D.D
4、栈的特点是()。
A.先进先出
B.后进先出
C.后进后出
D.不进不出
5、在栈的实现方法中,需要考虑栈满的是()。
A、循环链表栈;
B、链式栈;
C、无限栈;
D、顺序栈。
6、将一个递归算法改写成非递归的形式时,一般()。
A、只能采用栈结构;
B、只能采用队列结构;
C、采用非栈结构更好;
D、可采用栈或非栈结构。
7、在C语言中实现队列时,为了避免使用循环队列,采用()来实现较好。
A、动态分配的一维数组;
B、静态分配的一维数组;
C、二维数组;
D、链式队列。
8、实现循环队列时,可采用()。
A、动态分配的一维数组;
B、静态分配的一维数组;
C、二维数组;
D、链式队列。
9、4个元素进S栈的顺序是A、B、C、D,进行两次Pop(S,x)操作后,栈顶元素的值是()。
A)A B)B C)C D)D
10、顺序栈存储空间的实现使用()存储栈元素。
A.链表
B.数组
C.循环链表
D.变量
11、一个栈的输入序列为1 2 3 4 5,则下列序列中可能是栈的输出序列的是( )
A) 2 3 514 B) 4 15 2 3 C) 5 4 1 3 2 D) 1 5 4 3 2
12、栈与一般线性表的区别主要在()方面。
A.元素个数
B.元素类型
C.逻辑结构
D.插入、删除元素的位置
13、元素A、B、C、D依次进顺序栈后,栈底元素是()。
A)A B)B C)C D)D
14、经过下列栈的运算后,X的值是()。
InitStack (S); Push(S,’a’);Push(S,’b’);GetTop(S);Pop(S,X);
A.a
B.b
C.1
D.2
15、正常情况下,删除非空的顺序存储结构的堆栈的栈顶元素,栈顶指针top的变化是()。
A. top不变
B. top←0
C. top←top+1
D. top←top-1
16、队列限定在()处进行插入操作。
A.端点
B.队头
C.队尾
D.中间
17、4个元素A、B、C、D顺序连续进队Q,队尾元素的值是()。
A)A B)B C)C D)D
18、队列的特点是()。
A.先进先出
B.后进先出
C.先进后出
D.不进不出
19、循环队列占用的空间()。
A.必须连续
B.可以不连续
C.不能连续
D.不必连续
20、一个循环队列一旦说明,其占用空间的大小()。
A.不能固定
B.可以改变
C.已固定
D.动态变化
21、循环队列Sq是空队列的条件是()。
A.Sq.rear= =Sq.front
B.(Sq.rear+1)%maxsize= =Sq.front
C.Sq.rear= =0
D.Sq.fronr= =0
22、循环队列Sq是满队列的条件是()。
A.Sq.rear= =Sq.front
B.(Sq.rear+1)%maxsize= =Sq.front
C.Sq.rear= =0
D.Sq.fronr= =0
1.假设称正读和反读都相同的字符序列为“回文”,例如,“abcddcba”、“qwerewq”是回文,“ashgash”不是回文。
是写一个算法判断读入的一个以‘@’为结束符的字符序列是否为回文。
int Palindrome_Test(){
InitStack(S);InitQueue(Q);
while((c=getchar())!='@')
{ Push(S,c);EnQueue(Q, ① ); }
while(② )
{ Pop(S,a);DeQueue(Q,b));
if(③ ) return ERROR;
}
return OK;
}//Palindrome_Test
2、已知栈的顺序存储结构如下定义:
# define STACK_INIT_SIZE 100
# define STACKINCREMENT 10
typedef struct{
SElemType *base;SElemType *top;int stacksize;
}SqStack;
请完成如下入栈算法:
status Push(SqStack&S,SElemType e){
if(①){
tbase=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!tbase) exit(OVERFLOW);
S.base=tbase;S.tops=S.base+S.stacksize-1;S.stacksize+=STACKINCREMENT;
}
②;③;
return OK;
}// Push
3、已知循环队列定义如下:
# define MAXQSIZE 100
typedef struct{
QElemType *base;int front;int rear;
}SqQueue;
请完成如下出队算法:
status DnQueue(SqQueue&Q,QElemType &e){
if(①)return ERROR;
②;③;
return OK;
}// DnQueue
4. 向循环队列 q 的队尾加入一个元素 e
Status EnQueue(SqQueue &q, QElemType e)
{ if (①= = q.front )
return ERROR ; //队满则上溢,无法再入队
q.base [② ] = e;
q.rear = ③ ;
return OK;
}// EnQueue;
四、阅读理解题:简述以下算法的功能(每小题5分,共10分) (1)
int unknow1(SeqStack S) 1.该函数的功能是:{int n=0;
while(!EmptyStack(&S))
{Pop(&S);
n++; }
return n;
}
(2)
2.该函数的功能是:
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);
}
}
五、名词解释(每题3分,共6分)
1、栈:
2、队列:
【课后习题】第3章栈和队列(参考答案)
一、填空题(每空1.5分,共27 分)
1.栈可以看成一种运算受限制的线性表,也称为后进先出(LIFO)的线性表
2.栈中允许进行插入和删除的一端为栈顶。
3.队列可以看成一种运算受限制的线性表,也称为先进先出(FIFO)的线性表。
4.队列中允许进行插入的一端为队尾,允许进行删除的一端为队头。
5.设循环队列的空间大小为MAX,当rear<front时,队列的长度为(MAX+
rear-front)%MAX 。
6.设循环队列的容量为50(序号从0到49),现经过一系列的入队和出队运算后,有front=27,
rear=11,问在这种情况下,循环队列中有 34个元素.如果front=11,rear=27,问在这种情况下,循环队列中有 16个元素?
7.中缀表达式(B+D) * (A-C) 对应的前缀表达式是*+BD-AC ,后缀表达式是BD+AC-*
8.后缀表达式ABC+* 对应的前缀表达式是*A+BC ,中缀表达式是A*(B+C)
9.线性表、栈和队列都是线性结构,可以在线性表的任意位置插入和删除元素;栈只能在
栈顶插入和删除元素;队列只能在队尾插入和队头删除元素。
10.在栈顶指针为head的链式栈中,判定栈空的条件是head->next==NULL 。
11.设有一个顺序栈S,元素s1, s2, s3, s4, s5, s6依次进栈,如果6个元素的出栈顺序
为s2, s3, s4, s6, s5, s1,则顺序栈的容量至少应为 3
二、单项选择(请将正确答案的代号填写在下表对应题号下面。
每题1.5分,共33分)
四、阅读理解题:简述以下算法的功能(每小题5分,共10分)
1. 该函数的功能是:计算栈中结点个数
2. 该函数的功能是:利用堆栈做辅助,将队列中的数据元素进行逆置。
五、名词解释(每题3分,共6分)
1、栈:栈是限定仅在表尾进行插入或删除操作的线性表。
2、队列:队列是只允许在表的一端进行插入而在表的另一端删除元素的线性表。
【课后习题】第3章栈和队列
一、名词解释(每题3分,共6分)
1、栈:栈是限定仅在表尾进行插入或删除操作的线性表。
2、队列:队列是只允许在表的一端进行插入而在表的另一端删除元素的线性表。
二、填空题(每空1.5分,共27 分)
12.栈可以看成一种运算受限制的线性表,也称为后进先出(LIFO)的线性表
13.栈中允许进行插入和删除的一端为栈顶。
14.队列可以看成一种运算受限制的线性表,也称为先进先出(FIFO)的线性表。
15.队列中允许进行插入的一端为队尾,允许进行删除的一端为队头。
16.设循环队列的空间大小为MAX,当rear<front时,队列的长度为(MAX+
rear-front)%MAX 。
17.设循环队列的容量为50(序号从0到49),现经过一系列的入队和出队运算后,有front=27,
rear=11,问在这种情况下,循环队列中有 34个元素?如果front=11,rear=27,问在这种情况下,循环队列中有 16个元素?
18.中缀表达式(B+D) * (A-C) 对应的前缀表达式是*+BD-AC ,后缀表达式是BD+AC-*
19.后缀表达式ABC+* 对应的前缀表达式是*A+BC ,中缀表达式是A*(B+C)
20.线性表、栈和队列都是线性结构,可以在线性表的任意位置插入和删除元素;栈只能在
栈顶插入和删除元素;队列只能在队尾插入和队头删除元素。
21.在栈顶指针为head的链式栈中,判定栈空的条件是head->next==NULL 。
22.设有一个顺序栈S,元素s1, s2, s3, s4, s5, s6依次进栈,如果6个元素的出栈顺序
为s2, s3, s4, s6, s5, s1,则顺序栈的容量至少应为 3
三、单项选择(请将正确答案的代号填写在下表对应题号下面。
每题1.5分,共33分)
1、栈是限定在()处进行插入或删除操作的线性表。
A.端点
B.栈底
C.栈顶
D.中间
2、在栈顶一端可进行的全部操作是()。
A.插入
B.删除
C.插入和删除
D.进栈
3、4个元素按A、B、C、D顺序连续进S栈,进行Pop(S,x)运算后,x的值是()。
A.A
B.B
C.C
D.D
4、栈的特点是()。
A.先进先出
B.后进先出
C.后进后出
D.不进不出
5、在栈的实现方法中,需要考虑栈满的是()。
A、循环链表栈;
B、链式栈;
C、无限栈;
D、顺序栈。
6、将一个递归算法改写成非递归的形式时,一般()。
A、只能采用栈结构;
B、只能采用队列结构;
C、采用非栈结构更好;
D、可采用栈或非栈结构。
7、在C语言中实现队列时,为了避免使用循环队列,采用()来实现较好。
A、动态分配的一维数组;
B、静态分配的一维数组;
C、二维数组;
D、链式队列。
8、实现循环队列时,可采用()。
A、动态分配的一维数组;
B、静态分配的一维数组;
C、二维数组;
D、链式队列。
9、4个元素进S栈的顺序是A、B、C、D,进行两次Pop(S,x)操作后,栈顶元素的值是()。
A)A B)B C)C D)D
10、顺序栈存储空间的实现使用()存储栈元素。
A.链表
B.数组
C.循环链表
D.变量
11、一个栈的输入序列为1 2 3 4 5,则下列序列中可能是栈的输出序列的是( )
A) 2 3 514 B) 4 15 2 3 C) 5 4 1 3 2 D) 1 5 4 3 2
12、栈与一般线性表的区别主要在()方面。
A.元素个数
B.元素类型
C.逻辑结构
D.插入、删除元素的位置
13、元素A、B、C、D依次进顺序栈后,栈底元素是()。
A)A B)B C)C D)D
14、经过下列栈的运算后,X的值是()。
InitStack (S); Push(S,’a’);Push(S,’b’);GetTop(S);Pop(S,X);
A.a
B.b
C.1
D.2
15、正常情况下,删除非空的顺序存储结构的堆栈的栈顶元素,栈顶指针top的变化是()。
A. top不变
B. top←0
C. top←top+1
D. top←top-1
16、队列限定在()处进行插入操作。
A.端点
B.队头
C.队尾
D.中间
17、4个元素A、B、C、D顺序连续进队Q,队尾元素的值是()。
A)A B)B C)C D)D
18、队列的特点是()。
A.先进先出
B.后进先出
C.先进后出
D.不进不出
19、循环队列占用的空间()。
A.必须连续
B.可以不连续
C.不能连续
D.不必连续
20、一个循环队列一旦说明,其占用空间的大小()。
A.不能固定
B.可以改变
C.已固定
D.动态变化
21、循环队列Sq是空队列的条件是()。
A.Sq.rear= =Sq.front
B.(Sq.rear+1)%maxsize= =Sq.front
C.Sq.rear= =0
D.Sq.fronr= =0
22、循环队列Sq是满队列的条件是()。
A.Sq.rear= =Sq.front
B.(Sq.rear+1)%maxsize= =Sq.front
C.Sq.rear= =0
D.Sq.fronr= =0
1. 假设称正读和反读都相同的字符序列为“回文”,例如,“abcddcba”、“qwerewq”是回文,“ashgash”不是回文。
是写一个算法判断读入的一个以‘@’为结束符的字符序列是否为回文。
int Palindrome_Test(){
InitStack(S);InitQueue(Q);
while((c=getchar())!='@')
{ Pop(S,a);DeQueue(Q,b));
}
return OK;
}//Palindrome_Test
2、已知栈的顺序存储结构如下定义:
# define STACK_INIT_SIZE 100
# define STACKINCREMENT 10
typedef struct{
SElemType *base;SElemType *top;int stacksize;
}SqStack;
请完成如下入栈算法:
status Push(SqStack&S,SElemType e){
if(①
tbase=(SElemType*)realloc(S.base,
(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!tbase) exit(OVERFLOW);
S.base=tbase;S.tops=S.base+S.stacksize-1;S.stacksize+=STACKINCREMENT;
}// Push
3、已知循环队列定义如下:
# define MAXQSIZE 100
typedef struct{
QElemType *base;int front;int rear;
}SqQueue;
请完成如下出队算法:
status DnQueue(SqQueue&Q,QElemType &e){
if(;
return OK;
}// DnQueue
4. 向循环队列 q 的队尾加入一个元素 e
}// EnQueue;
五、阅读理解题:简述以下算法的功能(每小题5分,共10分)
(1)
int unknow1(SeqStack S) 1.该函数的功能是:计算栈中结点个数{int n=0;
while(!EmptyStack(&S))
{Pop(&S);
n++; }
return n;
}
(2)
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); }
} 2.该函数的功能是:利用堆栈做辅助,将队列中的数据元素进行逆置。