当前位置: 首页 > news >正文

C //练习 4-4 在栈操作中添加几个命令,分别用在不弹出元素的情况下打印栈顶元素;复制栈顶元素;交换栈顶两个元素的值。另外增加一个命令用于清空栈。

C程序设计语言 (第二版) 练习 4-4

练习 4-4 在栈操作中添加几个命令,分别用在不弹出元素的情况下打印栈顶元素;复制栈顶元素;交换栈顶两个元素的值。另外增加一个命令用于清空栈。

注意:代码在win32控制台运行,在不同的IDE环境下,有部分可能需要变更。
IDE工具:Visual Studio 2010

 

代码块:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>#define MAXOP 100
#define NUMBER '0'
#define MAXVAL 100
#define BUFSIZE 100int sp = 0;
double val[MAXVAL];char buf[BUFSIZE];
int bufp = 0;void push(double f){if(sp < MAXVAL){val[sp++] = f;}else{printf("Error! Stack Full, can't push %g\n", f);}
}double pop(void){if(sp > 0){return val[--sp];}else{printf("Error! Stack Empty!\n");return 0.0;}
}void printTop(void){if(sp > 0){printf("Top: %g\n", val[sp-1]);}else{printf("Error! Stack Empty!\n");}
}void topCopy(void){if(sp > 0 || sp < MAXVAL){val[sp++] = val[sp-1];}else if(sp <= 0){printf("Error! Stack Empty!\n");}else{printf("Error! Stack Full!\n");}
}void swapTop(void){double temp;if(sp >= 2){temp = val[sp-1];val[sp-1] = val[sp-2];val[sp-2] = temp;}else{printf("Can't Swap Top Number!\n");}
}void emptyStack(void){for(int i = sp - 1; i >= 0; i--){val[i] = 0;}sp = 0;
}int getch(void){return (bufp > 0) ? buf[--bufp] : getchar();
}void ungetch(int c){if(bufp >= BUFSIZE){printf("Ungetch! Too many characters!\n");}else{buf[bufp++] = c;}
}int getop(char s[]){int i, c;while((s[0] = c = getch()) == ' ' || c == '\t');s[1] = '\0';if(c == '-'){int next = getch();if(!isdigit(next) && next != '.'){ungetch(next);return c;}s[1] = c = next;i = 1;}else{i = 0;if(!isdigit(c) && c != '.'){return c;}}if(isdigit(c)){while(isdigit(s[++i] = c = getch()));}if(c == '.'){while(isdigit(s[++i] = c = getch()));}s[i] = '\0';if(c != EOF){ungetch(c);}return NUMBER;
}int main(){//以下注释掉计算器主函数代码/*int type;double op2;char s[MAXOP];while((type = getop(s)) != EOF){switch(type){case NUMBER:push(atof(s));break;case '+':push(pop() + pop());break;case '*':push(pop() * pop());break;case '-':op2 = pop();push(pop() - op2);break;case '/':op2 = pop();if(op2 != 0.0){push(pop() / op2);}else{printf("Error! Zero Divisor!\n");}break;case '%':op2 = pop();push((int)pop() % (int)op2);break;case '\n':printf("\t%.8g\n", pop());break;default:printf("Error! Unknown Command %s\n", s);break;}}*///测试栈操作for(double i = 0.0; i < 10.0; i++){push(i);}printTop();swapTop();printTop();topCopy();printTop();emptyStack();printTop();system("pause");return 0;
}

相关文章:

  • ssm基于Javaweb的网上奶茶店系统的设计与实现论文
  • xtu-c语言考试复习-2
  • RAG(检索增强生成 )
  • vercel部署twikoo后评论收不到通知邮件问题解决方法
  • 飞桨分子动力学模拟-论文复现第六期:复现TorchMD
  • 奇怪的事情记录:外置网卡和外置显示器不兼容
  • Ceph入门到精通-通过 CloudBerry Explorer 管理对象bucket
  • ssh远程登陆
  • Kubernetes 集群管理—日志架构
  • iOS14 Widget 小组件调研
  • UniRepLKNet实战:使用 UniRepLKNet实现图像分类任务(二)
  • 7个Linux搜索和过滤命令
  • Jmeter 性能-监控服务器
  • 多种采购方式下,数智化招标采购系统建设解决方案
  • kube-apiserver参数详解
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • [笔记] php常见简单功能及函数
  • gcc介绍及安装
  • Java 多线程编程之:notify 和 wait 用法
  • Javascript编码规范
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • nginx 配置多 域名 + 多 https
  • node.js
  • python学习笔记 - ThreadLocal
  • Redis的resp协议
  • SQLServer插入数据
  • 彻底搞懂浏览器Event-loop
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 基于 Babel 的 npm 包最小化设置
  • 计算机常识 - 收藏集 - 掘金
  • 将 Measurements 和 Units 应用到物理学
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 如何设计一个比特币钱包服务
  • 网络应用优化——时延与带宽
  • 我有几个粽子,和一个故事
  • 我这样减少了26.5M Java内存!
  • 小程序测试方案初探
  • 一些关于Rust在2019年的思考
  • 移动端唤起键盘时取消position:fixed定位
  • 移动端解决方案学习记录
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ​一些不规范的GTID使用场景
  • #pragma data_seg 共享数据区(转)
  • (1)Nginx简介和安装教程
  • (C#)一个最简单的链表类
  • (二十三)Flask之高频面试点
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (剑指Offer)面试题34:丑数
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (原創) 物件導向與老子思想 (OO)
  • (转)GCC在C语言中内嵌汇编 asm __volatile__