栈是先进后出的一种存储类型,很常见也很常用。用C语言实现一个栈很简单,只需要一个数组和一个int变量就可以了。

一个简单的栈

需要什么

  • 一个char型数组——用于模拟栈
  • 一个int变量——用于保存栈顶的位置
char Value[12];//一个大小为12的栈
int Head;//用于保存栈顶的位置

实现简单的操作

  • 实现在栈顶添加值
  • 实现提取(删去)栈顶的值

要添加值,只需要在栈顶加入值,并将栈顶加1即可。

//添加值,假如要添加chNew的值
char chNew;
scanf("%c",&chNew);//得到要添加的值chValue[Head] = chNew;//添加值
Head ++;//栈顶上移

同理,要提取或删去值,只需要减去栈顶下面一个值(因为栈顶Head是在栈中最上面一个值的上面),并将栈顶减1即可。

//如果要提取出来就先把栈顶的值存到另外一个变量里(如果提取出来只需要显示一下就不需要再多创建一个变量):
char chGet = chValue[Head-1];
printf("你提取出来的值:%c",chGet);
///
chValue[Head-1] = 0;//删去值
Head --;//栈顶下移

也可以判断栈是否达到上限或下限:

//在插入时判断是否达到上限:
if(Head>=12)//因为栈的大小是12,可根据不同需要来更改
{printf("栈已满,不可以继续添加!");return ;//不再往下执行
}//在删去时判断是否达到下限:
if(Head==0)
{printf("栈已空,不可以继续删除!");return ;//不再往下执行
}

一个更完美的程序

要实现一个更完美的模拟栈的程序,总结出我们需要:

  • 一个更和蔼的主界面,显示栈的情况
  • 在主界面等待用户决定对栈进行什么操作
  • 增加和删除功能

代码:

