码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【数据结构】顺序栈及其基本操作


    顺序栈

    栈是一种数据结构,其主要特点是后进先出,相当于我们在瓶子里面放东西,后放进去的东西在上面,所以拿出来的时候自然是从上面取出来,所以后进去的先出来。
    本文主要介绍的是栈的数组实现方法,即顺序栈。

    目录:

    • 顺序栈
      • 1. 栈的数组实现(创建)
        • 1.1. 栈的初始化
        • 1.2. 栈的增加(压栈)
        • 1.3. 栈的删除(弹栈)
        • 1.4. 栈的查询
        • 1.5. 栈的判空和判满

    基本操作有以下几种:

    1. 栈的数组实现(创建)

    栈的数组实现起来相对简单。在定义的时候,我们只需要定义一个结构体即可

    #define MAXSIZE 10000
    typedef struct
    {
        char data[MAXSIZE]; // 创建最大长度的数组
        int top;          // 当前顶部元素的位置
    } Stack;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    栈的结构体中需要一个数组来存储元素,还需要一个变量来记录当前栈顶元素的位置。

    1.1. 栈的初始化

    栈的初始化只需要让top为-1即可。

    void InitStack(Stack &S)
    {
        S.top = -1;
    }
    
    • 1
    • 2
    • 3
    • 4

    1.2. 栈的增加(压栈)

    压栈即将元素压入栈中,压栈的时候,我们需要给函数传递需要压栈的元素和栈本身。

    在压栈之前我们还需要判断栈是否已经满,若未满即可进行压栈。

    在压栈的过程中我们需要让top加一,即让栈顶元素的位置加一,然后让新的元素赋值到新的数组的top位置上。

    void Push(Stack &S,char x)
    {
        if(S.top==MAXSIZE-1)
        {
            printf("栈已满,无法插入元素!\n");
            return;
        }
        S.top++;
        S.data[S.top]=x;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    1.3. 栈的删除(弹栈)

    当我们需要弹栈的时候,只需要返回数组top位置的元素,然后让top减一即可。

    int Pop(Stack &S)
    {
        if(S.top!=-1)
        {
            return S.data[S.top--];
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    1.4. 栈的查询

    由于栈的特性,我们在查询的时候一般查询栈的栈顶元素。当我们需要查询栈顶元素的时候,只需要返回数组top位置的元素即可。如果需要对栈的其他元素进行查询,需要逐个遍历。

    int GetTop(Stack S)
    {
        if(S.top!=-1)
        {
            return S.data[S.top];
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    1.5. 栈的判空和判满

    栈的判空和比较简单,在判空时只需要判断top是否等于-1即可,在判满的时候只需要判断top是否等于MAXSIZE-1即可。

    bool StackEmpty(Stack S)
    {
        if(S.top==-1)
        {
            return true;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    bool StackFull(Stack S)
    {
        if(top==MAXSIZE-1)
        {
            return true;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 相关阅读:
    单分散Eu3+-PS荧光微球/吸附荧光素生物素化聚苯乙烯微球/包覆TiO2粉体的制备方式
    2015年蓝桥杯省赛C/C++ A组 灾后重建题解(100分)
    自定义starter出现Unable to read meta-data for class 这样解决
    嵌入式学习第二十五天!(网络的概念、UDP编程)
    Linux安装node
    LeetCode221109_122、27. 移除元素
    MySQL基础-多表查询
    从“优化”、“向社会输送人才”到“毕业”,互联网的高情商裁员
    【通义千问】大模型Qwen GitHub开源工程学习笔记(4)-- 模型的量化与离线部署
    缓冲区的奥秘:解析数据交错的魔法
  • 原文地址:https://blog.csdn.net/qq_34168477/article/details/133310867
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号