栈(2)——栈的顺序存储

 

目录

 

1. 基本概念;

2. 设计与实现;

2.1 建立动态数组实体类SeqStack类;

2.2 再建立方法类SeqStackDao类;

2.3 测试类SeqStackMain类;


 

1. 基本概念; 

栈的顺序存储结构简称顺序栈,它是运算受限制的顺序表;

顺序栈的存储结构:

        利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素;

        同时附设指针top指示栈顶元素在顺序表中的位置;

 

2. 设计与实现;

栈是一种特殊的线性表,所以栈的顺序存储可以通过顺序线性表(动态数组)来实现; 

2.1 建立动态数组实体类SeqStack类;

SeqStack:

包括栈的结点数据元素个数;还有一个动态数组的最大容量,我们设置为常量;

结点数据是Object类型的,元素个数是int的;

SeqStack:

package com.java.model;

public class SeqStack {

    //动态数组的最大容量
    public final static int Max_Size=1024;

    //栈的结点数据
    public Object[] data;
    //栈的长度,用来标识数组中的元素个数
    public int size;

    //构造函数
    public SeqStack(Object[] data, int size) {
        this.data = data;
        this.size = size;
    }
}

2.2 再建立方法类SeqStackDao类;

这里面包含了一些对顺序栈操作的方法;

如:初始化栈,入栈,出栈,查看栈顶元素,返回栈中元素个数等;

package com.java.dao;

import com.java.model.SeqStack;

import static com.java.model.SeqStack.Max_Size;

public class SeqStackDao {

    //初始化栈
    public SeqStack Init_SeqStack(){
        //动态数组初始化,加数组容量
        Object[] data1=new Object[Max_Size];

        //栈初始化,元素个数size为0
        SeqStack stack=new SeqStack(data1,0);

        //数组赋值
        for(int i=0;i<Max_Size;i++){
            stack.data[i]=0;
        }
        return stack;
    }
    //入栈
    public void Push_SeqStack(SeqStack stack,Object data){
        if(stack==null){
            return;
        }
        if(data==null){
            return;
        }
        //如果栈容量小于或等于数组容量
        if(stack.size==Max_Size){
            return;
        }
        //元素入栈
        stack.data[stack.size]=data;
        stack.size++;
    }
    //查找栈顶元素
    public Object Top_SeqStack(SeqStack stack){
        if(stack==null){
            return null;
        }
        //若栈元素为0,则返回null
        if(stack.size==0){
            return null;
        }
        //栈顶元素,注意数组下标从0开始,所以要减1
        Object o=stack.data[stack.size-1];
        return o;
    }
    //出栈操作
    public void Pop_SeqStack(SeqStack stack){
        if(stack==null){
            return;
        }
        if(stack.size==0){
            return;
        }
        //出栈
        stack.size--;
    }
    //判断是否为空
    public boolean IsEmpty(SeqStack stack){
        if(stack==null){
            return false;
        }
        if(stack.size==0){
            return true;
        }
        return false;
    }
    //返回栈中元素的个数
    public int Size_SeqStack(SeqStack stack){
        return stack.size;
    }
    //清空栈
    public void Clear_SeqStack(SeqStack stack){
        if(stack==null){
            return;
        }
        for(int i=0;i<stack.size;i++){
            stack.data[i]=null;
        }
        stack.size=0;
    }

}

2.3 测试类SeqStackMain类;

这个主要是包含主函数,进行测试的类;

package com.java.main;

import com.java.dao.SeqStackDao;
import com.java.model.SeqStack;

public class SeqStackMain {
    public static void main(String[] args) {
        SeqStackDao seqStackDao=new SeqStackDao();
        //初始化栈
        SeqStack stack=seqStackDao.Init_SeqStack();

        //入栈
        seqStackDao.Push_SeqStack(stack,"A");
        seqStackDao.Push_SeqStack(stack,"B");
        seqStackDao.Push_SeqStack(stack,"C");
        seqStackDao.Push_SeqStack(stack,"D");
        seqStackDao.Push_SeqStack(stack,"E");

        //输出栈元素
        while(stack.size>0) {
            //查找栈顶元素
            Object o = seqStackDao.Top_SeqStack(stack);
            System.out.println(o);
            //出栈
            seqStackDao.Pop_SeqStack(stack);
        }
    }
}

 测试结果:

可以看到入栈元素的顺序与出栈元素的顺序相反!

 

项目源码地址:

https://gitee.com/Huke-123/DataConstruct

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值