Push( &s, t[i]); while( !EmptyStack( &s))

{// 每弹出一个字符与相应字符比较 temp=Pop (&s);

if( temp!=S[i]) return 0 ;// 不等则返回0 else i++; }

return 1 ; // 比较完毕均相等则返回 1 }

(3)设从键盘输入一整数的序列:a1, a2, a3,…,an,试编写算法实现:用栈结构存储输入的整数,当ai≠-1时,将ai进栈;当ai=-1时,输出栈顶整数并出栈。算法应对异常情况(入栈满等)给出相应的信息。 #define maxsize 栈空间容量

void InOutS(int s[maxsize])

//s是元素为整数的栈,本算法进行入栈和退栈操作。

{int top=0; //top为栈顶指针,定义top=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(“出栈元素

是%d\\n”,s[top--]);}} }//算法结束。

(4)从键盘上输入一个后缀表达式,试编写算法计算表达式的值。规定:逆波兰表达式的长度不超过一行,以$符作为输入结束,操作数之间用空格分隔,操作符只可能有+、-、*、/四种运算。例如:234 34+2*$。

[题目分析]逆波兰表达式(即后缀表达式)求值规则如下:设立运算数栈OPND,对表达式从左到右扫描(读入),当表达式中扫描到数时,压入OPND栈。当扫描到运算符时,从OPND退出两个数,进行相应运算,结果再压入OPND栈。这个过程一直进行到读出表达式结束符$,这时OPND栈中只有一个数,就是结果。

float expr( )

//从键盘输入逆波兰表达式,以‘$’表示输入结束,本算法求逆波兰式表达式的值。 {float OPND[30]; // OPND是操作数栈。 init(OPND); //两栈初始化。 float num=0.0; //数字初始化。 scanf (“%c”,&x);//x是字符型变量。 while(x!=’$’)

