数据结构-----栈的顺序储存_爱吃草莓蛋糕的猴的博客-程序员宝宝

技术标签:   数据结构  

01.栈的定义

栈是一种后进先出的数据结构,也就是说他不像数组那样子,可以在中间插入,栈只能够在上一个存入数据的后面再存数据,而且只能取现进去的数据。栈简称LIFO结构。

栈是限定仅在表位进行插入和删除操作的线性表。允许插入和删除的一端叫栈顶,另一端叫栈底,不含任何元素的叫空栈

栈的插入操作,叫做进栈,也称作压栈,入栈。
栈的删除操作,叫做出栈,也叫作弹栈。

02.栈的结构

栈里面有一个top变量来指示栈顶元素在数组中的位置,而且栈的大小是先定义好的,和数组很相似。这里还可以引入了一个栈底bottom的变量,如果有这个变量,要清空栈和销毁栈会变得很方便,(s -> top = s -> bottom)就可以清空栈。但是很多时候并没有使用过栈底变量,高级语言封装的栈就是标准栈,我这里就用的标准栈。一般top = -1就表示是一个空栈,top必须小于MAXSIZE。

//栈的结构定义
typedef int SElemType; /*SElemType 类型根据实际情况而定,这里假设为int*/ 
typedef struct
{
    
	SElemType data[MAXSIZE];
	int top;     /*用于栈顶指针*/
}SqStack;

/*顺序栈的初始化*/
int InitStack(SqStack *s)
{
    
    s->top=-1;

    return OK;
}

03.进栈操作

进栈就是把top这个栈顶指针上移,把元素放入栈顶的空间里。

/*插入元素e为新的栈顶元素*/
Status  Push(SqStack *s, SElemType e)
{
    
	if(s->top == MAXSIZE-1) //栈满
	{
    
		return ERROR;
	}
	s->top++;    //栈顶指针增加1
	s->data[s->top] = e;   //将新插入元素赋值给栈顶空间
	return OK; 
}

04.出栈操作

出栈也很简单,就是把top减一。因为没有任何循环,所以这两个操作的时间复杂度都是O[1]。

/*出栈操作*/
Status Pop(SqStack *s, SElemType *e)
{
    
	if(s->top  == -1)  //栈为空
	    return ERROR;
	*e=s->data[s->top];  //将要删除的栈顶元素复制给e
	s->top--;           //栈顶指针减一
	return OK; 
}

顺序栈的总结

1.只能在栈顶进行增减操作,后进先出。因为这一点可以进行一些顺序结构的判定,比如括号的匹配问题。
2.缺点是:要先定义栈的大小,如果数据太多就容易溢出。

ps:本博客代码参考程杰《大话数据结构》

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_46293423/article/details/104950574

智能推荐

vue part3.4 小案例 消息订阅pubsub与ajax_weixin_33935777的博客-程序员宝宝

pubsub消息订阅组件,便于兄弟组件间调用npm install --save pubsub-jsapp.vue<template> <div class="container"> <Search></Search> <users-main></users-main...

TensorFlow-GPU-2.4.1与CUDA安装教程_BIGBOSSyifi的博客-程序员宝宝

这篇文章是我二刷TensorFlow-GPU安装,最近需要在新的电脑安装环境,我翻了以前自己写的安装笔记:TensorFlow-GPU-CUDA无痛安装教程Windows篇,但是安装完因为版本的原因,出了一些新的问题,打算推倒再来一遍,因为是二周目,**所以这篇文章我会更注重一些常见的安装问题与解决方法**,希望可以帮的到你!!

八股文--->JAVA基础_匿名内部类实现泛型接口_红茶晚报丶的博客-程序员宝宝

一:JVM,JDK,JRE的关系(1)JVM(Java Virtual Machine)是JAVA虚拟机,JAVA程序需要在虚拟机上运行,不同的平台有自己的虚拟机,因此JAVA实现跨平台(2)JDE(Java Runtime Environment)是JAVA运行环境,包含JVM和JAVA核心类库(如基本数据类型、基本数学函数、字符串处理、线程、异常处理类等),想要运行好JAVA程序,只需要一个JRE即可(3)JDK(Java Development Kit)是提供给开发人员使用的,包含了JRE

