数据结构与算法——栈的表示和实现

news2024/9/20 14:15:38

🍓个人主页:bit.. 

🍒系列专栏:Linux(Ubuntu)入门必看   C语言刷题      数据结构与算法

目录

1.栈的抽象数据类型的定义

2.顺序栈的表示和实现​编辑 

3.顺序栈的初始化

4.判断栈是否为空

5.求顺序栈的长度

6.清空顺序栈

7.销毁顺序栈

8.顺序栈的入栈

9.栈的出栈(顺序栈)


1.栈的抽象数据类型的定义

ADT stack{

        数据对象:

                        D={ai|ai属于ElemSet,i=1,2,...,n,n>=0}

        数据关系:

                        R1={<ai-1,ai>|ai-1,ai属于D,i=2,...,n}

                                an端为栈顶,a1端为栈底

        基本操作:

                        初始化,进栈,出栈,取栈顶元素等。

}ADT stack 

2.顺序栈的表示和实现

栈的顺序存储——顺序栈

栈的链式存储——链栈

存储方式:

同一般线性表的顺序存储结构完全相同

利用一组地址连续的存储单元依次存放,自栈底到栈顶的数据元素,栈低一般在低地址端

附设top指针,指示栈顶元素在顺序栈的位置

另外base指针,指示栈底元素在顺序战中的位置

 3.顺序栈的初始化

status Initstack(s1stack &s){
    //构造一个空栈
    s.base=new SElemyType[MAXSIZE];
    if(!s.base)
    exit(OVERFLOW);  //存储分配失败
    s.top=s.base; //栈顶指针等于栈底指针
    s.stacksize=MAXSIZE;
    return ok;
}

 4.判断栈是否为空

status stackEmpty(sqstack s){
                    //若栈为空,返回TRUE;否则返回FALSE
            if(s.top=s.base)
            return TRUE;
            else
            return FALSE;
}

5.求顺序栈的长度

in stackLength(sqstack s)
{

   return s.top-s.base;
}

6.清空顺序栈

status clearstack(sqstack s){
        if(s.base)
        s.top=s.base
                //如果s.base存在将s.base赋值给s.top 
        return ok; 
}

7.销毁顺序栈

status Destroystack(aqstack &s){
    if(s.base){
        delete s.base;
        s.stacksize=0;
        s.base=s.top=NULL;  //若不置为空则s.base与s.top 为也指针
        }
    return ok;
}

 8.顺序栈的入栈

  • 判是否栈满,若满则出错(上溢)
  • 元素e压入栈顶
  • 栈顶指针加一
status push(sqstack &s,SElemType e){
    if(s.top-s.base==s.stacksize)   //栈满
    return ERROR;
    *s.top++=e;  //或者*s.top=e; s.top++;
    return ok;
}

 9.栈的出栈(顺序栈)

  • 判断是否栈空,若空则出错(下溢)
  • 栈指针减一
  • 获取栈顶元素e
status pop(sqstack &s,sElemType e){
    //若栈不空则删除栈顶元素,用e返回其值,并返回ok;否则返回ERROR
    if(s.top==s.base)  //等价于if(stackEmptu (s))
    return ERROR;
    e=*--s.top;
    return ok;
}

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

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

相关文章

TIDB简介及基础架构

1. 什么是TIDB TiDB 是一个分布式 NewSQL 数据库。它支持水平弹性扩展、ACID 事务、标准 SQL、MySQL 语法和 MySQL 协议&#xff0c;具有数据强一致的高可用特性&#xff0c;是一个不仅适合 OLTP 场景还适合 OLAP 场景的混合数据库。 1.1 什么是NewSQL SQL&#xff0c;传统关…

Kubernetes基础_03_ReplicaSet全解析

