【普及】数据结构 - 栈(stack)

news/2025/1/29 6:23:43/文章来源:https://www.cnblogs.com/why-1017/p/18692774

1. 定义

堆栈又名栈($stack$),它是一种运算受限的线性表。

限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。

  • 向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;

  • 从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

2. 代码

(1) 数组模拟——速度更快

①定义
int a[N], head = 0, end = 0;	//定义一个整型栈,此时头指针与尾指针均指向0,代表该栈为空
//head 为栈底指针、end 为栈顶指针
②入栈
void push(int x){end ++;	//尾指针后移一位a[end] = x;	//将x入栈
}
③出栈
void pop(){end --;	//尾指针前移一位
}
④返回栈顶元素
int top(){return a[end];	//返回栈顶元素
}
⑤返回栈中元素个数(栈的长度)
int size(){return end - head;	//尾指针减头指针即为栈的长度
}
⑥判断栈是否为空
bool empty(){if(end == head)	return true;	//头指针和尾指针相等,该栈为空,返回 真/1/truereturn false;	//否则头指针和尾指针不相等,该栈不为空,返回 假/0/false
}
⑦遍历栈
int a[N], head = 0, end = 0;
for(int i = 1; i <= n; i ++){	//入栈int x;cin >> x;push(x);
}
while(!empty()){	//方案1.出栈cout << top();pop();
}
while(size()){	//方案2.出栈cout << top();pop();
}
⑧返回栈中第 $i$ 个元素(数组模拟特有功能)
int stack_i(int i){return a[i];	//数组模拟栈的优势在于可以通过数组下标,在 O(1) 的时间里,找到第 i 个元素
}

(2) $STL$模板

①定义
#include<stack>	//引用 stack 头文件
stack<int> a;	//定义一个整型栈
stack<string> s;	//定义一个字符串栈
stack<node> b;	//定义一个结构体栈
②入栈
a.push(x);
③出栈
a.pop();
④返回栈顶元素
int x = a.top();
⑤返回栈中元素个数(栈的长度)
int len = a.size();
⑥判断栈是否为空
bool b = a.empty();
⑦遍历栈
stack<int> a;
for (int i = 1; i <= n; i ++)	a.push(i);	//入栈
while(!a.empty()){	//方案1.出栈cout << a.top() << "\n";	//栈顶元素a.pop();
}
while(a.size()){	//方案2.出栈cout << a.top() << "\n";	//栈顶元素a.pop();
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

01. 初识Linux系统

一、什么是Ubuntu系统Ubuntu 操作系统是属于 Linux 操作系统中的一种,它是免费、稳定又可以拥有绚丽界面的一个操作系统。Linux,一般指 GNU/Linux(单独的 Linux 内核并不可直接使用,一般搭配 GNU 套件,故得此称呼),是一种免费使用和自由传播的类 UNIX 操作系统,其内核由…

学习elemetnPlus

学习了elementplus 学习了一个小时 其实就是查文档 做前端

20221320冯泰瑞-实验四密码模块应用实践过程记录

20221320冯泰瑞-实验四密码模块应用实践过程记录 实践要求完成电子公文交换系统,系统功能,(15 分)mindmaproot((电子公文系统))发文公文起草公文查看发文审核(审核员)公文发送公文查询收文公文签收公文查看公文处理公文查询系统管理组织单位用户管理操作员(科员)审核员…

android抓包相关操作指令

adb start-server adb connect 127.0.0.1:16384 adb rootadb shell su # 如果需要root权限mount -o remount,rw /systemadb push D:\\文档\\sixdu文档\\269953fb.0 /data/local/tmp adb push D:\\文档\\sixdu文档\\43b5e6bf.0 /data/local/tmpadb -s emulator-5554 push D:\\文…

四.1 Redis 五大数据类型/结构的详细说明/详细使用(List 列表数据类型详解和使用)

四.1 Redis 五大数据类型/结构的详细说明/详细使用(List 列表数据类型详解和使用) @目录四.1 Redis 五大数据类型/结构的详细说明/详细使用(List 列表数据类型详解和使用)2. list 列表常用指令(详细讲解说明)2.1 lpush/rpush <key><value1><value2>&l…

DeepSeek入门教程

一、简介 DeepSeek-V3 是一款高性能的开源 AI 模型,支持自然语言处理、智能对话生成等任务。其 API 接口与 OpenAI 完全兼容,用户可以通过简单的配置迁移现有项目,同时享受更低的成本和更高的性能。本文档将详细介绍如何快速接入 DeepSeek-V3 API 二、注册与API Key获取 1.注…

Archlinux 玩原神

首先你需要一台装载了archlinux的电脑,配置的话本人:Lenovo TianYi510S-07IMB Intel Core™ i5-10400 12 内存 8.0 GiB 磁盘 1 TB 玩的挺舒服的不会安装arch或者wine的看这里 然后本人是国际服Genshin Impact,国服同理(把下文的Genshin Impact当作yuanshen),参照官网安装…

C#/.NET/.NET Core技术前沿周刊 | 第 23 期(2025年1.20-1.26)

前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。欢迎投稿、推荐或自荐优质文章、项目、学习资源等…

JQuery实现轮播图

一、html代码<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title> </he…

e语言 超级编辑框

本文来自博客园,作者:__username,转载请注明原文链接:https://www.cnblogs.com/code3/p/18692666

clickhouse01 服务器选型, 安装(内核优化), mysql接口协议连接, DBeaver工具使用, 数据格式, 存储引擎, 用户管理

一:clickhouse 简介: https://clickhouse.com/docs/zh #什么是 clickhouse ClickHouse 是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。 1.1:clickhouse 简介:由俄罗斯的搜索公司 yandex 在 2016 年 6 月 15 日开源 操作和mysql很像 1.1.1:列式数据库与行式数据…

【Azure Logic App】使用MySQL 新增行触发器遇见错误 :“Unknowncolumncreated_atinorderclause”

Logic App MySQL Connector: Unknown column created_at in order clause问题描述 使用Azure Logic App服务,用于监控MySQL数据库的数据新增后,触发后续的逻辑处理操作。但是,当Workflow被触发Failed,并且无法执行Workflow中的动作。查看错误信息为 : Unknown column crea…