栈是一种数据结构,只允许在固定一端进行插入和删除功能,进行插入和删除的一端叫做栈顶,另一端叫做栈底,遵循后入先出的规则,就像穿烤串和吃烤串一样

其中,插入数据叫做进栈/压栈/入栈,数据插入在栈顶

对数据的删除叫做出栈

栈的实现

一般用链表或者数组来实现栈,但是由于对于数组来实现元素的插入和删除更加方便,所以用数组来实现栈

头文件

#include<stdio.h>
#include<assert.h>
#include<stdlib.h>typedef int SLdatetype;
typedef struct SLdate
{SLdatetype* a;int top;int capacity;
}SL;
//初始化
void SLinit(SL* s);//销毁
void SLdestory(SL* s);//插入元素
void SLpush(SL* s, SLdatetype x);//删除元素
void SLpop(SL* s);//头元素
SLdatetype SLtop(SL* s);//大小
int SLsize(SL* s);//是否为空
bool SLempty(SL* s);

源文件

#include"Stack.h"//初始化
void SLinit(SL* s)
{assert(s);s->a = NULL;s->capacity = s->top = 0;
}//销毁
void SLdestory(SL* s)
{assert(s);free(s->a);s->a = NULL;s->capacity = s->top = 0;
}//插入元素
void SLpush(SL* s, SLdatetype x)
{assert(s);if (s->capacity == s->top){int newcapacity = s->capacity == 0 ? 4 : 2 * s->capacity;SLdatetype* ptemp = (SLdatetype*)realloc(s->a, newcapacity * sizeof(SLdatetype));if (ptemp == NULL){perror("realloc fail");return;}s->a = ptemp;s->capacity = newcapacity;}s->a[s->top++] = x;
}//删除元素
void SLpop(SL* s)
{assert(s);s->top--;
}//顶层元素
SLdatetype SLtop(SL* s)
{assert(s);return s->a[s->top-1];
}//大小
int SLsize(SL* s)
{assert(s);return s->capacity;
}

测试文件

int main()
{SL sl;SLinit(&sl);SLpush(&sl, 1);SLpush(&sl, 2);SLpush(&sl, 3);while (!SLempty(&sl)){int top = SLtop(&sl);printf("%d", top);SLpop(&sl);}SLdestory(&sl);return 0;
}

运行效果

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

windows obdc配置

进入控制面板&#xff1a; 进入管理工具&#xff1a;

Java面经知识点汇总版

Java面经知识点汇总版 算法 14. 最长公共前缀&#xff08;写出来即可&#xff09; Java 计算机基础 数据库 基础 SQL SELECT first_name, last_name, salary FROM employees WHERE department Sales AND salary > (SELECT AVG(salary)FROM employeesWHERE department Sal…

鸿蒙开发小案例(名片管理))

鸿蒙开发小案例&#xff08;名片管理&#xff09; 1、页面效果1.1 初始页面1.2 点击名片展开1.3 点击收藏1.4 点击编辑按钮 2、实现代码2.1 DataModel.ets2.2 RandomUtil.ets2.3 ContactList.ets 1、页面效果 1.1 初始页面 1.2 点击名片展开 1.3 点击收藏 1.4 点击编辑按钮 2、…

Python 爬虫 tiktok关键词搜索用户数据信息 api接口

Tiktok APP API接口 Python 爬虫采集Tiktok数据 采集结果页面如下图&#xff1a; https://www.tiktok.com/search?qwwe&t1706679918408 请求API http://api.xxx.com/tt/search/user?keywordwwe&count10&offset0&tokentest 请求参数 返回示例 联系我们&…

网安加·百家讲坛 | 关昕健:新时代企业数据安全运营思路

作者简介&#xff1a;关昕健&#xff0c;某运营商安全专家&#xff0c;2015年获CISSP认证&#xff0c;长期负责企业安全运营工作&#xff0c;关注国内外数据安全动态与解决方案&#xff0c;持续开展数据安全运营实践。 近年来&#xff0c;随着《数据安全法》的出台和国家数据局…

PDA:Prompt-based Distribution Alignment for Unsupervised Domain Adaptation

文章汇总 式中&#xff0c; y s y^s ys表示源域数据的one-hot ground-truth&#xff0c; K K K为类数&#xff0c; w i w_i wi​和 z ~ s \tilde{z}_s z~s​分别表示源域经过提示调优的最终文本表示和最终图像表示的第 i i i类。 同理&#xff0c;为了进一步利用目标领域的数据…

Python 数据容器的对比

五类数据容器 列表&#xff0c;元组&#xff0c;字符串&#xff0c;集合&#xff0c;字典 是否能下标索引 支持&#xff1a;列表&#xff0c;元组&#xff0c;字符串 不支持&#xff1a;集合&#xff0c;字典 是否能放重复元素 是&#xff1a;列表&#xff0c;元组&#…

LeetCode42(接雨水)[三种解法:理解动态规划,双指针,单调栈]

