美文网首页
数据结构入门教程-栈

数据结构入门教程-栈

作者: 会上树的程序猿 | 来源:发表于2020-01-16 22:29 被阅读0次

上节我们了解了双向链表的基本用法,本节我们来了解下数据结构的另外一种栈结构,首先我们来了解下什么是栈吧!

栈的介绍
  • 首先我们的栈是一个先入后出的有序列表。
  • 其次栈限制了线性表的元素的插入和删除只能在同一端进行的特殊有序线性表,其中允许插入和删除的一端为栈顶(TOP),另外一端为固定的一端,称为栈底
  • 从上述的描述中,我们得知最先入栈的元素肯定在栈底,最后放入的元素在栈顶,删除元素时恰恰相反。最后入栈的元素最先被删除,最先放入的元素最后被删除
  • 放入元素的过程我们称为入栈(Push),删除元素的过程我们称为出栈(pop)

上述就是对栈这种数据结构简单的介绍,既然我们提到了入栈和出栈的操作,我们通过如下图来亲切的感受一把Push和Pop的过程,如图所示:

元素入栈.png 出栈.png

上面你的图分别很形象的描述了入栈和出栈的操作,接下来通过下图来分别对入栈和出栈的过程进行思路分析:

入栈思路分析
利用数组模拟入栈出栈操作.png

正如图中一样我们利用数组的特性来实现入栈操作,简单的对图中涉及到的参数简单的介绍下:

  • 首先MaxTop:表示的是当前数组的存放数据的最大容量
  • Top:表示我们的栈顶,当栈为空时,默认值为-1
  • Stack:表示我们当前的数组,真正用来保存数据的

当有数据入栈时:

  • 我们只需要做如下的操作,先让top++,其次是stack[top] = data (data就是入栈的数据)

这就是入栈的操作,接着我们来看看出栈的过程

  • 首先定义一个临时的变量value来保存我们的栈顶元素,即value= stack[top].
  • 接着让栈顶top往下移动即top--
  • 最后返回value即可

知道了入栈和出栈的思路,接着我们用代码来实现:

代码实现
  • 先定义一个数组(模拟栈)
//定义栈结构类
class ArrayStack{
private int maxSize; //表示栈的最大容量
private int[] stack; //stack实际用来保存数据的
private int top = -1; //top表示栈顶,初始值为-1,表示此时栈中是没有数据的

public ArrayStack(int maxSize){
    this.maxSize = maxSize;
    stack = new int[this.maxSize];
}
  • 栈的限制条件代码
//栈满的条件
public boolean isFull(){
    return top == maxSize -1;
}
//栈空的条件
public boolean isEmpty(){
    return top == -1;
}
  • 入栈代码
 //入栈操作
public void push(int element){
    if (isFull()){
        throw new ArrayIndexOutOfBoundsException("栈已经满了~");
    }
    top ++;
    stack[top] = element;
}
  • 出栈代码
 //出栈操作
public int pop(){
    if (isEmpty()){
        throw new RuntimeException("栈空~");
    }
    int element = stack[top];
    top --;
    return element;
}
  • 打印栈的代码
//打印操作
public void print(){
    if (isEmpty()){
        System.out.println("栈空~");
        return;
    }
    for (int i = top; i >= 0 ; i--) {

        System.out.printf("stack[%d]=%d\n",i,stack[i]);
    }
}

上述就是栈数据结构的基本操作的代码演示,接着我们来看测试代码:

/**
 * 数据结构-栈(利用数组特性来实现)
 */
public class ArrayStackCase {
public static void main(String[] args) {

    //测试
    ArrayStack arrayStack = new ArrayStack(5);
    arrayStack.push(10);
    arrayStack.push(20);
    arrayStack.push(30);
    arrayStack.push(40);
    arrayStack.push(50);
    arrayStack.print();
    System.out.println("出栈测试=============");
    int element = arrayStack.pop();
    System.out.println("出栈的元素为:"+element);
    arrayStack.print();
    int element1 = arrayStack.pop();
    System.out.println("出栈的元素为:"+element1);
    arrayStack.print();
    int element2 = arrayStack.pop();
    System.out.println("出栈的元素为:"+element2);
    arrayStack.print();
}}

测试结果如图所示:

栈的测试.png

从我们的测试结果中来看,我们完成了栈的入栈和出栈操作,其实栈的用途还是很多的比如:回溯历史数据操作,就可以利用栈的特性来帮助我们实现等,那么关于栈的学习就到这里呢......

相关文章

  • 数据结构入门教程-栈的应用实例1

    在这篇文章中数据结构入门教程-栈,我们了解了栈的基本操作,如入栈(push)和出栈(pop)这两个重要的特性,本篇...

  • 数据结构入门教程-栈

    上节我们了解了双向链表的基本用法,本节我们来了解下数据结构的另外一种栈结构,首先我们来了解下什么是栈吧! 栈的介绍...

  • 栈和队列

    1、栈 栈是一种先进先出的数据结构。栈顶进栈,栈顶出栈。 数据结构 栈的初始化 进栈 出栈 栈的最小值 2、队列 ...

  • 004 go语言实现栈

    1 数据结构 数据结构: 要实现的功能:0 栈的初始化1 获取栈长度2 入栈3 出栈4 清空栈内容5 判断栈是否为...

  • java高级知识点

    1.数据结构 程序=数据结构+算法 栈:后进先出,线性结构 入栈:push 出栈:pop假如已知入栈顺序是ab...

  • 栈和堆以及栈区和堆区的区别

    栈和堆以及栈区和堆区的区别 数据结构中的栈和堆 栈:具有先进后出性质的数据结构 堆:一种经过排序的树形数据结构,节...

  • 数据结构与算法 第二节:栈 栈: 一种先进后出的数据结构。可以想象成手枪的弹夹。 栈的特点: 栈的行为: 栈的代...

  • 2019-07-11—栈

    栈:Java数据结构和算法(四)——栈 string和char一般这么转化: 21、定义栈的数据结构,请在该类型中...

  • 什么是堆栈?

    堆与栈是两种数据结构,并不是一种数据结构,堆是堆,栈是栈。 1、栈:是一种只能在一端进行插入和删除的数据结构。 允...

  • 05--栈 递归

    栈 栈(Stack)又名堆栈,它是一种重要的数据结构。从数据结构角度看,栈也是线性表,其特殊性在于栈的基本操作是线...

网友评论

      本文标题:数据结构入门教程-栈

      本文链接:https://www.haomeiwen.com/subject/ypyxzctx.html