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

数据结构——栈

       栈的理解

        咱们先不管栈的数据结构什么,先了解栈是什么,栈就像一个桶一样,你先放进去的东西,被后放进的的东西压着,那么就需要把后放进行的东西拿出才能拿出来先放进去的东西,如图1,就像图1中样子:

 图1

        图1中如果你需要拿书本1那么就要先将,书本432按照这个顺序拿出来,才能拿到书本1,如果拿书本4那么就可以直接拿到,这就是栈的一个性质,所以栈的专业名称就叫:FILO(first in last out),翻译后就是先进后出;

      栈的数据结构:

        物理结构:

        和队列一样,有一个存储数据的数据域,这里用的是数组,然后是一个栈顶指针,栈顶指针指向栈顶元素,还有栈的大小;

        用结构体封装后,代码实现如下:

        

typedef struct stack {//栈的结构定义int top, size;//分别是栈顶指针,栈的大小void *data;//数据域
} stack;

        逻辑结构:

        先进后出,后进先出,需要维护的性质,不能破坏这个性质;

      结构操作

        来看栈是如何对里面的数据如何出栈和入栈的;

        入栈:

        如图现在是栈的情况,里面有元素1234:

         

        现在对元素5进行入栈,top指针先往上偏移:

        

        然后元素5入栈:

         

         最后完成入栈;

         出栈:

         直接对于上面的完成入栈元素5的情况开始出栈,出栈元素4: 

         直接将指针,偏移两步,到指针指向元素3,然后元素5,元素4按照顺序出栈:

        最终元素4,5都出栈:

         

        看完了图片的展示,下面开始代码实现: 

        

#include <stdio.h>
#include <stdlib.h>
#include <time.h>typedef struct stack {//栈的结构定义int top, size;//分别是栈顶指针,栈的大小int *data;//数据域
} stack;stack *init(int n) {//向计算机借空间,然栈里面有空间可以存值stack *s = (stack *)malloc(sizeof(stack));s->data = (int *)malloc(sizeof(int) * n);s->top = -1;s->size = n;return s;
}int empty(stack *s) {//判短栈是否为空return s->top == -1;
}int top(stack *s) {//获取栈顶元素if (empty(s)) return -1;return s->data[s->top];
}int push(stack *s, int val) {//入栈元素if (s->top == s->size - 1) return 0;s->data[++(s->top)] = val;s->size++;return 1;
}int pop(stack *s) {//出栈元素if (empty(s)) return 0;s->top--;s->size--;return 1;
}void clear(stack *s) {//借了计算机的还回去if (!s) return ;free(s->data);free(s);return ;
}void output(stack *s) {//打印栈里的元素printf("stack(%d) = [", s->size);for (int i = s->top; i >= 0; i--) {i != s->top && printf(" ");printf("%d", s->data[i]);}printf("]\n");return ;
}int main() {//测试srand(time(0));stack *s = init(20);int op, val;for (int i = 0; i < 20; i++) {op = rand() % 4;val = rand() % 100;switch (op) {case 0:case 1:case 2: {printf("%d push in stack is %d\n", val, push(s, val));   } break;case 3: {int top_number = top(s);printf("%d pop in stack is %d\n", top_number, pop(s));} break;}output(s);}clear(s);return 0;
}

相关文章:

数据结构——栈

栈 栈的理解 咱们先不管栈的数据结构什么&#xff0c;先了解栈是什么&#xff0c;栈就像一个桶一样&#xff0c;你先放进去的东西&#xff0c;被后放进的的东西压着&#xff0c;那么就需要把后放进行的东西拿出才能拿出来先放进去的东西&#xff0c;如图1&#xff0c;就像图1中…...

组件化开发之如何封装组件-react

组件化开发之如何封装组件-react 什么是组件为什么需要封装组件组件的分类函数组件&#xff08;Functional Components&#xff09;&#xff1a;展示型组件&#xff1a;容器型组件&#xff1a;知道组件分类的意义是&#xff1f; 如何拆分组件&#xff0c;需要遵循什么原则1.保证…...

大数据HBase学习圣经:一本书实现HBase学习自由

学习目标&#xff1a;三栖合一架构师 本文是《大数据HBase学习圣经》 V1版本&#xff0c;是 《尼恩 大数据 面试宝典》姊妹篇。 这里特别说明一下&#xff1a;《尼恩 大数据 面试宝典》5个专题 PDF 自首次发布以来&#xff0c; 已经汇集了 好几百题&#xff0c;大量的大厂面试…...

Leetcode110. 平衡二叉树

力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a; 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 题解&#xff…...

Swift的NSClassFromString转换

在swift 中使用NSClassFromString 从string 转换到 对象&#xff0c;报了Segmentation fault: 11 错误。 let ctrlClass: AnyClass NSClassFromString("HomeViewController")! let ctrl: UIViewController ctrlClass.init() as UIViewController 正确的写法&…...

linux上vim编辑器设置

