数据结构:栈子系统_第1页
数据结构:栈子系统_第2页
数据结构:栈子系统_第3页
数据结构:栈子系统_第4页
数据结构:栈子系统_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据结构:栈子系统.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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论