{switch

{case‘0’<=x<=’9’:while((x>=’0’&&x<=’9’)||x==’.’) //拼数 if(x!=’.’) //处理整数

{num=num*10+(ord(x)-ord(‘0’));

scanf(“%c”,&x);}

else //处理小数部分。 {scale=10.0; scanf(“%c”,&x); while(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,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再加新读入的数得到新的部分数。当读到小数点,认为数的整数部分已完,要接着处理小数部分。小数部分的数要除以10(或10的幂数)变成十分位,百分位,千分位数等等,与前面部分数相加。在拼数过程中,若遇非数字字符,表示数已拼完,将数压入栈中,并且将变量num恢复为0,准备下一个数。这时对新读入的字符进入‘+’、‘-’、‘*’、‘/’及空格的判断,因此在结束处理数字字符的case后,不能加入break语句。

(5)假设以I和O分别表示入栈和出栈操作。栈的初态和终态均为空,入栈和出栈的操作序列可表示为仅由I和O组成的序列,称可以操作的序列为合法序列,否则称为非法序列。

①下面所示的序列中哪些是合法的?

A. IOIIOIOO B. IOOIOIIO C. IIIOIOIO D. IIIOOIOO ②通过对①的分析,写出一个算法,判定所给的操作序列是否合法。若合法,返回true,否则返回false(假定被判定的操作序列已存入一维数组中)。

①A和D是合法序列,B和C 是非法序列。 ②设被判定的操作序列已存入一维数组A中。 int Judge(char A[])

//判断字符数组A中的输入输出序列是否是合法序列。如是,返回true,否则返

回false。

{i=0; //i为下标。

j=k=0; //j和k分别为I和字母O的的个数。 while(A[i]!=‘\\0’) //当未到字符数组尾就作。 {switch(A[i])

{case‘I’: j++; break; //入栈次数增1。

case‘O’: k++; if(k>j){printf(“序列非法\\n”);exit(0);} }

i++; //不论A[i]是‘I’或‘O’,指针i均后移。}

if(j!=k) {printf(“序列非法\\n”);return(false);} else {printf(“序列合法\\n”);return(true);} }//算法结束。

[算法讨论]在入栈出栈序列(即由‘I’和‘O’组成的字符串)的任一位置,入栈次数(‘I’的个数)都必须大于等于出栈次数(即‘O’的个数),否则视作非法序列,立即给出信息,退出算法。整个序列(即读到字符数组中字符串的结束标记‘\\0’),入栈次数必须等于出栈次数(题目中要求栈的初态和终态都为空),否则视为非法序列。

(6)假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素站点(注意

不设头指针) ,试编写相应的置空队、判队空 、入队和出队等算法。

算法如下: //先定义链队结构: typedef struct queuenode{ Datatype data;

struct queuenode *next;

}QueueNode; //以上是结点类型的定义

typedef struct{ queuenode *rear;

}LinkQueue; //只设一个指向队尾元素的指针

(1)置空队

void InitQueue( LinkQueue *Q)

{ //置空队:就是使头结点成为队尾元素 QueueNode *s;

以上是由77cn范文大全为大家整理的数据结构(C语言版)第三四章习题答案的相关范文,本文关键词为数据结构,语言,第三,四章,习题,答案,,您可以从右上方搜索框检索更多相关文章,如果您觉得有用,请继续关注我们并推荐给您的好友,您可以在综合文库中查看更多范文。

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

免费范文网为全国范文类知名网站,下载全文稍作修改便可使用,即刻完成写稿任务。

已有11人下载

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库数据结构(C语言版)第三四章习题答案在线全文阅读。

本文来自:免费范文网(www.77cn.com.cn) 转载请注明出处!

数据结构c语言版第三版实验四答案,数据结构(C语言版)第三四章习题答案相关推荐

  1. c语言作业题五六章答案,数据结构(C语言版)第五六章习题答案

    数据结构(C语言版)第五六章习题答案,人民邮电出版社,答案很详细. (15)设F是一个森林,B是由F变换得的二叉树.若F中有n个非终端结点,则B中右指针域为空的结点有( )个. A. n-1 B.n ...

  2. 数据结构题及c语言版严第七章答案,数据结构第七章习题答案.doc

    数据结构第七章习题答案 PAGE PAGE 9 第7章 <图>习题参考答案 一.单选题(每题1分,共16分) ( C )1. 在一个图中,所有顶点的度数之和等于图的边数的 倍. A.1/2 ...

  3. C程序设计谭浩强第五版课后答案 第三章习题答案

    C语言程序设计谭浩强第五版课后答案第三章 1.假如我国国民生产总值的年增长率为7%, 计算10年后我国国民生产总值与现在相比增长多少百分比.计算公式为p=(1+r)np = (1+r)^np=(1+r ...

  4. R语言入门第三集 实验二:基本数据处理

    R语言入门第三集 实验二:基本数据处理 一.资源 [R语言]R语言数据处理--东北大学大数据班R实训第二次作业 二.答案更新纠正 2.11.从df中选取date . item_id . cate_id ...

  5. c语言程序设计编程解读,C语言程序设计第三次实验报告解读

    <C语言程序设计第三次实验报告解读>由会员分享,可在线阅读,更多相关<C语言程序设计第三次实验报告解读(15页珍藏版)>请在人人文库网上搜索. 1.C语言程序设计实验报告专业 ...

  6. DES的加密解密在ECB上的使用(C语言实现)——大三密码学实验

    目录 实验内容 实验原理 DES加密解密 ECB(电码本模式) 代码 DES函数的构建 RE_DES函数的构建 ECB函数的构建 RE_ECB的函数的构建 主函数的构建 总代码 测试结果 实验内容 输 ...

  7. 雨晨QQ2012 (4924)绿色版|qq三显IP显隐身VIP完美自选版

    雨晨 2012.9.14 QQ2012正式版(4924)完美自选版(快速三显IP显隐身超低内存+登录歌曲+IP更新查询) 经过近10个小时的测试三次上传失败(无线网上信号太差)雨晨QQ2012正式版V ...

  8. 大学计算机基础第五版第三章,大学计算机基础第三章习题答案

    <大学计算机基础第三章习题答案>由会员分享,可在线阅读,更多相关<大学计算机基础第三章习题答案(4页珍藏版)>请在人人文库网上搜索. 1.第三章 微型计算机硬件组成1.微型计算 ...

  9. python核心教程第二版答案_python核心编程第二版第4章习题答案.docx

    python核心编程第二版第4章习题答案.docx 4-1.Python 对象.与所有 Python 对象有关的三个属性是什么?请简单的描述一下. 答案: 所有的 Python 对象都拥有三个特性:身 ...

最新文章

  1. mysql触发器和存储过程_MySql的存储过程和触发器
  2. 6. Qt 信号与信号槽 (7)-QMetaObject:: activate
  3. 单位银行结算账户如何变更
  4. 用 Go 构建一个区块链 -- Part 5: 地址 1
  5. mysql异地备份_MySQL数据库异地备份与还原方法
  6. Faster R-CNN改进篇(二): RFCN ● RON
  7. (王道408考研数据结构)第一章绪论-第二节2:算法的时间复杂度和空间复杂度
  8. 俄罗斯调查PC厂商合谋操纵市场 联想被指妨碍调查
  9. ARM汇编EQU伪指令
  10. sourceTree初识
  11. 超越Excel,这才是报表的正确打开方式,可惜90%的人都没用过
  12. BroadCastReceive的理解和使用
  13. python3.7 获取网络时间
  14. 电力系统三相短路计算机计算报告,电力系统分析三相短路计算习题.doc
  15. 华中农大计算机排名,华中农业大学专业排名,招生专业目录(10篇)
  16. 【课程·研】自然辩证法 | 课堂汇报:工程师的伦理规范
  17. excel表格打印每页都有表头_excel技巧:excel表格打印后每页自动带标题、页眉页脚...
  18. 音乐能力与计算机能力结合,作曲与作曲技术理论专业(计算机作曲与音乐制作)培养方案...
  19. Linux发行版之间有什么区别?
  20. 前端练习——弹窗、判断语句 (星座测试)

热门文章

  1. PyQt(Python+Qt)学习随笔:QTreeWidgetItem项列图标的访问方法
  2. 利用DirectShow开发C#版的音频文件播放器(补充完善)
  3. python vimdiff_技巧:Vimdiff 使用
  4. 云时代,最好用的MySQL客户端工具推荐
  5. 【Unity3D】基于AssetBundle实现资源热更新
  6. delphi 企业微信消息机器人_GitHub - guoxianlong/insight: Insight是一个可以管理企业微信群机器人的小工具,可以非常方便的往群里发布即时消息和定时消息。...
  7. 查询江苏丹阳高考成绩2021,2020年江苏县级市各大高中高考成绩回顾
  8. vue实现icon刷新动画
  9. 标梵互动:微信公众号开发之node第二篇
  10. 省市区三级联动(带经纬度、离线地图)