linux上vim编辑器设置 减少tab缩进、显示行号等 在vimrc&#xff08;一般在/etc/vim/vimrc中&#xff09;末尾添加 set helplangcn "中文帮助文档(前提是下了中文包) syntax enable syntax on " 自动语法高亮 set number"显示行号 colorscheme desert" 设…...

SpringCloudAlibaba OpenFeign整合及详解

SpringCloudAlibaba OpenFeign 在前面&#xff0c;我们使用Nacos服务注册发现后&#xff0c;服务远程调用可以使用RestTemplateRibbon或者OpenFeign调用。实际开发中很少使用RestTemplate这种方式进行调用服务&#xff0c;每次调用需要填写地址&#xff0c;还要配置各种的参数&…...

Mysql--技术文档--MVCC(Multi-Version Concurrency Control | 多版本并发控制)

MVCC到底是什么 MVCC&#xff08;Multi-Version Concurrency Control&#xff09;是一种并发控制机制&#xff0c;用于解决并发访问数据库时的数据一致性和隔离性问题。MVCC允许多个事务同时读取数据库的同一数据&#xff0c;而不会相互干扰或导致冲突。 在传统的并发控制机制中…...

全网都在用的nnUNet V2版本改进了啥,怎么安装?(一)

nnUNet&#xff0c;这个医学领域的分割巨无霸!在论文和比赛中随处可见他的身影。大家对于nnUNet v1版本的教程都赞不绝口&#xff0c;因为它简单易懂、详细全面&#xff0c;让很多朋友都轻松掌握了使用方法。 最近&#xff0c;我也抽出时间仔细研究了nnUNet v2&#xff0c;并全…...

iOS开发Swift-4-IBAction,group,音乐播放器-木琴App

1.使用素材创建木琴App的UI。 2.连接IBAction。 其余按钮直接拖拽到play里边。 当鼠标置于1处时2处显示如图&#xff0c;表示成功。当用户按下任一按钮都会触发play中的内容。 3.将7个按钮的View中的Tag值分别调为1、2、3、4、5、6、7. 4.将音频文件拖入项目文件中。 Create gr…...

【linux】pid 文件的作用ing

文章目录 一. pid文件简介1. pid 文件是什么2. 作用 二. pid文件的使用 一. pid文件简介 1. pid 文件是什么 打开系统(Linux) 的 “/var/run/” 目录可以看到有很多已 “.pid” 为结尾的文件&#xff0c;只有一行&#xff0c;它记录的是相应进程的 pid&#xff0c;即进程号。…...

K8s简介之什么是K8s

目录 1.概述 2.什么是容器引擎&#xff1f; 3.什么是容器 4.什么是容器编排&#xff1f; 5.容器编排工具 6.到底什么是K8s? 7.为什么市场推荐K8s 8.K8s架构 9.K8s组件 Pods API 服务器 调度器 控制器管理器 Etcd 节点 Kubelet Kube代理 Kubectl 1.概述 Kub…...

说说Flink双流join

分析&回答 Flink双流JOIN主要分为两大类 一类是基于原生State的Connect算子操作另一类是基于窗口的JOIN操作。其中基于窗口的JOIN可细分为window join和interval join两种。 基于原生State的Connect算子操作 实现原理&#xff1a;底层原理依赖Flink的State状态存储&…...

I2C与I3C的对比

I2C与I3C的对比 电气特性 I2C 1.半双工 2.串行数据线(SDA)和串行时钟线(SCL) 3.数据线漏极开路&#xff0c;即I2C接口接上拉电阻 4.I2C总线运行速度&#xff1a;**标准模式100kbit/s&#xff0c;快速模式400kbit/s&#xff0c;快速模式plus 1Mbit/s&#xff0c;**高速模式…...

睿趣科技:抖音开小店大概多久可以做起来

随着移动互联网的快速发展&#xff0c;社交媒体平台成为了人们分享生活、交流信息的主要渠道之一。在众多社交平台中&#xff0c;抖音以其独特的短视频形式和强大的用户粘性受到了广泛关注。近年来&#xff0c;越来越多的人通过在抖音上开设小店来实现创业梦想&#xff0c;这种…...

CCF-CSP 26次 第三题【角色授权】

计算机软件能力认证考试系统 20分&#xff1a; #include<bits/stdc.h> using namespace std; const int N440; int n,m,q,nv,no,nn,ns,ng; struct Node {string name;map<string,int>op;map<string,int>res_kind;map<string,int>res_name; }role[N];…...

Ansible学习笔记11

Command和Shell模块&#xff1a; 两个模块都是用于执行Linux命令的&#xff0c;这个对于命令熟悉的工程师来说&#xff0c;用起来非常high。 Shell模块跟Command模块差不多&#xff08;Command模块不能执行一类$HOME、> 、<、| 等符号&#xff0c;但是Shell是可以的。&…...

Vue中如何为Echarts统计图设置数据

在前端界面接收后端数据后&#xff0c;将数据赋值给ECharts中的data时出现了&#xff0c;数据读取失败的问题&#xff08;可能是由于数据渲染的前后顺序问题&#xff09;。后通过如下方式进行了解决&#xff1a; 1、接下来将介绍UserController中的countUsers方法&#xff0c;…...