#include <conio.h>
#include <windows.h>
#include <stdio.h>
#include <graphics.h>struct stack //结构体 栈
{char chStack[12];//栈的数组int head;//栈的头
};struct stack Stack;//创建栈void Print(char chValue[12])//打印界面
{system("cls");printf("这是栈:");int i;for (i=11;i>=0;i--)printf("\n[%c]",chValue[i]);printf("\n\n按i增加数值,按p弹出最上面的数值");
}void getinput()//获取用户输入
{char chGet;while (1){if (kbhit())//如果发现用户有按下按键{chGet = getch();//得到用户按下的按键char chValue[1];if (chGet == 'i')//如果是i,增加值{if (Stack.head >= 12)//如果达到上限,不能再加{MessageBox(NULL,"已经是栈顶了!","提示",MB_OK);return;}//询问要增加的值InputBox(chValue,2,"请输入要增加的字符","增加数值",NULL,0,0,true);Stack.chStack[Stack.head] = chValue[0];//增加值Stack.head ++;//栈顶上移}else if (chGet == 'p')//如果是p,删除值{if (Stack.head == 0)//如果已经到下限,就不能再减{MessageBox(NULL,"已经是栈底了!","提示",MB_OK);return;}Stack.chStack[Stack.head-1] = 0;//移除值Stack.head --;//栈顶下移}return;}}}int main()
{system("title 模拟栈程序");//初始化int i;for (i=0;i<12;i++)Stack.chStack[i] = 0;  Stack.head = 0;while (1){Print(Stack.chStack);getinput();}getch();return 0;
}

注意:<graphics.h>并不是自带的头文件。这是EasyX库的头文件,可以到 www.easyx.cn 下载。代码中MessageBox和InputBox用到了这个头文件,可以自行替换成其他。但是如果使用EasyX库的话可以使用图形界面,效果更好。

运行截图:

C语言如何实现模拟栈相关推荐

  1. CCF-CSP 201903-2 二十四点 Python语言 模拟栈实现

    项目场景: 二十四点问题本质是处理表达式,一提到处理表达式第一反应大概就是使用栈来处理,虽然网上大部分使用python语言处理二十四点问题都是利用强大的eval()函数,但我仍然想要使用python的 ...

  2. 用C语言模拟栈(简单实现)

    //C语言模拟栈,简单实现 #include <stdio.h> #include <stdlib.h> typedef struct Node node; struct No ...

  3. C语言中用链表构建栈讲解,C语言数据结构之使用链表模拟栈的实例

    C语言数据结构之使用链表模拟栈的实例 以下是"使用链表模拟栈"的简单示例: 1. 用C语言实现的版本 #include #include typedef char datatype ...

  4. c语言栈的实现以及操作_python模拟栈的操作实现非递归方式的快速排序算法

    本文首发地址: https://yishuihancheng.blog.csdn.net/article/details/76185032 欢迎关注我的博客[Together_CZ],我是沂水寒城! ...

  5. 模拟自由存储箱c语言,「二级C语言」堆、栈、自由存储区

    老脸泸溪编剧利洒漆布!博瑞龙柏乱纪不由鹿峰随便.施令碰见班轮略知效劳,黄袍浅色繁博资信鲁塞木锯?病痛前锋齐唱麻袋肆应绿矾康乃发情超前: 妙乐没皮南曲兰青成荫不啻跑车岔路漫湾厂籍,彩信放帐庆复瓯绣成绩, ...

  6. LC-3 子程序调用与模拟栈调用递归函数

    目录 TRAP机制调用子程序 TRAP调用 TRAP返回 例子 TRAP x21 (系统函数)输出字符源码 模拟栈 方法介绍 栈指针 存取数据 函数栈帧结构 一次递归调用需要的语句 汇编代码 运行结果 ...

  7. C语言【数据结构】栈和队列【OJ题(C++)、选择题】

    目录 一.OJ题 1.225. 用队列实现栈 2.232. 用栈实现队列 3.622. 设计循环队列 4.20. 有效的括号 二.选择题 1.下列关于栈的叙述正确的是(B) 2.一个栈的入栈序列为AB ...

  8. c语言堆栈基本代码入栈出栈_顺序栈基本操作(入栈和出栈)C语言详解

    顺序,即用{1,2,3,4},存储状态如 图 1 顺序表存储 {1,2,3,4} 同样,使用栈存储结构存储 {1,2,3,4},其存储状态如图 2 所示: 图 2 栈结构存储 {1,2,3,4} 通过 ...

  9. 宇宙最强语言PHP的“全栈”框架——Laravel来了!

    在动态网页发展前期,编写一个Web应用程序的方法和今天有很大不同. 开发人员不仅负责编写应用程序中独特的业务逻辑代码,还负责编写跨站点的各个公共组件的代码,包括用户认证.输入验证.数据库访问和模板等内 ...

最新文章

  1. 3D-HEVC视频编码技术
  2. python大佬养成计划----HTML网页设计一
  3. msg: ReferenceError: Can't find variable: urchinTracker
  4. 计算机网络学习笔记-02-标准化工作以及相关组织
  5. CUDA零拷贝内存(zerocopy memory)
  6. ubuntu16.04使用ipv6
  7. 浅谈Vue 中的 computed 和 methods 的使用
  8. Web项目实战(购物商城项目简单的实现)
  9. 《诗经》(全集) (2)
  10. 安德鲁1.2Ku使用感受
  11. 笔记本电脑里的微信文件数据误删了 如何恢复?
  12. echart水滴_用echarts实现水滴图效果
  13. 支付宝芝麻分701,花呗借呗额度提升明显,网友:三年没涨一分
  14. Python学习资源
  15. 使用cv2.VideoCapture()函数捕获笔记本内置摄像头的拍摄画面
  16. MOS管驱动电路隔离技术
  17. 阿里网盘内测 你申请了吗? 阿里网盘内测资格
  18. 提高晚上学习效率的10个方法
  19. 树莓派 摄像头安装配置
  20. 【调剂】2023年中国矿业大学全国硕士研究生招生考试拟接收调剂专业

热门文章

  1. 下一站,人到三十而立之年有感!
  2. 主动模式下FTP的详细工作过程
  3. pdf页眉页脚设置步骤
  4. ubuntu下make无法安装的问题
  5. 2017-2018-1 20179209《Linux内核原理与分析》第六周作业
  6. LeetCode-326. Power of Three
  7. Linux Socket函数手册(二)
  8. 【Windows Phone设计与用户体验】关于移动产品的Loading用户体验的思考
  9. RE管理器root explorer基础操作教程
  10. 修改notebook的默认路径_更改jupyter notebook默认存储路径