Java实现Array、Stack、Queue

概念

数据结构表示的是计算机中的存储和组织形式,主要描述数据之间的位置关系等,选择合适的数据结构,可以提高程序的运行速率,减少存储空间。

数据的三种结构

  • 数据的逻辑结构: 描述数据之间的逻辑关系 (集合、线性、树形和网状)

  • 数据的存储结构: 主要描述数据元素之间的位置关系。(顺序、链式、索引和散列)

  • 数据的操作集合: 主要描述如何实现数据结构

此次为大家着重介绍基于Java实现数据的逻辑结构。

数据的逻辑结构

  • 集合结构

    1. 成员是无序的;

    2. 成员只在集合中出现一次;

  • 线性结构

    1. 具有一对一关系的数据

    2. 存在前驱和后继

  • 树形结构

    1.数据间存在一对多关系

  • 网站结构

    1.数据间存在多对多的关系

Array基于Java实现

特点:

  • 只能存储同一数据类型

  • 大小固定,不能动态扩容

查询实现:

//查询后返回的为该数在此数组中的下标
public int find(int searchKey){
   int i;
   for(i = 0; i < length; i++){
       if(intArray[i] == searchKey)
          break;
   }
   if(i == length){
       return -1;
    }
       return i;  //返沪查找数据的索引下标
}

添加实现:

// elems为数组下标索引;length为数组长度
 public void add(int value){
   if(elems == length){
        System.out.println("error 数组已满");
        return;
   }
   intArray[elems] = value;
      elems++;
}

删除实现:

//删除实现主要是通过传递的参数,
//调用查询方法 查到了则执行删除 未查到则返回false。
public boolean delete(int value){
    int i = find(value);
    if(i == -1){
        return false;
    }
    for (int j = i; j < elems-1; j++) {
    //后面的数据往前移
        intArray[j] = intArray[j + 1];
    }
  elems--;
  return true;
}

更新实现:

 /**
   * @param oldValue  需要替换的数据
   * @param newValue  新的数据
   * @return 布尔值 更新成功返回ture 否则false
*/
public boolean update(int oldValue,int newValue){
     int i = find(oldValue);
     if(i == -1){
         return false;
     }
     intArray[i] = newValue;
     return true;
}

Stack基于Java实现

栈的特点

  • 最主要的是先进后出;

  • 是一种特殊的线性表,只能在表尾进行插入删除操作;

  • 栈的所有插入和删除只能在栈顶进行。

动态扩容

    public void grow(){
        if(top == maxSize-1){
            maxSize = maxSize<<1;
            objArray = Arrays.copyOf(objArray,maxSize);
        }
    }

出栈

   public Object objPop(){
        Object obj = peekTop();
        objArray[top--] = null;
        return obj;
    }

入栈

    public void objPush(Object obj){
        //扩容
        grow();
        objArray[++top] = obj;
    }

Queue基于Java实现

队列特点

先进先出的数据结构,类似于生活中的排队

使用Java实现常见的Queue方法

 //使用数组模拟一个arrayQueue类
class ArrayQueue{
    private int maxSize;
    private int front; //队头
    private int rear; // 队尾
    private int arr[] ; // 数组 存放数据

    //创造队列的构造器
    public ArrayQueue(int arrmaxSize){
        maxSize = arrmaxSize;
        arr = new int [maxSize];
        front = -1; //指向对头的前一个位置
        rear = -1; //队尾的前一个位置
    }
    //判断队列是否满
    public  boolean isFull(){
        return rear == maxSize -1;
    }
    //是否为空
    public boolean isEmpty(){
        return rear == front;
    }
    //添加数据
    public void addQueue(int n ){
        if (isFull()){
            System.out.println("队列满!");
            return;
        }else {
            rear++; //后移
            arr[rear] = n;
        }
    }
    //出队列 获取数据
    public int getQueue(){
        //判断队列是否空
        if(isEmpty()){
            throw  new RuntimeException("队列为空!");
        }
        front++; //后移
        return arr[front];
    }
    //显示队列
    public void showQueue(){
        if (isEmpty()){
            System.out.println("无法便利!");
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
    //显示数据头
    public int headQueue(){
        //判断
        if (isEmpty()){
            System.out.println("为空!");
        }
        return arr[front+1];
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值