系列文章目录 文章目录系列文章目录前言一、创建ReplicaSet1.1 ReplicatSet的三个属性1.2 从ReplicaSet看Pod1.3 从Pod看ReplicaSet1.4 ReplicaSet属性分析ReplicasPod 选择算符Pod 模板二、使用ReplicaSet2.1 删除 ReplicaSet操作2.1.1 删除 ReplicaSet 和它的 Pod2.1.2 只删除…

随便给你一个页面 你该如何去给他布局呢 各位思考一下 ?

随便给你一个页面 你该如何去给他布局呢 各位思考一下 &#xff1f; 学习知识靠的是直接主动去学 不是 被动接受我给出的答案: 化繁为简 &#xff0c;化简为繁 在学习任何知识体系中都是如此 先学习这类知识的知识点 然后用一个案例或者是多个案例实操起来 在写页面时大多数人…

对话张璐:硅谷正在追逐两大赛道创新,融资降温但技术商业化更快了

LG 发自 凹非寺量子位 | 公众号 QbitAI什么是硅谷的New Sexy&#xff1f;张璐这次脱口而出介绍的是Mojo Vision和纳米机器人。前者随着元宇宙概念的火热越来越出圈&#xff0c;后者则跟随医疗AI和机器人深入而展现更大作用。Mojo Vision&#xff0c;AR眼镜&#xff0c;隐形佩戴…

[SpringBoot-vue3] 自定义图库

✨✨个人主页:沫洺的主页 &#x1f4da;&#x1f4da;系列专栏: &#x1f4d6; JavaWeb专栏&#x1f4d6; JavaSE专栏 &#x1f4d6; Java基础专栏&#x1f4d6;vue3专栏 &#x1f4d6;MyBatis专栏&#x1f4d6;Spring专栏&#x1f4d6;SpringMVC专栏&#x1f4d6;SpringBoot专…

Spring框架的IOC和AOP的简单项目实现

一、Spring框架介绍 Spring框架是为了解决企业应用开发复杂性而创建的&#xff0c;是Java应用钟最广的框架&#xff0c;它的成功来源于设计思想&#xff0c;而不是技术本身&#xff0c;即IOC&#xff08;inversion of control&#xff0c;控制反转&#xff09; 和AOP&#xff…

攻防世界-adworld-reverse-game

#adworld-reverse-game 从1依次输入到8,每个数字会车,最后通关,获得flag |-----------------------▲--------||-----------------------●--------||-----------------------◆--------||-----------------------■--------||--------------------|-----------------------…

vite 静态资源打包配置,echart 主题引入,build上线问题,vue3-echart5使用

文章目录前情提要原因分析实战解析最后前情提要 在经历了vite打包实战后&#xff0c;我入手了echart实战&#xff0c;线下运行一切正常&#xff0c;但是打包上线后出现了异常 TypeError: Cannot create property series onstring <IDOCTYPE html>,挑战又来了&#xff0c…

抖音开发对接之订单取消消息

目录 前言 一、抖音开发中的订单取消消息 二、抖音运营反馈的业务需求分析 三、整体的业务开发思路 四、订单取消消息的代码开发 1.订单取消消息的使用 2.实时保存抖音平台过来的订单取消消息 3.具体的订单业务处理 总结 前言 这里主要是介绍一下抖音开放平台的这个消…

Redis数据结构之字典

目录 字典的应用场景 源码实现 hash算法的实现&#xff0c; hash冲突的解决 扩容缩容机制 哈希表的扩展与收缩条件 渐进式rehash 线程是否安全 Redis的dictht 和 Java(jdk1.8)的HashMap有什么区别 线程安全性 hash算法 解决hash冲突的方法 扩容机制 字典的应用场景…

Navicat的安装及如何将PG库内的数据导出CSV

一、Navicat的安装 1、安装 双击安装 Navicat Premium 12.0.18.0 简体中文 64位.exe 2、编辑连接&#xff0c;进行连接测试 具体配置信息可以进docker容器内查看 二、将PG库内的数据导出CSV 1、进入docker容器&#xff08;docker exec -it postgres_v3 bash&#xff09;&#…

