2.线性表——栈(代码片段)

zhousya zhousya     2023-04-06     148

关键词:

1.什么是栈

    [1]. 栈是一种只能在一端进行插入和删除操作的线性表;插入:入栈(push);删除:出栈(pop);

    [2]. 栈是按照“先进后出”(Last In First Out, LIFO)的原则存储数据;

           栈顶(Top):允许删除和插入;

           栈底(Botton) ;

    [3]. 栈的分类:

              静态栈:其核心是数组,类似于一个连续内存的数组,需要提前确定好栈的大小;

              动态栈:其核心是链表,内存够用的前提下,可以无穷大,不连续;

    [4]. 栈的表示:

技术图片

 

1.1 栈的表示

 

2. 栈的基本操作

    [1]. 栈的存储结构

    [2]. 进栈

    [3]. 出栈

    [4]. 判断空,判断满

    [5]. 栈的遍历

    [6]. 清空栈

    备注:静态栈参考【2.线性表——数组】

         动态栈参考【2.线性表——链表】

 

3. 静态栈的代码实现

    [1]. 静态栈的存储结构

public class MyStack 
    final int STACKSIZE = 5; // 声明栈的容量
    // 注意:final 的用法;
    public int bottom;
    public int top;
    public int[] arr;

    public MyStack() 
        bottom = top = -1;
        arr = new int[STACKSIZE];
    

 

 

 

    [2]. 静态栈的基本操作实现

 

package com.Stack;

/*
* 静态栈的基本操作:
*       1. 初始化,创建
*       2. 入栈
*       3. 出栈
*       4. 判断空;判断满;
*       5. 遍历
*       6. 清空
*
* */

