链栈的基本操作

2023-11-05

#define _CRT_SECURE_NO_WARNINGS//链栈
#include <stdio.h>
#include <malloc.h>

//全局定义特殊变量
#define ok 1

//转定义区域
typedef char SElemType;
typedef int status;


typedef struct StackNode//定义栈
{
	SElemType data;
	struct StackNode* next;

}StackNode,*LinkStack;

void Interrupt()//中断函数 
{
	while (1) //用于检测换行符,使函数脱离scanf的连续输出 
		if (getchar() == '\n')
			break;
}

status InitStack(LinkStack&S)//链栈初始化
{
	S = NULL;
	return ok;
}

void Packfun1(LinkStack& S)
{
	int i;
	i = InitStack(S);
	if (i = 1)
	{
		printf("初始化成功!");
	}
	else
	{
		printf("初始化失败!");
	}
}

void  StackEmpty(LinkStack S)//判断栈是否为空
{
	if (S)
	{
		printf("非空栈\n");
	}
	else
	{
		printf("空栈\n");
	}
}

status push(LinkStack &S, SElemType e)//入栈操作
{
	StackNode* p;
	p = (StackNode*)malloc(sizeof(StackNode));
	p->data = e;
	p->next = S;
	S = p;
	return ok;

}

void Packfun2(LinkStack& S)
{
	int i;
	SElemType e;
	printf("请输入要入栈的值:");
	Interrupt();
	scanf("%c", &e);
	i = push(S, e);
	if (i = 1)
	{
		printf("入栈成功!");
	}
	else
	{
		printf("入栈失败!");
	}
}

status pop(LinkStack& S, SElemType &e)//出栈的操作
{
	StackNode* p;
	if (!S)
	{
		return 0;
	}
	e = S->data;
	p = S;
	S = S->next;
	free(p);
	return ok;
}

void Packfun3(LinkStack& S)//一直出栈
{
	SElemType e;
	printf("出栈的顺序为:\n");
	while (S)
	{
		pop(S, e);
		printf("%c\n", e);
	}
}

void DestroyStack(LinkStack& S)//销毁栈
{
	StackNode* p = S;
	while (S)
	{
		S = S->next;
		free(p);
		p = S;
	}
	free(S);
	printf("栈已销毁!");
}

void StackTraverse(LinkStack& S)//输出所有栈的内容
{
	StackEmpty(S);
	StackNode* p = S;
	while (!p)
	{
		printf("%c\n", p->data);
		p = p->next;
	}
}

int main()
{
	int a, f = 0, i = 0;
	LinkStack S=NULL;
    while (1)
	{
		printf("\n");
		printf("================================\n");
		printf("|        链栈的操作系统      |\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):");
	mark:scanf("%d", &a);
		switch (a)
		{
		case 0:f = 1; break;
		case 1: Packfun1(S); break;
		case 2: StackEmpty(S); break;
		case 3: Packfun2(S); break;
		case 4:Packfun3(S); break;
		case 5: DestroyStack(S); break;
		default:printf("选择功能错误!请重新选择菜单功能:"); goto mark;
		}
		if (f == 1)
		{
			printf("已经退出系统");
			break;//该break是为了退出while的无限“菜单”循环
		}
	}
}

使用的编译环境是vs2019,源文件后缀是.cpp

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

链栈的基本操作 的相关文章

  • 神兵利器

    声明 该公众号大部分文章来自作者日常学习笔记 也有部分文章是经过作者授权和其他公众号白名单转载 未经授权 严禁转载 如需转载 联系开白 请勿利用文章内的相关技术从事非法测试 如因此产生的一切不良后果与文章作者和本公众号无关 现在只对常读和星
  • WebRTC建立会话流程分析

    WebRTC建立会话流程总结 了解如何运行PeerConnection Demo后 熟悉运行流程可以做为深入学习WebRTC的切入点 本节重点解释客户端双方建立会话时交互的主要信令 控制会话的文本协议 和与信令相关的 WebRTC API
  • node-sass报错

    我们安装vue项目时 经常遇到nade sass报错 然后切换到某个node版本后不再报错 原因见下文 一 报错内容 二 保存原因 本地nodejs版本跟安装的node sass版本不一致 三 解决办法 1 查看本地node版本 node
  • 使用书签修改视频播放速度(javascript:)

    增加书签 网址输入以下内容 javascript document querySelector video playbackRate 2 0 2 0是2倍速 根据需要自行修改速度 使用方法 打开视频后 点一下书签即可修改视频速度 如果没有改

