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

下载本文档

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

文档简介

/*题目:设计一个字符型的链栈。* 编写进栈、出栈、显示栈中全部元素的程序。*题目:编写一个把十进制整数转换为二进制数的应用程序*题目:编写一个把中缀表达式转换为后缀表达式(逆波兰式)的应用程序*题目:设计一个选择式菜单,以菜单方式选择上述操作。* 栈 子 系 统* * * 1-进 栈 * * 2-出 栈 * * 3-显 示 * * 4-数值转换 * * 5-逆波兰式 * * 0-返 回 * * 请选择菜单号(0-5):*/#include #include #define STACKMAX 50typedef struct sta /栈的存储结构 int data; struct sta *next;stackNode;typedef struct /指向栈顶的指针 stackNode *top;linkStack;void conversion(int n);void push(linkStack *p, int x);int pop(linkStack *p);void showStack(linkStack *p);void sufflx();/*Function: main()Description: 主调函数Calls: push() pop() showStack() conversion()Input: NULLReturn: voidOthers: NULL*/void main() int x, choice, i = 1; linkStack p; 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(出栈元素为:%dn, x); else 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*/void conversion(int n) linkStack s; int x, i = 1; s.top = NULL; /置空栈 do x = n%2; /求余数 n = n/2; /求新商 push(&s, x); /入栈 while (n); printf(转化的二进制为:); while (i) x = pop(&s); /出栈 if (x != -1) /判断是否全部出栈 printf(%d, x); else i = 0; printf(n);void sufflx() char strSTACKMAX; /存储中缀表达式 char expSTACKMAX; /存储后缀表达式 char starkSTACKMAX; /顺序栈来存放运算符 int top = 0; /顺序栈置空 int sum, t, i = 0; char ch; printf(请输入一个算术表达式(运算符只能包含+,-,*,/),以#结束:n); fflush(stdin); do i+; scanf(%c, &stri); while (stri != # & i != STACKMAX); /存储用户输入的中缀表达式 sum = i; /保存表达式的长度 i = t = 1; ch = stri; i+; while (ch != #) switch (ch) case (: /读取到(时,入栈 top+; starktop = ch; break; case ): /读取到)时 while (starktop != () expt+ = starktop-; /出栈并赋值给输出数组 expt+ = ,; /添加分割符号 top-; /栈顶元素为(时,出栈 break; case +: /读取到+时 while (top != 0 & starktop != () /判断符号优先级 expt+ = starktop-; expt+ = ,; stark+top = ch; /栈为空时入栈 break; case -: /读取到-时 while (top != 0 & starktop != () expt+ = starktop-; expt+ = ,; stark+top = ch; /栈为空时入栈 break; case *: /读取到*时 while (starktop = * | starktop = /) /*、/运算级最高 expt+ = starktop-; expt+ = ,; stark+top = ch; /运算符优先级高的入栈 break; case /: /读取到/时 while (starktop = * | starktop = /) expt+ = starktop-; expt+ = ,; stark+top = ch; /运算符优先级高的入栈 break; case : /读取到空格时忽略 break; default: /不是运算符号时 while (ch = 0 & ch = z) /限制输入的变量 expt+ = ch; ch = stri+; i-; /上面多加的要去掉 expt+ = ,; break; ch = stri+; while (top != 0) /顺序栈中仍有数值时 expt+ = starktop-; if (top != 0) expt+ = ,; printf(中缀表达式为:); /输出 for (i = 1; i sum; i+) printf(%c, stri); printf(n后缀表达式为:); for (i = 1; i data = x; q-next = p-top; p-top = q;/*Function: pop()Description: 出栈Calls: NULLInput: *p:栈的栈顶指针Return: intOthers: NULL*/int pop(linkStack *p) /出栈 stackNode *q; int x; if (p-top != NULL) q = p-top; x = q-data; p-top = q-next; free(q); return x; /返回栈顶元素 else return -1; /*Function: showStack()Description: 显示栈中元素Calls: NULLInput: *p:栈的栈顶指针Return: voidOthers: NULL*/v

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论