public class DemoStack 
    // 判断满
    public static boolean isFull(MyStack stack)
        if(stack.top >= stack.STACKSIZE-1) // 利用数组构建的静态栈的下标是从0开始的
            return true;
        else
            return false;
        // 判断满,简写代码:return stack.top >= stack.STACKSIZE-1;
    

    // 判断空
    public static boolean isEmpty(MyStack stack)
        if(stack.top == stack.bottom)
            return true;
        else
            return false;
        // 简写:return stack.top == stack.bottom;
    

    // 进栈
    public static boolean poshStack(MyStack stack,int data)
        if(isFull(stack))
            System.out.println("当前栈已满!");
            return false;
        else
            stack.arr[++stack.top] = data;
            return true;
        
    

    // 出栈
    public static boolean popStack(MyStack stack)
        if(isEmpty(stack))
            System.out.println("当前栈为空!");
            return false;
        else
            System.out.println("栈顶元素出栈:"+stack.arr[stack.top--]);
            return true;
        
    

    // 遍历输出
    public static boolean printOutStack(MyStack stack) 
        if(isEmpty(stack))
            System.out.println("当前栈为空!无法输出");
            return false;
        else
            int length = stack.top - stack.bottom;
            System.out.print("栈遍历输出:");
            for(int i=length-1 ; i>=0; i--)
                System.out.print(stack.arr[i]+" ");
            
            System.out.println("
"+"==============分隔符===================");
            return true;
        
    

    // 清空栈
    public static boolean clearStack(MyStack stack)
        if(isEmpty(stack))
            System.out.println("当前栈为空!");
            return false;
        else
/*           int length = stack.top - stack.bottom;
             for(int i=length-1 ; i>=0; i--)
                 stack.arr[i] = 0;
                 stack.top--;
            */
            stack.arr = null;// java内部会不定时的启动【垃圾回收机制】,对堆内存空间进行回收
            stack.top = stack.bottom = -1;
            return true;
        
    


    public static void main(String[] args) 
        MyStack stack = new MyStack();

        poshStack(stack,1);
        poshStack(stack,2);
        poshStack(stack,3);
        poshStack(stack,4);
        poshStack(stack,5);
        System.out.println("入栈后");
        printOutStack(stack);

        popStack(stack);
        popStack(stack);
        System.out.println("出栈后");
        printOutStack(stack);

        clearStack(stack);
        if(isEmpty(stack))
            System.out.println("栈已清空 !");
        
        printOutStack(stack);
    

 

 

 

    [3]. 运行结果

 技术图片

 

 

4. 动态栈的代码实现(待更)

    [1]. 动态栈的存储结构

    [2]. 动态栈的基本操作实现

    [3]. 运行结果

 

备注:学习过程中难免会出现很多错误,请大家指教!有问题可以直接评论我,谢谢!

结构与算法-----栈2(代码片段)

...于存储数据的简单数据结构,类似链表或者顺序表(统称线性表),栈与线性表的最大区别是数据的存取的操作,我们可以这样认为栈(Stack)是一种特殊的线性表,其插入和删除操作只允许在线性表的一端进行,一般而言,把允... 查看详情

线性表之栈(代码片段)

栈的定义:  一种只能在一端进行插入或删除操作的线性表被称为栈,其中允许删除或插入的一端为栈顶,另一端为栈底,栈底固定不变;  栈的特点:先进后出,例如弹夹,先装的子弹最后才能出;  按照存储结构可以... 查看详情

[nefu数据结构]阶段一复习(代码片段)

...ff1a;1.3抽象数据类型的表示与实现1.4算法和算法分析第2章线性表2.3~2.4线性表的顺序存储结构2.5线性表的链式表示和实现单链表循环链表双向链表顺序表和链表比较算法设计第3章栈和队列栈顺序栈链栈双向栈递归队列普通队列循... 查看详情

数据结构与算法(代码片段)

...基本概念1.4、数据结构三要素1.5、数据结构三个方面二、线性表(逻辑结构)2.1、线性表的概念2.2、顺序表2.3、链表2.4、顺序表vs链表2.5、双链表2.6、循环链表三、栈stack3.1、栈的概念及特点3.2、顺序栈3.3、链式栈四、队... 查看详情

数据结构--栈队列树(代码片段)

文章目录线性表栈队列二叉树线性表线性表是一种可以在任意位置进行插入和删除数据元素操作的、由n(n>=0)个相同类型数据元素a0、a1、a2,…,a(n-1)组成的线性结构。线性表是一种最简单的线性结构。特点:除... 查看详情

线性表(数组链表队列栈)详细总结(代码片段)

线性表是一种十分基础且重要的数据结构,它主要包括以下内容:数组链表队列栈接下来,我将对这四种数据结构做一个详细的总结,其中对链表实现了十几种常见的操作。希望对你有所帮助。1.数组数组(Array)是一种线性表数据... 查看详情

数据结构之线性表栈队列(代码片段)

温故而知新~~~~一、线性表顺序表实现(C++)1template<typenameE>2classAList34private:5intmaxSize;6intlistSize;7intcurr;8E*listArray;9public:10AList(intsize=defaultSize)1112maxSize=size;13listSize=curr=0;14listArr 查看详情

11201771010119穷吉(代码片段)

理论知识:一般将数据结构分为两大类:线性数据结构和非线性数据结构线性数据结构:线性表、栈、队列、串、数组和文件非线性数据结构:树和图。线性表:1.所有数据元素在同一个线性表中必须是相同的数据类型。2.线性... 查看详情

《数据结构与算法》-3-栈和队列(代码片段)

...章节:《数据结构与算法》-1-绪论《数据结构与算法》-2-线性表《数据结构与算法》-3-栈和队列?上篇博客《数据结构与算法》-2-线性表中介绍了线性结构中的线性表的定义、基本操作以及线性表的两种存储方式:顺序存储与链... 查看详情

数据结构之队列和栈(代码片段)

No.1抽象数据类型栈的定义栈是限定在队尾进行操作的线性表,因此对于栈来说,队尾有特殊意义,称为栈顶,表头端成为栈底,没有任何元素的栈称为空栈特点:它是线性表这个线性表只能在栈顶操作No.2栈的表示栈的先进后出... 查看详情

22计算机408考研—数据结构—线性表栈队列数组(代码片段)

2022计算机考研408—数据结构—线性表、栈、队列、数组手把手教学考研大纲范围内的线性表、栈、队列、数组22考研大纲数据结构要求的是C/C++,笔者以前使用的都是Java,对于C++还很欠缺,如有什么建议... 查看详情

22计算机408考研—数据结构—线性表栈队列数组(代码片段)

2022计算机考研408—数据结构—线性表、栈、队列、数组手把手教学考研大纲范围内的线性表、栈、队列、数组22考研大纲数据结构要求的是C/C++,笔者以前使用的都是Java,对于C++还很欠缺,如有什么建议... 查看详情

线性表--05---栈(代码片段)

栈生活中的栈----客栈存储货物或供旅客住宿的地方,可引申为仓库、中转站。例如我们现在生活中的酒店,在古时候叫客栈,是供旅客休息的地方,旅客可以进客栈休息,休息完毕后就离开客栈。计算机中的栈:我... 查看详情

线性结构-栈(代码片段)

...方法栈的应用二.顺序栈三.链栈栈和队列栈和队列都属于线性表属于"一对一"逻辑关系栈:“先进后出”队列:“先进先出”一栈一.什么是栈看图理解(概念只是辅助理解_理解了才算学会)栈只能从一端存取,另一端是封闭的在... 查看详情

线性表栈队列和优先队列(代码片段)

  为一个特定的任务选择最好的数据结构和算法是开发高性能软件的一个关键。  数据结构是以某种形式将数据组织在一起的集合(collection)。数据结构不仅存储数据,还支持访问和处理数据的操作。  在面向对象思想... 查看详情

线性表--06---栈---常见应用场景(代码片段)

括号匹配问题问题描述:分析:创建一个栈用来存储左括号从左往右遍历字符串,拿到每一个字符判断该字符是不是左括号,如果是,放入栈中存储判断该字符是不是右括号,如果不是,继续下一次循环如... 查看详情

数据结构--栈(代码片段)

一、什么是栈(Stack)  首先来说,栈是一种线性表的表现形式,其定义是只允许在栈顶进行插入或者删除的线性表,所以栈就有线性表的表现形式,链式栈和顺序栈。      栈顶(Top):允许进行数据的插入... 查看详情

数据结构---线性表(顺序表)(代码片段)

线性表线性表是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…线性表在逻辑上是线性结构,也就说是连续的一条直线。但... 查看详情