数据结构-顺序栈

栈:是一种特殊的线性表,其只允许在表尾进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。

压栈:栈的插入操作叫做进栈 / 压栈 / 入栈,入数据在栈顶。

出栈:栈的删除操作叫做出栈。出数据也在栈顶。

 

 顺序栈结构体定义

typedef struct
{
	int data[MAX_SIZE];//数组顺序栈
	int top;//栈顶指针
}seqstack_t;//顺序栈的结构体

顺序栈初始化

//顺序栈的初始化
seqstack_t* seqstack_init()
{
	seqstack_t* s = (seqstack_t*)malloc(sizeof(seqstack_t));//申请一块顺序栈大小的内存
	memset(s->data,0,sizeof(s->data));
	s->top = -1;//栈顶指针
	return s;
}

 判断栈是否已满

//判断栈是否已满
int stack_isfull(seqstack_t* s)
{
	return(s->top == MAX_SIZE - 1);//如果栈顶指针等于最大长度减一 那说明栈顶指针就到了最大的位置
}

判断栈是否已空

int stack_isempty(seqstack_t* s)
{
	return (s->top == -1);//当top等于-1时说明栈里面没有元素
}

入栈

//入栈
int stack_push(seqstack_t* s, int data)
{
	if (stack_isfull(s))
	{
		printf("栈已满\n");
		return -1;
	}
	s->top++;//栈顶指针加一
	s->data[s->top] = data;
	return 0;
}

出栈

//出栈
int stack_pop(seqstack_t* s)
{
	int value;
	if (stack_isempty(s))
	{
		printf("栈已空");
		return -1;
	}
	value = s->data[s->top];
	s->top--;
	return value;
}

测试

int main()
{
	seqstack_t* S = seqstack_init();
	printf("入栈");
	for (int i = 1; i < 5; i++)
	{
		printf("%d", i);
		stack_push(S,i);
	}
	printf("\n");
	printf("出栈");
	while (!stack_isempty(S))
	{
		int value = stack_pop(S);
		printf("%d", value);
	}
	return 0;
}

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/896186.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

nvm实现node多版本管理

在项目中是否遇到vue2和vue3项目同时要启动&#xff0c;而又得频繁去安装卸载node版本的困扰&#xff1f; Node Version Manager (nvm) 是一个用于管理多个 Node.js 版本的工具&#xff0c;它允许你在同一台机器上安装和切换不同版本的 Node.js&#xff0c;非常适合开发者在不…

Ubuntu22.04中安装英伟达驱动并部署Pytorch深度学习环境

安装英伟达驱动 本文基于windows10ubuntu22.04双系统&#xff0c;给ubuntu22.04安装英伟达驱动。 安装依赖。 sudo apt update # 获取最新的软件包信息 sudo apt upgrade # 升级软件包 sudo apt install g sudo apt install gcc sudo apt install make禁用ubuntu默认驱动Nouv…

Crawler4j在多线程网页抓取中的应用

网页爬虫作为获取网络数据的重要工具&#xff0c;其效率和性能直接影响到数据获取的速度和质量。Crawler4j作为一个强大的Java库&#xff0c;专门用于网页爬取&#xff0c;提供了丰富的功能来帮助开发者高效地抓取网页内容。本文将探讨如何利用Crawler4j进行多线程网页抓取&…

RHCE的学习(3)

第三章 远程登录服务 简介 概念 远程连接服务器通过文字或图形接口方式来远程登录系统&#xff0c;让你在远程终端前登录linux主机以取得可操作主机接口&#xff08;shell&#xff09;&#xff0c;而登录后的操作感觉就像是坐在系统前面一样 功能: 分享主机的运算能力 服务…

京存助力北京某电力研究所数据采集

北京某电力研究所已建成了一套以光纤为主&#xff0c;卫星、载波、微波等多种通信方式共存&#xff0c;分层级的电力专用的网络通信架构体系。随着用电、配电对网络的要求提高&#xff0c;以及终端通信入网的迅速发展&#xff0c;迫切地需要高效的通信管理系统来应对大规模、复…

Java项目-基于springboot框架的校园在线拍卖系统项目实战(附源码+文档)

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 开发运行环境 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBoot、Vue、Mybaits Plus、ELementUI工具&#xff1a;IDEA/…

ubuntu 虚拟机将linux文件夹映射为windows网络位置

在使用虚拟机时可以选择将windows的文件夹设置为共享文件夹方便在虚拟机中访问windows中的文件,同理,也可以将linux的文件夹共享为一个网络文件夹,通过windows的添加一个网络位置功能,将linux的文件夹映射到windows本地,方便windows访问使用linux的文件夹 参照如下:https://blo…

