数据结构3--栈(java实现栈的顺序存储)

1.栈

     栈也叫堆栈,是一种限制只能在某一端进行插入和删除操作的线性表

                     

     栈的 顺序存储结构下的进栈操作:

                

     栈的链式存储结构如下

 

   2.java代码实现栈的顺序存储

       首先栈是顺序存储的,所以底层用WxArrList实现,WxArrList是我自己实现的线性表的顺序存储结构,还实现了线性表的链式存储结构,这里我用WxArrList实现栈的操作

     老规矩,先来一个栈的基本操作的接口:
     

package com.wx.base;

public interface WxStack {
    /*
     这是一个栈操作的接口
     */
    public void push(Object e);  //压入元素进栈
    public Object pop();         //弹出栈顶的值
    public Object peek();        //查询栈顶的值
    public boolean isEmpty();    //判断栈是否为空
    public int size();           //返回栈的大小
}

 实现栈的操作接口:
 

package com.wx.imp;

import com.wx.base.WxStack;

import java.util.EmptyStackException;

public class WxStackImp implements WxStack {
    private WxArrList stackList=null;
    public WxStackImp()
    {
        stackList=new WxArrList();
    }
    //压入元素进栈
    @Override
    public void push(Object e) {
        stackList.add(e);
    }
    //弹出栈顶的元素并删除栈顶的元素
    @Override
    public Object pop() {
        Object o = stackList.get(size() - 1);
        stackList.remove(o);
        return o;
    }
    //查询栈顶的值
    @Override
    public Object peek() {
        if (stackList.size()==0)
        {
            throw new EmptyStackException();
        }
        return stackList.get(size()-1);
    }
    //判断栈是否为空
    @Override
    public boolean isEmpty() {
        return stackList.isEmpty();
    }
    //返回栈的大小
    @Override
    public int size() {
        return stackList.size();
    }
}

 测试:判断符号是否平衡的一个案例:

   将字符串转换为字符字符数组。历遍判断,如果读到左边的符号就压入栈,如果读到右边的符号就判断此时栈是否为空,如果为空,则此符号肯定不平衡返回false,如果部位空则从栈中弹出栈顶元素(弹出后会在栈中删除此元素),弹出的元素与该右边符号对应的左边符号对比,如果不相等返回false.如果当栈中元素全部弹出还没有返回false,那么栈该符号平衡,返回true.
       
package com.wx.test;

import com.wx.imp.WxStackImp;

public class TestStack {
    public static void main(String[] agrs)
    {
        String s="{()}";
        TestStack testStack=new TestStack();
        boolean pingheng = testStack.isPingheng(s);
        System.out.print(pingheng);
    }
    public  boolean isPingheng(String s)
    {
        WxStackImp wxStack=new WxStackImp();
        char[] chars = s.toCharArray();
        for (int i=0;i<chars.length;i++)
        {
            if(chars[i]=='{')
            {
                wxStack.push(chars[i]);
            }else if (chars[i]=='}')
            {
                  if (wxStack.isEmpty())
                  {
                      return false;
                  }else {
                      char pop = (Character)wxStack.pop();
                      if (pop!='{')
                      {
                          return false;
                      }
                  }

            }

            if(chars[i]=='(')
            {
                wxStack.push(chars[i]);
            }else if (chars[i]==')')
            {
                if (wxStack.isEmpty())
                {
                      return false;
                }
                else
                    {
                        char pop = (Character)wxStack.pop();
                        if (pop!='(')
                        {
                            return false;
                        }
                    }
            }
        }
        //当所有的字符都匹配成功弹出来了以后,栈就空了
        if (wxStack.isEmpty())
        {
            return true;
        }
        return false;
    }
}

  运行结果:
                     

 栈的链式存储读者可以仿照顺序储存,用我的线性表的链式存储来实现

扫描二维码关注公众号,回复: 4068238 查看本文章

 本案例代码地址:https://github.com/WangAlainDelon/DataStructure3.git

猜你喜欢

转载自blog.csdn.net/weixin_37650458/article/details/84023669