数据结构——栈(顺序结构)

一、栈的定义

栈是一种数据结构,它是一种只能在一端进行插入和删除操作的特殊线性表。这一端被称为栈顶,另一端被称为栈底。栈按照后进先出(LIFO)的原则进行操作(类似与手枪装弹后射出子弹的顺序)。在计算机科学中,栈被广泛应用于函数调用、表达式求值、内存管理等方面。

二、栈的结构

 栈(stack)是限定仅在表尾进行插入和删除操作的线性表。
 我们把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何数据元素的栈称为空栈。栈又称为后进先出(Last In First Out)的线性表,简称LIFO结构。

 栈的插入操作,叫作进栈,也称压栈、入栈(PUSH)。
 栈的删除操作,叫作出栈,也有的叫作弹栈。(POP)。

三、栈的基本操作(顺序表)

顺序存储结构思路较为单一,相较于链式存储结构操作较为简单,不过在存在两个缺陷:

一是出栈和进栈(越靠近栈底,要移动的元素越多)操作更复杂。

二是栈的容量是固定的,不能超过栈顶。

1、栈的结构定义

typedef int SElemType;//SElemType类型依据实际情况而定,这里假设为 int
typedef struct{SElemType data[MAXSIZE];int top;//标记栈顶
}SqStack;

2、初始化栈

void StackInit(SqStack *s)
{s->top = -1;//空栈时top = -1;
}

3、进栈操作

int StackPush(SqStack *s,SElemType i)
{if(s->top == MAXSIZE-1){return ERROR;}s->top++;s->data[s->top] = i;return OK;
}

4、出栈操作

*出栈操作:返回出栈元素*/
//出栈操作无法直接删除中间元素,要按顺序从栈顶元素开始删除
int StackPop(SqStack *s,SElemType i)
{if(s->top == -1){return ERROR;}i = s->data[s->top];s->top--;return i;
}

5、打印所有栈元素

/*打印所有栈元素*/
void StackElem(SqStack *s)
{printf("所有栈元素如下:");while(s->top != -1){printf("%d ",s->data[s->top]);s->top--;}printf("\n");
}

 6、获取栈元素

/*获取栈元素*/
SElemType StackGetElem(SqStack *s,int i)
{if(i > MAXSIZE-1 || s->top == -1){return ERROR;}return s->data[i];
}

四、案例示例

代码示例:

#include "stack.h"
#define MAXSIZE 10int main()
{printf("依次输入栈元素:");int k[MAXSIZE] = {};SqStack Slist;StackInit(&Slist);for(int i = 0;i < MAXSIZE;i++){scanf("%d",&k[i]);}for(int i = 0;i < MAXSIZE;i++){StackPush(&Slist,k[i]);}printf("输入的第二个元素:%d\n",StackGetElem(&Slist,1));StackElem(&Slist);return 0;
}

运行结果:

 五、顺序存储结构的优缺点

顺序存储结构: 优点:实现简单,易于理解和实现;不涉及指针操作,节省存储空间;随机存取方便,时间复杂度为O(1)。 缺点:容量固定,不易动态扩展;插入和删除操作需要移动元素,时间复杂度为O(n)。

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

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

相关文章

【51项目】基于51单片机protues交通灯的设计(完整资料源码)

基于51单片机protues交通灯的设计 一、 项目背景 1.1背景 随着科技的不断发展,LED技术在交通领域的应用越来越广泛。LED模拟交通灯作为一种新型的交通信号控制设备,以其高效、节能、环保等优点,逐渐取代了传统的交通信号灯。近年来,我国城市化进程不断加快,城市人口和车辆…

iOS应用冷启动优化,可以做哪些事情

main()函数之后 首屏渲染不需要的&#xff0c;在首屏渲染完成后&#xff0c;异步执行&#xff1b;首屏渲染必要的&#xff0c;梳理依赖关系&#xff0c;生成启动树&#xff08;startTree&#xff09;&#xff0c;调用 root 节点的 start 方法&#xff0c;依次执行各个节点&…

服务攻防-应用协议cve

Cve-2015-3306 背景&#xff1a; ProFTPD 1.3.5中的mod_copy模块允许远程攻击者通过站点cpfr和site cpto命令读取和写入任意文件。 任何未经身份验证的客户端都可以利用这些命令将文件从文件系统的任何部分复制到选定的目标。 复制命令使用ProFTPD服务的权限执行&#xff0c;…

qt-C++笔记之json文件内容操作完整例程