接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 这是一道困难题,难度确实有点层次.我们先来朴素思想走一波. 要求能接多少雨水,我们可以具化到每个硅谷,每个硅谷能存多少雨水,那么答案就是每个…

全球AI算力革命:千卡异构芯片混训平台震撼发布

全球AI算力革命:千卡异构芯片混训平台震撼发布! 在2024年世界人工智能大会上,无问芯穹带来了一场技术盛宴——全球首个千卡规模异构芯片混训平台的发布。这一创举,无疑将AI算力资源的整合与利用推向了新的高度,为大模型训练提供了前所未有的强大支持。 1. 异构芯片的混…

Leetcode—97. 交错字符串【中等】

2024每日刷题&#xff08;140&#xff09; Leetcode—97. 交错字符串 2d动规实现代码 class Solution { public:bool isInterleave(string s1, string s2, string s3) {int m s1.length();int n s2.length();int len s3.length();if(m n ! len) {return false;}vector<…

Java-链表中倒数最后k个结点

题目&#xff1a; 输入一个长度为 n 的链表&#xff0c;设链表中的元素的值为 ai &#xff0c;返回该链表中倒数第k个节点。 如果该链表长度小于k&#xff0c;请返回一个长度为 0 的链表。 数据范围&#xff1a;0≤&#x1d45b;≤1050≤n≤105&#xff0c;0≤&#x1d44e;…

平安银行秋招攻略,考试内容详解

平安银行秋招简介 在众多的银行招聘中&#xff0c;平安银行的招聘难度相对较低&#xff0c;根据考生的反馈情况来看&#xff0c;仔细的进行准备&#xff0c;平安银行上岸并不是难题&#xff0c;那么平安银行的秋招何时开始&#xff1f; 平安银行的秋招开始时间相对较晚&#…

MySQL高级----InnoDB引擎

逻辑存储结构 表空间 表空间(ibd文件)&#xff0c;一个mysql实例可以对应多个表空间&#xff0c;用于存储记录、索引等数据。 段 段&#xff0c;分为数据段&#xff08;Leaf node segment)、索引段(Non-leaf node segment)、回滚段(Rollback segment)&#xff0c;InnoDB是…

一道题彻底搞懂Java类的加载顺序

源码 建议先给出自己的答案&#xff0c;不要复制然后去运行&#xff0c;这样就没有意义。出现错误也没有关系。 public class Main {private static int k 1;private static Main m1 new Main("m1");private static Main m2 new Main("m2");private s…

MyBatis的底层机制

手写MyBatis底层机制 读取配置文件&#xff0c;得到数据库连接 思路 引入必要的依赖需要写一个自己的config.xml文件&#xff0c;在里面配置一些信息&#xff0c;driver&#xff0c;url &#xff0c;password&#xff0c;username需要编写Configuration类&#xff0c;对 自己…

【Java探索之旅】多态:向上下转型、多态优缺点、构造函数陷阱

文章目录 &#x1f4d1;前言一、向上转型和向下转型1.1 向上转型1.2 向下转型 二、多态的优缺点2.1 多态优点2.2 多态缺陷 三、避免避免构造方法中调用重写的方法四、好的习惯&#x1f324;️全篇总结 &#x1f4d1;前言 在面向对象编程中&#xff0c;向上转型和向下转型是常用…

Docker-11☆ Docker Compose部署RuoYi-Cloud

一、环境准备 1.安装Docker 附:Docker-02-01☆ Docker在线下载安装与配置(linux) 2.安装Docker Compose 附:Docker-10☆ Docker Compose 二、源码下载 若依官网:RuoYi 若依官方网站 鼠标放到"源码地址"上,点击"RuoYi-Cloud 微服务版"。 跳转至G…

Splunk Enterprise 任意文件读取漏洞(CVE-2024-36991)

文章目录 前言漏洞描述影响版本漏洞复现POC批量检测-nuclei脚本 修复建议 前言 Splunk Enterprise 是一款强大的机器数据管理和分析平台&#xff0c;能够实时收集、索引、搜索、分析和可视化来自各种数据源的日志和数据&#xff0c;帮助企业提升运营效率、增强安全性和优化业务…

C++11右值引用及移动构造

区分左值和右值 在学习c11的右值引用前&#xff0c;大家肯定会有点陌生什么是右值&#xff1f;什么是左值&#xff1f;现在我先来带大家熟悉一下概念。 左值 可以被取地址&#xff0c;也可被修改&#xff08;const修饰的除外&#xff09; 可以出现在等号左边&#xff0c;也可…

软件架构之开发方法

软件架构之开发方法 第6章&#xff1a;开发方法6.1 软件生命周期6.2 软件开发模型6.2.1 瀑布模型6.2.2 演化模型6.2.3 螺旋模型6.2.4 增量模型6.2.5 构件组装模型 6.3 统一过程6.4 敏捷方法6.4.1 极限编程6.4.2 特征驱动开发6.4.3 Scrum6.4.4 水晶方法6.4.5 其他敏捷方法 6.5 软…