ThingsBoard 规则链节点:Create Alarm节点详解

引言 用法和含义 主要功能 配置步骤 使用场景 实际项目中的应用案例 案例1&#xff1a;智能温室管理系统 案例2&#xff1a;工厂设备监控系统 总结 引言 ThingsBoard 是一个开源的物联网平台&#xff0c;它提供了设备管理、数据收集、处理和可视化等功能。规则链是 Thi…

私域电商新纪元:消费增值模式引领业绩飞跃

朋友们&#xff0c;你们好&#xff01;我是吴军&#xff0c;热衷于引领各位深入发掘私域电商领域的独特魅力及其隐藏的机遇。 今日&#xff0c;我想讲述一个激励人心的真实案例。就在过去的一个月里&#xff0c;我们的合作伙伴取得了惊人的业绩突破&#xff0c;销售额一举跨越…

雷池WAF自动化实现安全运营实操案例终极篇

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…

队列(数据结构)——C语言

目录 1.概念与结构 2.队列的实现 初始化QueueInit 申请新节点BuyNode 入队QueuePush 判断队为空QueueEmpty 出队QueuePop 读取队头数据QueueFront 读取队尾数据QueueBack 元素个数QueueSize 销毁队列QueueDestroy 3.整体代码 (文章中结点和节点是同一个意思) 1.概…

15. 软件接口

文章目录 第15章 软件接口15.1接口的概念多个接口操作、事件和属性接口演进 15.2 设计接口接口的范围交互方式交换数据的表示形式和结构可扩展标记语言&#xff08;XML&#xff09;JavaScript 对象表示法&#xff08;JSON&#xff09;Protocol Buffers 错误处理 15.3 接口文档…

200元运动蓝牙耳机有哪些?爆款测评PK力荐!

在运动场景下&#xff0c;传统的入耳式和半入耳式耳机虽然占据了大部分市场&#xff0c;但并不适合所有人&#xff0c;尤其是在长时间运动中佩戴时&#xff0c;耳道的压迫感往往会导致不适。而骨传导耳机虽然通过不塞入耳道的方式改善了佩戴舒适度&#xff0c;但在音质方面与入…

[openvino]windows上配置C++openvino后测试代码

测试环境&#xff1a; vs2022 w_openvino_toolkit_windows_2024.3.0.16041.1e3b88e4e3f_x86_64.zip 代码&#xff1a; #include <iostream>#include <openvino/openvino.hpp>int main(int, char**){// -------- Get OpenVINO runtime version --------std::cou…

UG NX12.0建模入门笔记:1.2 鼠标的基本操作

文章目录 前言&#xff1a;鼠标的操作1.鼠标左键&#xff1a;单击—>单选&#xff1b;长按并滑动—>框选。2.鼠标右键&#xff1a;在不同的地方单击弹出不同的菜单。3.鼠标中键&#xff1a;滚动中键—>放大缩小【镜头拉近拉远】。4.鼠标中键&#xff1a;摁住鼠标中键&…

微信小程序考试系统(lw+演示+源码+运行)

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了微信小程序考试系统的开发全过程。通过分析微信小程序考试系统管理的不足&#xff0c;创建了一个计算机管理微信小程序考试系统的方案。文章介绍了微信小程序考…

鸿蒙开发:什么是ArkTS语言

ArkTS(也称为Ark TypeScript)是HarmonyOS的主力应用开发语言。面向万物互联时代&#xff0c;华为提出了“一次开发多端部署、可分可合自由流转、统一生态原生智能”三大应用与服务开发理念。针对多设备、多入口、服务可分可合等特性&#xff0c;华为提供了多种能力协助开发者降…

从0开始Linux(14)——进程(5)进程空间地址(2)

欢迎来到博主的专栏&#xff1a;从0开始linux 博主ID:代码小豪 文章目录 关于页表程序权限加载状态 可执行程序分段 关于页表 在前一篇博客中博主提到&#xff0c;页表是链接虚拟地址(mm_struct)和物理地址&#xff08;存储器&#xff09;的中间商&#xff0c;其主要作用是映射…

Jmeter之GET与POST 请求的参数存放位置

根据不用的请求方式&#xff0c;参数的设置详细如下&#xff0c;二选一&#xff0c;否则报错 POST请求 GET请求

VMware中安装配置Ubuntu(2024最新版 超详细)

目录 一、安装虚拟机软件 二、VMware虚拟机 三、 Ubuntu 下载 &#xff08;1&#xff09;官网下载 &#xff08;2&#xff09;清华镜像网站下载 四、创建虚拟机 五、Ubuntu 系统安装过程的配置 六、更换国内镜像源 七、环境搭建完毕 全篇较长&#xff0c;请慢慢观看 一…