随机推荐

  • 如何提高训练模型准确率

    8个经过证实的方法 提高机器学习模型的准确率 摘要 本文分享了 8 个经过证实的方法 这些方法用来改善模型的预测表现 它们广为人知 但不一定要按照文中的顺序逐个使用 导语 提升一个模型的表现有时很困难 如果你们曾经纠结于相似的问题 那我相信
  • Android开发指南!2021中级Android开发面试解答,完整版开放下载

    Google 为了帮助 Android 开发者更快更好地开发 App 推出了一系列组件 这些组件被打包成了一个整体 称作 Android Jetpack 它包含的组件如下图所示 老的 support 包被整合进了 Jetpack 例如上图
  • 混合策略纳什均衡——附例题及解析

    目录 引入 混合纳什均衡 例题 求法 引入 假设这样一种对局 甲乙两人抽扑克牌 扑克牌只有两种花色 红和黑 两张牌花色相同算甲胜 反之乙胜 那么甲乙双方应该如何设定自己抽出不同花色的概率呢 比如 设甲抽红牌的概率P 60 那么黑牌概率就是1
  • [架构之路-204]- 常见的需求分析技术:结构化分析与面向对象分析

    目录 前言 1 1 3 需求分析概述 导言 11 3 1需求分析的任务 1 绘制系统上下文范围关系图 2 创建用户界面原型 3 分析需求的可行性 4 确定需求的优先级 5 为需求建立模型 最难的一项任务 SA and OOA 6 创建数据字
  • EMI滤波器设计概念

    EMI滤波器设计概念 1 1 基本概念 在开关电源的设计里 为了对策传导干扰大都会在输入端前端加入EMI滤波器 因传导测试是由AC端来做量测 因此滤波器愈靠近接收器效果愈好 让所有的干扰都可经由滤波器做衰减 而一般滤波器是经由电感与电容组合
  • AMR文件格式的解释

    一 什么是AMR AMR WB 全称Adaptive Multi Rate和Adaptive Multi Rate Wideband 主要用于移动设备的音频 压缩比比较大 但相对其他的压缩格式质量比较差 由于多用于人声 通话 效果还是很不错
  • docker swarm 集群构建及服务管理

    文章目录 一 集群构建及部分配置 1 环境准备 2 swarm 初始化 3 worker子节点加入 4 查看集群信息 1 查看 swarm 集群节点 2 查看各节点 swarm 信息 5 swarm 证书配置 二 集群服务管理 1 创建集群
  • elasticsearch8.2 http开启鉴权

    Elasticsearch 早期的版本配置鉴权 由于插件收费 所以配置起来比较麻烦 但是最近发现Elasticsearch的8 2版本中可以配置https及鉴权的操作 所以记录一下给想要获取该知识的人 分享一下 第一步 修改elastics
  • java导入自定义类_java如何引入自己定义的类,即import语句该如何写?

    我写了2个java的小程序Time java和MyTime java 其内容分别如下 Time java 文件的内容publicclassTime privateinthour privateintminute privateintseco
  • 怎样做自媒体视频剪辑赚钱?

    不想真人出镜 但是想做自媒体赚钱 除了发布图文作品和音频作品外 我们还可以做视频剪辑发布到自媒体平台上 简单的说就是剪辑一些现有的视频作品 重新剪辑成一个新的作品并发布到自媒体平台上获得收益 不说多了 每天收益100 200还是不难的 新手
  • 函数指针做函数参数

    什么是函数指针 当我们定义一个函数的时候 编译器会为这个函数分配一段内存空间 而这段内存空间的首地址就是函数指针 函数指针的定义 函数返回值类型 指针变量名 函数参数列表 int p int int 这个语句就定义了一个指向函数的指针变量
  • python uiautomation mac os_(selenium+python)_UI自动化01_Mac下selenium环境搭建

    前言 Selenium是一个用于Web网页UI自动化测试的开源框架 可以驱动浏览器模拟用户操作 支持多种平台 Windows Mac OS Linux 和多种浏览器 IE Firefox Chrome Safari 可以用多种语言 Java
  • java new file会创建文件吗_Java高级——文件与I/O流

    简介 本文分为四个部分 首先是介绍File类 概括了一下概念 构造方法及常用方法等 其次是描述了面对对象的三大特征 再次是对抽象类进行了简单的概述 最后从特性 使用等等几个方面对接口进行了一定的描述 一 File类 1 File类概念 1
  • STM32F103系列控制的OLED IIC 4针

    最近在研究四针的OLED 先上个效果图 总工程文件评论区留下邮箱我会发送 硬件部分 有开发板的直接用开发板就好 没有的去某宝买一块STM32F103C8T6 10元左右 类似这种 接线部分 OLED一共有四个接口 本别是SCL 时钟 SDA
  • Qt-OpenCV学习笔记--高级形态转换--morphologyEx()

    概述 OpenCV提供了一个综合的形态转换工具 morphologyEx 集成了腐蚀运算 膨胀运算 开运算 闭运算 梯度运算 顶帽运算 黑帽运算 函数 void cv morphologyEx InputArray src OutputAr
  • 【云原生--Kubernetes】Helm 工具安装

    文章目录 一 Helm 概述 1 1 Helm 简介 1 2 Helm重要概念 1 3Helm2 组件 1 4Helm2 工作原理 1 5 Helm2与Helm3区别 二 Helm部署 三 Helm常用命令 3 1 chart仓库管理 3
  • 记5.28大促压测的性能优化—线程池相关问题

    目录 1 环境介绍 2 症状 3 诊断 4 结论 5 解决 6 对比java实现 废话就不多说了 本文分享下博主在5 28大促压测期间解决的一个性能问题 觉得这个还是比较有意思的 值得总结拿出来分享下 博主所服务的部门是作为公共业务平台 公
  • 【100天精通python】Day8:数据结构_元组Tuple的创建、删除、访问、修改、推导系列操作

    目录 1 创建元组 2 删除元组 3 访问元组元素 4 多个值的同时赋值和交换 5 修改元组元素 6 元组推导式 7 元组运算符 8 元组常用场景 9 元组 Tuple 和列表 List 的区别 元组 tuple 是 Python 中的一种
  • mysql创建表

    http www cnblogs com yunf archive 2011 04 20 2022193 html 说明 此文件包含了blog数据库中建立所有的表的Mysql语句 在sql语句中注意 约束的概念 1 实体完整性约束 主键 唯
  • 链栈的基本操作

    define CRT SECURE NO WARNINGS 链栈 include