数据结构 C语言版 第二版 第3章 栈和队列 答案

上传人:壹****1 文档编号:560029692 上传时间:2023-02-01 格式:DOCX 页数:11 大小:34.99KB
返回 下载 相关 举报
数据结构 C语言版 第二版 第3章 栈和队列 答案_第1页
第1页 / 共11页
数据结构 C语言版 第二版 第3章 栈和队列 答案_第2页
第2页 / 共11页
数据结构 C语言版 第二版 第3章 栈和队列 答案_第3页
第3页 / 共11页
数据结构 C语言版 第二版 第3章 栈和队列 答案_第4页
第4页 / 共11页
数据结构 C语言版 第二版 第3章 栈和队列 答案_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《数据结构 C语言版 第二版 第3章 栈和队列 答案》由会员分享,可在线阅读,更多相关《数据结构 C语言版 第二版 第3章 栈和队列 答案(11页珍藏版)》请在金锄头文库上搜索。

1、第 3 章 栈和队列1选择题(1) 若让元素 1,2,3,4,5 依次进栈,则出栈次序不可能出现在( )种情况。 A5,4,3,2,1B2,1,5,4,3C4,3,1,2,5D2,3,5,4,1答案:C解释:栈是后进先出的线性表,不难发现C选项中元素1比元素2先出栈,违背了栈的 后进先出原则,所以不可能出现C选项所示的情况。(2) 若已知一个栈的入栈序列是1,2,3,,n,其输出序列为pl,p2, p3,,pn,若 p1=n,则 pi 为()。A. iB. n-iC. n-i+1D.不确定答案:C解释:栈是后进先出的线性表,一个栈的入栈序列是1, 2, 3,,n,而输出序列的第 一个元素为n,

2、说明1, 2, 3,,n 一次性全部进栈,再进行输出,所以p1=n, p2=n-1,, pi=n-i+1。(3) 数组Qn 用来表示一个循环队列,f为当前队列头元素的前一位置,r为队尾元 素的位置,假定队列中元素的个数小于n,计算队列中元素个数的公式为()。A.r-fB. (n+f-r)%nC. n+r-fD. (n+r-f)%n答案:D 解释:对于非循环队列,尾指针和头指针的差值便是队列的长度,而对于循环队列,差值 可能为负数,所以需要将差值加上MAXSIZE (本题为n),然后与MAXSIZE (本题为n)求余, 即(n+r-f)%n。(4) 链式栈结点为:(data,link), top

3、指向栈顶若想摘除栈顶结点,并将删除结点的值保存 到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;答案:A解释: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. n+

4、1B. n-1C. nD. n+2答案:A解释:特殊值法。设n=0,易知仅调用一次fact(n)函数,故选A。(6) 栈在( )中有所应用。A.递归调用B.函数调用 C.表达式求值D.前三个选项都有答案:D解释:递归调用、函数调用、表达式求值均用到了栈的后进先出性质。(7) 为解决计算机主机与打印机间速度不匹配问题,通常设一个打印数据缓冲区。主机将 要输出的数据依次写入该缓冲区,而打印机则依次从该缓冲区中取出数据。该缓冲区的逻辑结构 应该是( )。A.队列B.栈C.线性表D.有序表答案:A解释:解决缓冲区问题应利用一种先进先出的线性表,而队列正是一种先进先出的线性表。(8) 设栈S和队列Q的初

5、始状态为空,元素el、e2、e3、e4、e5和e6依次进入栈S, 个元素出栈后即进入Q,若6个元素出队的序列是e2、e4、e3、e6、e5和el,则栈S的容量至 少应该是( )。A. 2B. 3C. 4D. 6答案: B解释:元素出队的序列是e2、e4、e3、e6、e5和el,可知元素入队的序列是e2、e4、e3、 e6、e5和el,即元素出栈的序列也是e2、e4、e3、e6、e5和el,而元素el、e2、e3、e4、e5 和e6依次进入栈,易知栈S中最多同时存在3个元素,故栈S的容量至少为3。(9) 若一个栈以向量Vl.n存储,初始栈顶指针top设为n+l,则元素x进栈的正确操作是()。A.

6、top+; Vtop=x;B.Vtop=x; top+;C.top-; Vtop=x;D.Vtop=x; top-;答案: C解释:初始栈顶指针top为n+l,说明元素从数组向量的高端地址进栈,又因为元素存储 在向量空间Vl.n中,所以进栈时top指针先下移变为n,之后将元素x存储在Vn。(lO )设计一个判别表达式中左,右括号是否配对出现的算法,采用()数据结构最佳。A.线性表的顺序存储结构B.队列C. 线性表的链式存储结构D. 栈答案: D解释:利用栈的后进先出原则。(ll)用链接方式存储的队列,在进行删除运算时()。A. 仅修改头指针B. 仅修改尾指针C. 头、尾指针都要修改D. 头、尾