转载两个C程序_iteye_18800的博客-程序员宝宝

代码非原创,先记下来:1、播放影音(VC6下通过)#include <windows.h>#include <stdio.h>#include <mmsystem.h>#include <shellapi.h>#include <AFXCOM_.H>#pragma comment(lib,"winmm.lib")vo...

【JavaScript MD5加密】——简单的MD5加密脚本_小木_.的博客-程序员宝宝_javascript md5

【代码】【JavaScript MD5加密】——简单的MD5加密脚本。

随便推点

第七章: EL表达式和JSTL标签库,访问JavaBean的属性,JSTL_阿江^的博客-程序员宝宝

第七章: EL表达式和JSTL标签库,访问JavaBean的属性,JSTL1.初识JavaBean1.1 什么是javaBean:它是java开发中常用的组件,其实就是一个java类,它的作用就是封装数据。书写JavaBean需要满足五个规范:1.这个java类,被public修饰2.这个java类要提供公共的无参数的构造方法3.要提供私有的属性4.要给私有的属性提供公共的set或者get方法5.要实现Serializable接口比如:public class Book impl

转 [精华] 邮件服务器错误信息_weixin_30361753的博客-程序员宝宝

作者:netloafer发表于:2003-01-15 11:22:44 http://www.chinaunix.net/jh/14/803.html显示错误:501是什么意思? 501Invaliddomainname SocketError#10060 SocketError#10061 无效的域名。发件人栏需填入电子邮件地址。 ...

这次让你彻底学会redis中跳表原理,不懂你打我_程序编织梦想的博客-程序员宝宝_redis跳表原理

一、前言redis是一款优秀的内存高速缓存数据库,它支持较高的并发量。其中redis中是用跳表来索引数据的,本章就详细讲解一下跳表的原理。讲之前,我们现在身临其境的了解一下redis当时在选择跳表作为检索工具的初衷。现在有这样一个场景:内存中有几十万的数据,如何进行快速的检索,并且能快速的增、删、改、查呢。作为redis的作者,他可能有下面几种方案:方法1:用数据库来存储。这种方法弊端就在于速度太慢了。这要是放在高并发的情况下(比如:秒杀),还不得各种慢查询啊。方法2:有序数组来存储。数组来

那些年我们一起踩过的坑_ZeroRockie的博客-程序员宝宝

极限挑战 43道 JS 题目,你对了多少道!​ 今天笔者整理了自己曾经踩过的坑,当然,有些坑不掉个几次是记不牢的,有点惨emmm,这些题型涉及的知识面非常广,涵盖了 JS 原型,函数细节,强制转换,闭包扥知识点.而且都是一些非常细节的东西,透过这些细节可以折射出很多高级的 JS 知识点,你可以先思考一下结果,然后在看我的解析,为了解释这些细节知识点,笔者翻了很多书和资料,弥补了很多 JS 知识盲...

2021-05-19_qq_45373844的博客-程序员宝宝_sslocal://polaris/proxy?scene_key=sixty&enter_from

python按哨兵数据目录爬取精密轨道数据精密轨道数据爬取使用python批量爬取哨兵数据的精密轨道文件在爬取数据之前需要先安装好urllib requests 等库。1 url = ‘https://s1qc.asf.alaska.edu/aux_poeorb/’2 为防止反爬需要使用代理池proxy_list = [‘117.91.254.237’,‘123.169.124.72’,‘122.143.213.135’,‘112.109.221.50’,‘36.56.101.23.

阿里云容器服务新增支持Kubernetes编排系统,性能重大提升_weixin_33709219的博客-程序员宝宝

摘要:作为容器编排系统的两大流派, Kubernetes和Swarm的重要性不言而喻。融合了两大高性能集成的阿里云容器服务,不仅可以降低50%的基础架构成本,提高交付速度将产品迭代加快13倍,还可以实现秒级的海量容器启动、秒级的应用架构伸缩与恢复、分钟级部署。阿里云容器服务提供了面向企业客户的技术能力,为企业应用容器化提供了迁移工具和咨询服务、深度学习、区块链等应用解决方案,以帮助企业优化现有IT...

推荐文章

热门文章

相关标签