数据结构:栈

Posted infancy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构:栈相关的知识,希望对你有一定的参考价值。

一、概述

  • 栈(Stack),也叫堆栈。但是不能称为堆,堆是另外一种数据结构

  • FILO栈遵循先进后出的原则(First In Last Out)

  • 基本操作有:入栈(压栈)、出栈(退栈)

  • 入栈和出栈都是针对栈顶的操作

二、结构示意图

  • 依次将a、b、c元素压进一个空栈中:

    技术图片

     

     

  • 将上述栈中的元素一个一个出栈

    技术图片

     

     

     

  • 由以上两图我们可以看出来,栈是遵循FILO(先进后出)的原则:a元素是最先进栈的而是最后出栈的,c元素是最后进栈的而是最先出栈的。

三、代码示例

  • 我们这里以java代码为例,使用java官方提供的函数库里面的栈实现

  @Test
    public void test3(){
        Stack<Integer> stack = new Stack<Integer>();
        stack.push(1);//往栈中添加一个元素
        stack.push(2);
        stack.push(3);
        stack.push(4);
        stack.push(5);
        System.out.println(stack.peek());
        stack.pop();//移除栈中的一个元素
        System.out.println(stack.peek());
        stack.pop();
        System.out.println(stack.peek());
        stack.pop();
        System.out.println(stack.peek());
        stack.pop();
        System.out.println(stack.peek());
        stack.pop();
    }
  • 其中peek()方法是获取栈的末尾元素,也就是栈顶的那个元素

  • 代码运行效果如下图:

技术图片

 

 

四、自己用代码实现一个简单的栈

  • 接下来我们使用数组来简单的实现一下栈结构

package com.zhurouwangzi.entity;
?
public class MyStack {
    public MyStack(){
        element = new int[20];
        size = 0;
    }
    private int[] element;
    private int size;
?
    public int push(int item){
        element[size] = item;
        size++;
        return item;
    }
?
    public int pop(){
        int popData = element[size-1];
        int[] newEle = new int[size-1];
        System.arraycopy(element, 0, newEle, 0, size-1);
        element = newEle;
        size--;
        return popData;
    }
?
    public int peek(){
        return element[size-1];
    }
?
    public int getSize(){
        return size;
    }
}
  • 测试自定义的栈

@Test
    public void test3(){
        MyStack myStack = new MyStack();
        myStack.push(1);
        myStack.push(2);
        myStack.push(3);
        myStack.push(4);
        myStack.push(5);
        System.out.println(myStack.peek());
        myStack.pop();//移除栈中的一个元素
        System.out.println(myStack.peek());
        myStack.pop();
        System.out.println(myStack.peek());
        myStack.pop();
        System.out.println(myStack.peek());
        myStack.pop();
        System.out.println(myStack.peek());
        myStack.pop();
    }
  • 运行结果和java官方封装的栈函数是一样的:

 技术图片

 

转载请注明出处:https://www.cnblogs.com/Infancy/p/12598803.htmlfalse

以上是关于数据结构:栈的主要内容,如果未能解决你的问题,请参考以下文章

方法与对象内存分析

Android Studio - 带回栈的导航抽屉

使用callstack在C中实现栈数据结构?

VSCode自定义代码片段5——HTML元素结构

VSCode自定义代码片段5——HTML元素结构

VSCode自定义代码片段5——HTML元素结构