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

自己手写一个栈【C风格】

#include <iostream>
//栈
#define MAX_SIZE 20
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0typedef int Status;//状态类型
typedef int ElemType;//元素类型typedef struct SqStack
{ElemType data[MAX_SIZE];int top;
};//初始化,方法1
//SqStack* InitStack()
//{
//    SqStack *s = (SqStack*)malloc(sizeof(SqStack));
//    s->top = 0;
//    return s;
//}
//初始化,方法2
Status InitStack(SqStack** s)
{//栈上的指针分配在堆上的内存,**s表示取到栈上指针的地址,才可以修改外部指针*s = (SqStack*)malloc(sizeof(SqStack));if ((*s) == NULL)return ERROR;(*s)->top = 0;return OK;
}Status DestoryStack(SqStack* s)
{if (s != NULL){free(s);}return OK;
}
Status ClearStack(SqStack* s)
{s->top = 0;return OK;
}
Status StackEmpty(SqStack* s)
{if (s->top > 0)return ERROR;return TRUE;
}
Status Push(SqStack* s, ElemType e)
{if (s == NULL)return ERROR;if ((s->top) >= MAX_SIZE)return ERROR;s->data[s->top] = e;s->top++;return OK;
}
Status Pop(SqStack* s)
{if (s == NULL)return ERROR;if (s->top == 0)return ERROR;s->top--;
}
int StackLength(SqStack* s)
{if (s == NULL)return ERROR;return s->top;
}Status StackShow(SqStack* s)
{if(s == NULL)return ERROR;for (int i = 0; i < s->top; i++){printf("%d-->", s->data[i]);}printf("***全部显示完成!\n");return OK;
}int main()
{//方法一初始化// SqStack *s  = InitStack();//方法2初始化SqStack* s;InitStack(&s);if (s == NULL){printf("内存不足!");return -1;}for (int i = 0; i < 10; i++){Push(s, i);}StackShow(s);printf("删除5个元素:\n");Pop(s);Pop(s);Pop(s);Pop(s);Pop(s);StackShow(s);printf("是否为空:%d(1:是 0 :否)\n", StackEmpty(s));ClearStack(s);printf("清空后:\n");StackShow(s);printf("是否为空:%d(1:是 0 :否)\n", StackEmpty(s));DestoryStack(s);s = NULL;return 0;
}

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Qml:线程
  • 93.网络游戏逆向分析与漏洞攻防-游戏技能系统分析-增强技能信息显示后进行分析
  • Redis批量删除指定前缀的key
  • STM32H743的FDCAN使用方法(2):STM32CubeMX初始化代码修改
  • 判断变量是否为数组的几种方法
  • 音视频及H264/H256编码相关原理
  • 关于Broken pipe异常的一点学习记录
  • 【小沐学GIS】GDAL库安装和使用(C++、Python)
  • 没有括号的字符串四则运算
  • android 水平居中对齐并举例
  • wordpress教程视频 wordpress教程网盘 wordpress教程推荐wordpress教程网
  • ERC314协议
  • 3.每日LeetCode-爬楼梯(Go,Java,Python)
  • SpringCloud系列(23)--手写实现负载轮询算法
  • 使用paddlepaddle框架构建ViT用于CIFAR10图像分类
  • Docker容器管理
  • IDEA 插件开发入门教程
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • javascript 总结(常用工具类的封装)
  • java中的hashCode
  • js算法-归并排序(merge_sort)
  • Laravel 中的一个后期静态绑定
  • Linux Process Manage
  • log4j2输出到kafka
  • mysql常用命令汇总
  • PHP的Ev教程三(Periodic watcher)
  • React-redux的原理以及使用
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • vue2.0项目引入element-ui
  • webpack4 一点通
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 分布式熔断降级平台aegis
  • 前端学习笔记之观察者模式
  • 三栏布局总结
  • 学习ES6 变量的解构赋值
  • 学习JavaScript数据结构与算法 — 树
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • 函数计算新功能-----支持C#函数
  • 数据可视化之下发图实践
  • ​14:00面试,14:06就出来了,问的问题有点变态。。。
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • (2)空速传感器
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第6节 (嵌套的Finally代码块)
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (k8s)Kubernetes 从0到1容器编排之旅
  • (k8s中)docker netty OOM问题记录
  • (void) (_x == _y)的作用
  • (vue)el-tabs选中最后一项后更新数据后无法展开
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (力扣)循环队列的实现与详解(C语言)