7、指针可能都要修改答案: D 解释:一般情况下只修改头指针,但是,当删除的是队列中最后一个元素时,队尾指针也 丢失了,因此需对队尾指针重新赋值。(l2 )循环队列存储在数组A0.m中,则入队时的操作为()。A. rear=rear+lB. rear=(rear+l)%(mT)C. rear=(rear+1)%mD. rear=(rear+1)%(m+1)答案: D解释:数组A0.m中共含有m +1个元素,故在求模运算时应除以m+1。(l3 )最大容量为n的循环队列,队尾指针是rear,队头是fron t,则队空的条件是()。A. (rear+1)%n=frontB. rear=frontC.re

8、ar+1=frontD. (rear-l)%n=front答案: B解释:最大容量为n的循环队列,队满条件是(rear+l)%n=front,队空条件是 rear=front。(l4 )栈和队列的共同点是()。A. 都是先进先出C. 只允许在端点处插入和删除元素答案:CB. 都是先进后出D. 没有共同点元素。15)一个递归算法必须包括( )。A. 递归部分B. 终止条件和递归部分解释:栈只允许在栈顶处进行插入和删除元素,队列只允许在队尾插入元素和在队头删除C. 迭代部分D. 终止条件和迭代部分答案:B2算法设计题试编写双栈初始化,判断栈空、栈满、进栈和出栈等算法的函数。(1)将编号为0和1的两

9、个栈存放于一个数组空间Vm中,栈底分别处于数组的两端。当 第0号栈的栈顶指针top0等于-1时该栈为空,当第1号栈的栈顶指针top1等于m时该栈为空。 两个栈均从两端向中间增长 双栈数据结构的定义如下:/栈顶和栈底指针/栈数组/栈最大可容纳元素个数Typedef structint top2,bot2;SElemType *V; int m;DblStack题目分析两栈共享向量空间,将两栈栈底设在向量两端,初始时,左栈顶指针为-1,右栈顶为m。两 栈顶指针相邻时为栈满。两栈顶相向、迎面增长,栈顶指针指向栈顶元素。算法描述(1)栈初始化int Init()S.top0=-1;S.top1=m;r

10、eturn 1; /初始化成功(2) 入栈操作int push(stk S ,int i,int x)i为栈号,i=0表示左栈,i=1为右栈,x是入栈兀素。入栈成功返回1,失败返回0 if(i1) cout“栈号输入不对”endl;exit(0);if(S.top1-S.top0=1) cout “栈已满 ”endl;return(0);switch(i)case 0: S.V+S.top0=x; return(1); break;case 1: S.V-S.top1=x; return(1); push(3) 退栈操作ElemType pop(stk S,int i)退栈。i代表栈号,i=0

11、时为左栈,i=1时为右栈。退栈成功时返回退栈元素否则返回-1if(il)cout“栈号输入错误”endl; exit(O);switch(i)case 0: if(S.top0=-l) cout“栈空”endl; return (-1); else return(S.VS.top0-);case 1: if(S.top1=m cout“栈空”endl; return(-1);else return(S.VS.top1+); switch 算法结束(4) 判断栈空int Empty();return (S.top0=-1 & S.top1=m);算法讨论 请注意算法中两栈入栈和退栈时的栈顶指针的

12、计算。左栈是通常意义下的栈,而右栈入栈操 作时,其栈顶指针左移(减 1),退栈时,栈顶指针右移(加 1)。(2) 回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good” 不是回文。试写一个算法判定给定的字符向量是否为回文。(提示:将一半字符入栈)题目分析 将字符串前一半入栈,然后,栈中元素和字符串后一半进行比较。即将第一个出栈元素和 后一半串中第一个字符比较,若相等,则再出栈一个元素与后一个字符比较,直至栈空, 结论为字符序列是回文。在出栈元素与串中字符比较不等时,结论字符序列不是回文。算法描述#define StackSize 100 /假定预分配的栈空间最

13、多为100个元素t ypedef char Dat aType;/假定栈元素的数据类型为字符typedef structDataType dataStackSize;int top;SeqStack;int IsHuiwen( char *t)/判断t字符向量是否为回文,若是,返回1,否则返回0SeqStack s;int i , len;char temp;InitStack( &s);len=strlen(t); /求向量长度for ( i=0; ix); /从键盘读入整数序列。 if(x!=-1)/ 读入的整数不等于-1时入栈。if(top=maxsizeT)cout 栈满”endl;exit(0); else s+top=x; /x 入栈。else /读入的整数等于-1时退栈。if(top=0) cout 栈空” endl;exit(0); else cout

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号