qt-C笔记之json文件内容操作完整例程 code review! 文章目录 qt-C笔记之json文件内容操作完整例程1.运行输出2.运行后的test.json文件内容3.main.cpp 1.运行输出 读取到的 JSON 对象: {"Array": ["Item1","Item2"],"Name": "Ex…

掌握Xcode后台处理的艺术:iOS应用的隐形力量

掌握Xcode后台处理的艺术&#xff1a;iOS应用的隐形力量 在iOS应用开发中&#xff0c;后台处理能力是提升用户体验的关键因素之一。无论是在后台下载数据、播放音乐&#xff0c;还是在后台完成长时间运行的任务&#xff0c;Xcode都提供了强大的工具和API来支持这些操作。本文将…

jvm-证明cpu指令是乱序执行的案例

package jvm;/*** 证明cpu指令是乱序执行的** author 1* version 1.0* description: TODO* date 2024-07-19 9:31*/ public class T04_Disorder {private static int x 0, y 0;private static int a 0, b 0;public static void main(String[] args) throws InterruptedExcep…

B树:高效的数据存储结构

在计算机科学中&#xff0c;B树&#xff08;B-Tree&#xff09;是一种平衡多路查找树&#xff0c;它广泛应用于数据库和文件系统等需要高效数据存储和检索的场景。B树的设计旨在优化磁盘I/O操作&#xff0c;通过减少磁盘访问次数来提高数据检索的效率。本文将介绍B树的基本概念…

配置web服务器

当访问网站www.haha.com时显示&#xff1a;haha&#xff1b;当访问网站www.xixi.com/secret/显示&#xff1a;this is secret 第一步&#xff0c;配置一个新的IP 确认后 esc返回 第二步&#xff1a;重启ens160 第三步&#xff1a;创建目录&#xff0c;并且在文件内写入内容 第…

Python中with 关键字、tell() 和 seek() 方法

在 Python 编程中&#xff0c;文件操作是常见的任务之一。无论是读取数据还是写入数据&#xff0c;都需要对文件进行适当的管理和操作。本文将介绍如何使用 with 关键字来简化文件操作&#xff0c;并结合 tell() 和 seek() 方法实现灵活的文件指针控制。 with 关键字&#xff…

【b站/哔哩哔哩/bilibili】视频缓冲慢的解决方法

最近我的b站视频缓冲很慢&#xff0c;加载速度只有100多kb/s。这导致视频加载非常慢&#xff0c;看几秒就卡很久&#xff0c;有时候甚至黑屏。 据某些b站网友研究&#xff0c;b站存在如下问题&#xff1a;相关动态 “2.更改网络协议。是的&#xff0c;你没看错&#xff0c;转了…

RabbitMQ是什么?

RabbitMQ是一个开源的消息代理软件&#xff08;Message Broker&#xff09;&#xff0c;它实现了高级消息队列协议&#xff08;AMQP&#xff0c;Advanced Message Queuing Protocol&#xff09;&#xff0c;并支持多种消息传递协议。它最初由英国的Rabbit Technologies开发&…

力扣题解(盈利计划)

879. 盈利计划 集团里有 n 名员工&#xff0c;他们可以完成各种各样的工作创造利润。 第 i 种工作会产生 profit[i] 的利润&#xff0c;它要求 group[i] 名成员共同参与。如果成员参与了其中一项工作&#xff0c;就不能参与另一项工作。 工作的任何至少产生 minProfit 利润的…

Unity UGUI 之 Toggle

​本文仅作学习笔记与交流&#xff0c;不作任何商业用途本文包括但不限于unity官方手册&#xff0c;唐老狮&#xff0c;麦扣教程知识&#xff0c;引用会标记&#xff0c;如有不足还请斧正​ 1.什么是Toggle&#xff1f; Unity - Manual: Toggle 带复选框的开关&#xff0c;可…

等保测评的未来展望:智能化、自动化与合规性的深度融合

随着信息技术的飞速发展&#xff0c;网络安全威胁日益复杂多变&#xff0c;保障信息系统安全成为各行各业不可忽视的重要任务。等级保护&#xff08;简称“等保”&#xff09;作为国家信息安全保障的基本制度&#xff0c;对于提升我国关键信息基础设施的安全防护能力具有重要意…

【Unity】Android Failed to transform Error while dexing.

文章目录 一、背景二、问题描述三、原因和解决方法 一、背景 1、Unity 2021.3.33f1 2、Firebase 11.7.0 3、升级至API-34 二、问题描述 错误信息 Failed to transform play-services-measurement-api-21.5.0.aar (com.google.android.gms:play-services-measurement-api:21.5.…

算法力扣刷题记录 五十六【501.二叉搜索树中的众数】

前言 二叉搜索树操作&#xff0c;继续。 记录 五十六【501.二叉搜索树中的众数】 一、题目阅读 给你一个含重复值的二叉搜索树&#xff08;BST&#xff09;的根节点 root &#xff0c;找出并返回 BST 中的所有 众数&#xff08;即&#xff0c;出现频率最高的元素&#xff09;…

【Socket编程】基于TCP协议实现客户端与服务端的通信

前言 由于TCP是面向连接的&#xff0c;所以在创建套接字之后还需要进入监听状态&#xff0c;监听状态下可以获取客户端的请求。获得请求之后&#xff0c;服务器需要接受连接&#xff0c;之后再处理事务。 实现服务端具体步骤 总的来说&#xff0c;TCP服务端主要实现以下步骤…

达梦数据库的系统视图v$dmwatcher

达梦数据库的系统视图v$dmwatcher 查询当前登录实例所对应的守护进程信息&#xff0c;注意一个守护进程可以同时守护多个组的实例&#xff0c;因此查询结果中部分字段&#xff08;N_GROUP、SWITCH_COUNT&#xff09;为守护进程的全局信息&#xff0c;并不是当前登录实例自身的…

0401-403组合逻辑电路的分析设计竞争冒险

组合逻辑电路的分析设计&竞争冒险 4.组合逻辑电路1.目录2.教学基本要求3.序 关于组合逻辑电路 4.1组合逻辑电路分析与设计一、组合逻辑电路分析二、组合逻辑电路的分析步骤&#xff1a;三、组合逻辑电路的分析举例例1 奇校验电路例2.对输入的二进制求反码例3.一个工厂发电的…

CSS 的环境变量函数env()

在CSS中&#xff0c;env() 函数并不是传统意义上的“环境变量”函数&#xff0c;如你在编程语言中可能遇到的那样。相反&#xff0c;env() 是CSS中的一个函数&#xff0c;它用于访问由宿主环境&#xff08;如浏览器&#xff09;提供给CSS的自定义属性&#xff08;也称为环境变量…