数据结构(c语言版)第三四章习题答案

上传人:F****n 文档编号:99252879 上传时间:2019-09-18 格式:DOC 页数:16 大小:94KB
返回 下载 相关 举报
数据结构(c语言版)第三四章习题答案_第1页
第1页 / 共16页
数据结构(c语言版)第三四章习题答案_第2页
第2页 / 共16页
数据结构(c语言版)第三四章习题答案_第3页
第3页 / 共16页
数据结构(c语言版)第三四章习题答案_第4页
第4页 / 共16页
数据结构(c语言版)第三四章习题答案_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《数据结构(c语言版)第三四章习题答案》由会员分享,可在线阅读,更多相关《数据结构(c语言版)第三四章习题答案(16页珍藏版)》请在金锄头文库上搜索。

1、第3章 栈和队列习题1选择题(1)若让元素1,2,3,4,5依次进栈,则出栈次序不可能出现在( )种情况。A5,4,3,2,1 B2,1,5,4,3 C4,3,1,2,5 D2,3,5,4,1(2)若已知一个栈的入栈序列是1,2,3,n,其输出序列为p1,p2,p3,pn,若p1=n,则pi为( )。 Ai Bn-i Cn-i+1 D不确定(3)数组用来表示一个循环队列,为当前队列头元素的前一位置,为队尾元素的位置,假定队列中元素的个数小于,计算队列中元素个数的公式为( )。Ar-f B(n+f-r)%n Cn+r-f D(n+r-f)%n(4)链式栈结点为:(data,link),top指向

2、栈顶.若想摘除栈顶结点,并将删除结点的值保存到x中,则应执行操作( )。Ax=top-data;top=top-link; Btop=top-link;x=top-link; Cx=top;top=top-link; Dx=top-link;(5)设有一个递归算法如下 int fact(int n) /n大于等于0 if(n=0) return 1; else return n*fact(n-1); 则计算fact(n)需要调用该函数的次数为( )。An+1 Bn-1 C n D n+2(6)栈在( )中有所应用。A递归调用 B函数调用 C表达式求值 D前三个选项都有(7)为解决计算机主机与打

3、印机间速度不匹配问题,通常设一个打印数据缓冲区。主机将要输出的数据依次写入该缓冲区,而打印机则依次从该缓冲区中取出数据。该缓冲区的逻辑结构应该是( )。A队列 B栈 C 线性表 D有序表(8)设栈S和队列Q的初始状态为空,元素e1、e2、e3、e4、e5和e6依次进入栈S,一个元素出栈后即进入Q,若6个元素出队的序列是e2、e4、e3、e6、e5和e1,则栈S的容量至少应该是()。A2 B3 C4 D 6(9)在一个具有n个单元的顺序栈中,假设以地址高端作为栈底,以top作为栈顶指针,则当作进栈处理时,top的变化为()。 Atop不变 Btop=0 Ctop- Dtop+(10)设计一个判别

4、表达式中左,右括号是否配对出现的算法,采用()数据结构最佳。A线性表的顺序存储结构 B队列 C. 线性表的链式存储结构 D. 栈(11)用链接方式存储的队列,在进行删除运算时()。A. 仅修改头指针 B. 仅修改尾指针C. 头、尾指针都要修改 D. 头、尾指针可能都要修改(12)循环队列存储在数组A0.m中,则入队时的操作为()。A. rear=rear+1 B. rear=(rear+1)%(m-1) C. rear=(rear+1)%m D. rear=(rear+1)%(m+1) (13)最大容量为n的循环队列,队尾指针是rear,队头是front,则队空的条件是()。 A. (rear

5、+1)%n=front B. rear=front Crear+1=front D. (rear-l)%n=front(14)栈和队列的共同点是()。A. 都是先进先出 B. 都是先进后出 C. 只允许在端点处插入和删除元素 D. 没有共同点(15)一个递归算法必须包括()。A. 递归部分 B. 终止条件和递归部分C. 迭代部分 D. 终止条件和迭代部分(2)回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。试写一个算法判定给定的字符向量是否为回文。(提示:将一半字符入栈)根据提示,算法可设计为:/以下为顺序栈的存储结构定义#define Sta

6、ckSize 100 /假定预分配的栈空间最多为100个元素typedef char DataType;/假定栈元素的数据类型为字符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; ilen/2; i+)/将一半字符入栈Push( &s, ti);while( !EmptyStack(

7、 &s)/ 每弹出一个字符与相应字符比较temp=Pop (&s);if( temp!=Si) return 0 ;/ 不等则返回0else i+;return 1 ; / 比较完毕均相等则返回 1(3)设从键盘输入一整数的序列:a1, a2, a3,an,试编写算法实现:用栈结构存储输入的整数,当ai-1时,将ai进栈;当ai=-1时,输出栈顶整数并出栈。算法应对异常情况(入栈满等)给出相应的信息。#define maxsize 栈空间容量 void InOutS(int smaxsize) /s是元素为整数的栈,本算法进行入栈和退栈操作。 int top=0; /top为栈顶指针,定义to

8、p=0时为栈空。 for(i=1; i=n; i+) /n个整数序列作处理。 scanf(“%d”,&x); /从键盘读入整数序列。 if(x!=-1) / 读入的整数不等于-1时入栈。 if(top=maxsize-1)printf(“栈满n”);exit(0);else s+top=x; /x入栈。 else /读入的整数等于-1时退栈。 if(top=0)printf(“栈空n”);exit(0); else printf(“出栈元素是%dn”,stop-); /算法结束。(4)从键盘上输入一个后缀表达式,试编写算法计算表达式的值。规定:逆波兰表达式的长度不超过一行,以$符作为输入结束,

9、操作数之间用空格分隔,操作符只可能有+、-、*、/四种运算。例如:234 34+2*$。 题目分析逆波兰表达式(即后缀表达式)求值规则如下:设立运算数栈OPND,对表达式从左到右扫描(读入),当表达式中扫描到数时,压入OPND栈。当扫描到运算符时,从OPND退出两个数,进行相应运算,结果再压入OPND栈。这个过程一直进行到读出表达式结束符$,这时OPND栈中只有一个数,就是结果。 float expr( )/从键盘输入逆波兰表达式,以$表示输入结束,本算法求逆波兰式表达式的值。float OPND30; / OPND是操作数栈。init(OPND); /两栈初始化。 float num=0.0

10、; /数字初始化。 scanf (“%c”,&x);/x是字符型变量。 while(x!=$) switch case0=x=0&x=0&x=9) num=num+(ord(x)-ord(0)/scale; scale=scale*10; scanf(“%c”,&x); /else push(OPND,num); num=0.0;/数压入栈,下个数初始化 case x= :break; /遇空格,继续读下一个字符。 case x=+:push(OPND,pop(OPND)+pop(OPND);break; case x=-:x1=pop(OPND);x2=pop(OPND);push(OPND

11、,x2-x1);break; case x=*:push(OPND,pop(OPND)*pop(OPND);break; case x=/:x1=pop(OPND);x2=pop(OPND);push(OPND,x2/x1);break; default: /其它符号不作处理。 /结束switch scanf(“%c”,&x);/读入表达式中下一个字符。 /结束while(x!=$) printf(“后缀表达式的值为%f”,pop(OPND);/算法结束。算法讨论假设输入的后缀表达式是正确的,未作错误检查。算法中拼数部分是核心。若遇到大于等于0且小于等于9的字符,认为是数。这种字符的序号减去字符0的序号得出数。对于整数,每读入一个数字字符,前面得到的部分数要乘上10再加新读入的数得到新的部分数。当读到小数点

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学/培训

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