zoukankan      html  css  js  c++  java
  • 数据结构(三):栈

    一、概述

    • 栈(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

  • 相关阅读:
    前端生成二维码插件jquery.qrcode.min.js
    Spring的PropertyPlaceholderConfigurer
    Mysql5.7.20安装随笔
    Tomcat配置虚拟目录(目录+文件)
    js中的特殊类型
    使用 adb 命令一次性为多个设备安装 apk
    高通工具使用指导书
    QXDM及QCAT软件使用入门指南V1.0
    CTS测试笔记
    Android adb shell启动应用程序的方法
  • 原文地址:https://www.cnblogs.com/Infancy/p/12598803.html
Copyright © 2011-2022 走看看