




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据结构:栈子系统.v./**题目:设计一个字符型的链栈。*编写进栈、出栈、显示栈中全部元素的程序。*题目:编写一个把十进制整数转换为二进制数的应用程序*题目:编写一个把中缀表达式转换为后缀表达式〔逆波兰式〕的应用程序*题目:设计一个选择式菜单,以菜单方式选择上述操作。*栈子系统**********************************1------进栈***2------出栈***3------显示***4------数值转换***5------逆波兰式***0------返回**********************************请选择菜单号〔0--5〕:*/*include<stdio.h>*include<stdlib.h>*defineSTACKMAX50typedefstructsta//栈的存储构造{intdata;structsta*next;}stackNode;typedefstruct//指向栈顶的指针{stackNode*top;}linkStack;voidconversion(intn);voidpush(linkStack*p,intx);intpop(linkStack*p);voidshowStack(linkStack*p);voidsufflx();/*************************************************Function:main()Description:主调函数Calls:push()pop()showStack()conversion()Input:NULLReturn:void数据结构:栈子系统全文共8页,当前为第1页。Others:NULL数据结构:栈子系统全文共8页,当前为第1页。*************************************************/voidmain(){intx,choice,i=1;linkStackp;p.top=NULL;//置空栈while(i){printf("\n栈子系统\n");printf("*******************************\n");printf("*1------进栈*\n");printf("*2------出栈*\n");printf("*3------显示*\n");printf("*4------数值转换*\n");printf("*5------逆波兰式*\n");printf("*0------返回*\n");printf("*******************************\n");printf("请选择菜单号〔0--5〕:");fflush(stdin);//清空输入的缓存区choice=getchar();switch(choice){case'1':while(1){printf("请输入一个整数〔‘0’表示完毕〕并按回车:");scanf("%d",&x);if(x!=0){push(&p,x);//入栈}else{break;}}break;case'2':x=pop(&p);//出栈if(x>0){printf("出栈元素为:%d\n",x);}数据结构:栈子系统全文共8页,当前为第2页。数据结构:栈子系统全文共8页,当前为第2页。{printf("栈为空,没有元素可以出栈!\n");}break;case'3':showStack(&p);//显示栈元素break;case'4':printf("请输入十进制数:");scanf("%d",&x);conversion(x);//数值转换break;case'5':sufflx();break;case'0':i=0;break;default:i=1;break;}}}/*************************************************Function:conversion()Description:十进制数转换二进制数Calls:push()pop()Input:n:输入的要转换的数Return:voidOthers:NULL*************************************************/voidconversion(intn){linkStacks;intx,i=1;s.top=NULL;//置空栈do{x=n%2;//求余数n=n/2;//求新商push(&s,x);//入栈数据结构:栈子系统全文共8页,当前为第3页。数据结构:栈子系统全文共8页,当前为第3页。printf("转化的二进制为:");while(i){x=pop(&s);//出栈if(x!=-1)//判断是否全部出栈{printf("%d",x);}else{i=0;}}printf("\n");}voidsufflx(){charstr[STACKMAX];//存储中缀表达式charexp[STACKMAX];//存储后缀表达式charstark[STACKMAX];//顺序栈来存放运算符inttop=0;//顺序栈置空intsum,t,i=0;charch;printf("请输入一个算术表达式〔运算符只能包含+,-,*,/〕,以*完毕:\n");fflush(stdin);do{i++;scanf("%c",&str[i]);}while(str[i]!='*'&&i!=STACKMAX);//存储用户输入的中缀表达式sum=i;//保存表达式的长度i=t=1;ch=str[i];i++;while(ch!='*'){switch(ch){case'('://读取到‘〔’时,入栈top++;stark[top]=ch;break;case')'://读取到‘〕’时数据结构:栈子系统全文共8页,当前为第4页。while(st数据结构:栈子系统全文共8页,当前为第4页。{exp[t++]=stark[top--];//出栈并赋值给输出数组exp[t++]=',';//添加分割符号}top--;//栈顶元素为‘〔’时,出栈break;case'+'://读取到‘+’时while(top!=0&&stark[top]!='(')//判断符号优先级{exp[t++]=stark[top--];exp[t++]=',';}stark[++top]=ch;//栈为空时入栈break;case'-'://读取到‘-’时while(top!=0&&stark[top]!='('){exp[t++]=stark[top--];exp[t++]=',';}stark[++top]=ch;//栈为空时入栈break;case'*'://读取到‘*’时while(stark[top]=='*'||stark[top]=='/')//*、/运算级最高{exp[t++]=stark[top--];exp[t++]=',';}stark[++top]=ch;//运算符优先级高的入栈break;case'/'://读取到‘/’时while(stark[top]=='*'||stark[top]=='/'){exp[t++]=stark[top--];exp[t++]=',';}stark[++top]=ch;//运算符优先级高的入栈break;case''://读取到空格时忽略break;default://不是运算符号时while(ch>='0'&&ch<='z')//限制输入的变量{数据结构:栈子系统全文共8页,当前为第5页。数据结构:栈子系统全文共8页,当前为第5页。ch=str[i++];}i--;//上面多加的要去掉exp[t++]=',';break;}ch=str[i++];}while(top!=0)//顺序栈中仍有数值时{exp[t++]=stark[top--];if(top!=0){exp[t++]=',';}}printf("中缀表达式为:");//输出for(i=1;i<sum;i++){printf("%c",str[i]);}printf("\n后缀表达式为:");for(i=1;i<t;i++){printf("%c",exp[i]);}}/*************************************************Function:push()Description:入栈Calls:NULLInput:*p:栈的栈顶指针x:要入栈的数Return:voidOthers:NULL*************************************************/voidpush(linkStack*p,intx)//入栈{stackNode*q;q=(stackNode*)malloc(sizeof(stackNode));q->data=x;q->next=p->top;p->top=q;数据结构:栈子系统全文共8页,当前为第6页。数据结构:栈子系统全文共8页,当前为第6页。/*************************************************Function:pop()Description:出栈Calls:NULLInput:*p:栈的栈顶指针Return:intOthers:NULL*************************************************/intpop(linkStack*p)//出栈{stackNode*q;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 大唐电力盘锦市2025秋招网申填写模板含开放题范文
- 2025年湖北汉江国有资本投资集团有限公司招聘约85人笔试题库历年考点版附带答案详解
- 2025年及未来5年中国显像管彩色电视机行业市场调研及投资规划建议报告
- 2025年及未来5年中国光通信器件行业市场调研分析及投资战略咨询报告
- 2025年及未来5年中国高纯贵金属靶材行业发展前景及投资战略咨询报告
- 2025年及未来5年中国压缩毛巾行业运行态势及未来发展趋势预测报告
- 2025年9月贵州黔东南州施秉县公益性岗位招聘6人笔试备考试题及答案解析
- 2025年及未来5年中国GPS定位导航行业深度分析及投资规划研究建议报告
- 2025年甘肃省金昌市永昌县总工会招聘公益性岗位工作人员笔试备考试题及答案解析
- 2025年及未来5年中国整流机行业市场全景分析及投资前景展望报告
- 2025年中国建设银行个人信用贷款合同
- 2024-2025学年人教版8年级数学上册《 整式的乘法与因式分解》单元测试试题(详解版)
- 2025年全国网约车试题及答案
- 卫生系统信息安全培训课件
- 文物建筑勘查设计取费标准(2020年版)
- 2025年成考专升本《生态学基础》试题与答案
- 工厂出差安全培训内容记录课件
- 河南省新未来2026届高三上学期9月联合测评政治试卷(含答案)
- 危重孕产妇救治中心评估报告
- 风电项目工程验收规范标准
- 职业人群心理健康知识讲座
评论
0/150
提交评论