中国开源年会报名 | StarRocks 极速湖仓分析的探索与实践

开源年度盛会 2022 第七届中国开源年会 (COSCon22) 来啦&#xff01; 本次年会将于 10 月 29-30 日由开源社举办&#xff0c;线上共设有1个主论坛和16个分论坛&#xff0c;线下分会场遍布成都、深圳、上海、北京等11个城市。StarRocks PMC 赵恒将代表社区出席大数据专场&#…

【Python】pycharm 和 vscode 编辑器设置模版

author: jwensh time: 2022.10.29 1. pycharm 模版 打开 PyCharm 设置界面&#xff0c;搜索 template&#xff0c;选择 File and Code Templates > Python Script 如下图所示&#xff0c;输入自定义模板代码 模版内容设置 #!/usr/bin/env python # -*- coding: utf-8 -*…

非遗在线商城小程序(后台PHP开发)

目 录 1绪论 1 1.1 选题及意义 1 1.2 国内外文献综述 2 1.3 研究的主要内容 3 2 系统工具 5 2.1 微信小程序 5 2.2 ThinkPHP 5 框架 7 2.3 RESTFul API 8 2.4 微信支付技术 10 2.5 MySQL数据库 12 3 系统分析 14 3.1 市场定位分析 14 3.2 可行性分析 14 3.3 需求目标 14 3.3.1 …

彻底理解Java并发:ReentrantLock锁

本篇内容包括&#xff1a;为什么使用 Lock、Lock 锁注意事项、ReentrantLock 和 synchronized 对比、ReentrantLock &#xff08;加锁、解锁、公平锁与非公平锁、ReentrantLock 如何实现可重入&#xff09;等内容。 一、Lock 锁 1、为什么使用 Lock synchronized 线程等待时间…

Filter快速入门、Filter执行流程、Filter使用细节、Listener概念、分类、ServletContextListener使用

文章目录FilterFilter快速入门Filter 执行流程Filter使用细节ListenerServletContextListener 使用Filter 概念&#xff1a;Filter表示过滤器&#xff0c;是 JavaWeb三大组件&#xff08;Servlet、Filter、Listener&#xff09;之一。过滤器可以把对资源的请求拦截下来&#x…

DASCTF X GFCTF 2022十月挑战赛web

前言 晚来的比赛web题解&#xff0c;这次buu的十月赛web部分的题目对于我来说质量还是蛮高的&#xff0c;因为这几天比较忙&#xff0c;一直没有去复现总结&#xff0c;不过该复现的还得复现&#xff0c;复现了这次比赛又能学到不少知识&#xff0c;嘿嘿嘿。 EasyPOP 考察ph…

Mega-Nerf学习笔记

Mega-NeRF:Scalable Construction of Large-Scale NeRFs for Virtual Fly-Throughs 主页&#xff1a;https://meganerf.cmusatyalab.org/ 论文&#xff1a;https://meganerf.cmusatyalab.org/resources/paper.pdf 代码&#xff1a;https://github.com/cmusatyalab/mega-nerf …

【设计模式】简单工厂模式

简单工厂模式–》工厂模式—》抽象工厂模式 文章目录简单工厂模式定义&#xff1a;各个角色1. 抽象产品类2. 具体产品类&#xff1a;3. 工厂类&#xff1a;简单工厂模式的核心。客户端设计图表未使用简单工厂模式&#xff1a;出现的问题&#xff1a;使用简单工厂模式&#xff1…

小熊派-FreeRTOS-点灯学习过程-20221029

一、前言准备 1、小熊派一个&#xff08;STM32L431RCT6&#xff09; 2、STM32CubeMX 3、keil5 4、小熊派的配套开发资料&#xff08;用于出问题的时候替换&#xff09; 二、实现过程 代码主要由STM32CubeMX生成&#xff0c;所以过程主要是配置CubeMX. 1、芯片选型 STM3…