力扣141. 环形链表

141. 环形链表 简单 2K 相关企业 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链…...

4.1 链式栈StackT

C关键词&#xff1a;内部类/模板类/头插 C自学精简教程 目录(必读) C数据结构与算法实现&#xff08;目录&#xff09; 栈的内存结构 空栈&#xff1a; 有一个元素的栈&#xff1a; 多个元素的栈&#xff1a; 成员函数说明 0 clear 清空栈 clear 函数负责将栈的对内存释放…...

AI赋能5G核心网故障诊断:从PCAP解析到智能根因分析的工程实践

1. 项目概述&#xff1a;当AI遇见5G核心网故障诊断在5G核心网的运维与测试一线干了这么多年&#xff0c;最头疼的莫过于面对海量的PCAP抓包文件。一个复杂的信令流程下来&#xff0c;动辄几千甚至上万个数据包&#xff0c;工程师需要像侦探一样&#xff0c;逐帧审视协议交互&am…...

告别拍脑袋规划!用ArcGIS做绿道选线:如何科学量化坡度、水域、道路成本并加权计算

科学规划绿道的ArcGIS高阶技法&#xff1a;从成本栅格构建到最优路径生成绿道规划从来不是简单的"两点之间直线最短"&#xff0c;而是需要综合考虑地形、生态、人文等多维因素的复杂决策过程。传统规划中常见的"拍脑袋"决策方式&#xff0c;往往导致建成后…...

51单片机驱动ST7735S彩屏避坑指南:从5秒刷屏到流畅贪吃蛇的优化实战

51单片机驱动ST7735S彩屏性能优化实战&#xff1a;从卡顿到流畅游戏的蜕变之路当一块128x160分辨率的ST7735S彩屏遇上传统的51单片机&#xff0c;这种组合看似矛盾却又充满挑战。许多开发者初次尝试时会发现&#xff0c;原本在STM32等平台上运行流畅的显示驱动&#xff0c;移植…...

ROS Noetic实战:从bag包里‘抠’出雷达点云和IMU数据的保姆级教程(Ubuntu 20.04)

ROS Noetic实战&#xff1a;从bag包里提取雷达点云和IMU数据的完整指南&#xff08;Ubuntu 20.04&#xff09;在机器人开发中&#xff0c;ROS bag文件就像是一个装满珍贵数据的宝箱&#xff0c;而雷达点云和IMU数据则是其中最闪亮的宝石。作为一名长期与ROS打交道的开发者&…...

‌2026智慧校园规划必读:如何在预算吃紧下选到高性价比方案‌

✅作者简介&#xff1a;合肥自友科技 &#x1f4cc;核心产品&#xff1a;智慧校园平台(包括教工管理、学工管理、教务管理、考务管理、后勤管理、德育管理、资产管理、公寓管理、实习管理、就业管理、离校管理、科研平台、档案管理、学生平台等26个子平台) 。公司所有人员均有多…...

使用TaotokenCLI工具一键配置开发环境中的API密钥

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 使用Taotoken CLI工具一键配置开发环境中的API密钥 在团队协作或个人开发中&#xff0c;为每个项目或成员手动配置大模型API密钥和…...

【DeepSeek集成测试黄金标准】:20年专家亲授5大避坑指南与自动化落地框架

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;DeepSeek集成测试黄金标准的演进与核心价值 集成测试在大语言模型工程化落地过程中已从“验证功能可用”跃迁为“保障推理一致性、上下文鲁棒性与安全边界的三位一体质量门禁”。DeepSeek系列模型&…...

基于KS距离度量交通流分布偏移:提升DRL交通信号控制鲁棒性的工程实践

1. 项目概述与核心挑战在智能交通系统&#xff08;ITS&#xff09;领域&#xff0c;基于深度强化学习&#xff08;DRL&#xff09;的交通信号控制&#xff08;Traffic Signal Control&#xff09;正从研究走向实际部署。作为一名长期关注AI落地应用的从业者&#xff0c;我见过太…...

京东自动购物终极指南:告别缺货烦恼,智能抢购神器

京东自动购物终极指南&#xff1a;告别缺货烦恼&#xff0c;智能抢购神器 【免费下载链接】Jd-Auto-Shopping 京东商品补货监控及自动下单 项目地址: https://gitcode.com/gh_mirrors/jd/Jd-Auto-Shopping 还在为心仪商品瞬间售罄而苦恼吗&#xff1f;还在熬夜等待补货却…...

避坑指南:Unity动态加载模型时,TriLib插件材质丢失、缩放异常的5个常见问题解决

Unity动态加载模型避坑指南&#xff1a;TriLib插件材质丢失与缩放异常的深度解决方案当你在Unity项目中尝试使用TriLib插件动态加载外部模型时&#xff0c;是否遇到过这些令人抓狂的情况&#xff1a;模型加载后材质全部变成刺眼的粉红色&#xff0c;贴图神秘消失&#xff0c;或…...