java数据结构系列之——数组(2):有序数组

package Array;

/**
 * 排序数组,向数组中添加元素时维护数组的有序性;
 * @author wl
 *
 */
public class MyOrderArray {
	private long array[];
	private int elements;//用于记录数组中实际数据的个数

	public MyOrderArray(){
		array=new long[50];//数组默认长度为50;
	}

	public MyOrderArray(int capacity){//设置数组的默认长度
		array=new long[capacity];
	}

	/**
	 * 向数组中插入元素,并维护数组中元素的有序性
	 */
	public void add(long data){
		if(elements>array.length-1){
			throw new ArrayIndexOutOfBoundsException();
		}

		int i;
		for(i=0;i<elements;i++){
			if(array[i]>data){
				break;
			}
		}

		for(int j=elements;j>i;j--){
			array[j]=array[j-1];
		}
		array[i]=data;
		elements++;
	}

	/**
	 * 删除index处的元素
	 * @param index
	 */
	public void delete(int index){
		if(index>=array.length||index<0){
			throw new IndexOutOfBoundsException();
		}
		for(int i=index;i<=elements;i++){
			array[i]=array[i+1];
		}
		elements--;
	}

	/**
	 * 删除元素data
	 * @param data
	 */
	public void delete(long data){
		int addr=search(data);
		if(addr==-1){
			System.out.println(data+"不存在");
		}else{
			for(int i=addr;i<=elements;i++){
				array[i]=array[i+1];
			}
			elements--;
		}
	}

	/**
	 * 用二分查找(折半查找)法查找数组中data的下标位置
	 * @param data
	 * @return
	 */
	public int binarySearch(long data){
		int low,high,mid;

		low=0;
		high=elements;

		while(low<=high){
			mid=low+(high-low)/2;

			if(data<array[mid]){
				high=mid-1;
			}else if(data>array[mid]){
				low=mid+1;
			}else{
				return mid;
			}
		}
		return -1;
	}
	/**
	 * 查找index处的元素
	 * @param index
	 * @return
	 */
	public long search(int index){
		if(index>=array.length||index<0){
			throw new IndexOutOfBoundsException();
		}
		return array[index];
	}

	/**
	 * 查找array中data值所在下标
	 * @param data
	 * @return
	 */
	public int search(long data){
		int i;
		for(i=0;i<=elements;i++){
			if(array[i]==data){
				return i;
			}
		}
		return -1;
	}

	/**
	 * 打印数组中的内容
	 */
	public void display(){
		System.out.print("[");
		for(int i=0;i<elements-1;i++){
			System.out.print(array[i]+",");
		}
		System.out.print(array[elements-1]);
		System.out.println("]");
	}
}

时间: 2024-10-09 22:54:32

java数据结构系列之——数组(2):有序数组的相关文章

Java数据结构和算法(二)——数组

上篇博客我们简单介绍了数据结构和算法的概念,对此模糊很正常,后面会慢慢通过具体的实例来介绍.本篇博客我们介绍数据结构的鼻祖——数组,可以说数组几乎能表示一切的数据结构,在每一门编程语言中,数组都是重要的数据结构,当然每种语言对数组的实现和处理也不相同,但是本质是都是用来存放数据的的结构,这里我们以Java语言为例,来详细介绍Java语言中数组的用法. 1.Java数组介绍 在Java中,数组是用来存放同一种数据类型的集合,注意只能存放同一种数据类型. ①.数组的声明 第一种方式: 数据类型 []

Java数据结构与算法(第二章数组)

数组是应用最广泛的数据存储结构.它被植入到大部分编程语言中. Java中数组的基础知识     创建数组 在Java中把它们当作对象来对待,因此在创建数组是必须使用new操作符:     int[] intArray;            //defines a reference to an array     ingArray = new int[100];    //creates the array, and                                  //set

数组_有序数组

public class OrdArray { private long[] a; private int nElems; public OrdArray(int maxSize) { a=new long[maxSize]; nElems=0; } public int size() { return nElems; } //有序数组的插入(需要找到位置) public void insert(long value) { int j; for(j=0;j<nElems;j++) if(a[j]

Java数据结构系列(1)——自平衡二叉树

1.基本概念 所谓自平衡二叉树,就是当我们插入或删除元素之后,二叉树的高度会自动调整到最小,这样我们就可以在对数时间内查找二叉树内的元素. 2.定义 TreeSet<Elemtype> set=TreeSet<>(); 3.基本函数 set.ceiling(x) // 取set中大于等于x的最小值,没有就返回空 set.floor(x) // 取set中小于等于x的最大值,没有就返回空set.size() // 返回树的大小set.remove() // 移除树中元素set.add

java数据结构系列之——数组(1)

import javax.management.RuntimeErrorException; public class MyArray { private long array[]; private int elements;//用于记录数组中实际数据的个数 public MyArray(){ array=new long[50];//数组默认长度为50: } public MyArray(int capacity){//设置数组的默认长度 array=new long[capacity]; }

&lt;数据结构系列1&gt;封装自己的数组——手写动态泛型数组

哈哈,距离上一次写博客已经快过去半个月了,这这这,好像有点慢啊,话不多说,开始我们的手写动态泛型数组 首先是我们自己写一个自己的动态数组类,代码如下所示: public class Array<E> { //成员变量:数据,大小 private E[] data; private int size; //构造函数,传入数组的容量capacity public Array(int capacity) { data=(E[])new Object[capacity]; size=0; } //无参

java数据结构-栈的底层实现:数组实现压入,弹出,判断空栈测试代码

package com.stack; /** * @auther 付强 * @date 2020/2/13 - 13:08 */public class TestMystack { public static void main(String[] args) { //先创建一个栈 Mystack mystack = new Mystack(); //压入数据 mystack.push(9); mystack.push(8); mystack.push(7); mystack.push(6); m

【Leetcode 数组】 有序数组中出现次数超过25%的元素(1287)

题目 给你一个非递减的?有序?整数数组,已知这个数组中恰好有一个整数,它的出现次数超过数组元素总数的 25%. 请你找到并返回这个整数 示例: 输入:arr = [1,2,2,6,6,6,6,7,10] 输出:6 提示: 1 <= arr.length <= 10^4 0 <= arr[i] <= 10^5 解答 # class Solution: # def findSpecialInteger(self, arr): # d = {} # length = len(arr) #

Java数据结构系列之——队列(1):队列的顺序存储结构及其实现

package queue.sequencequeue; /** * 队列的定义:队列是只允许在一端进行插入操作,而在另外一端进行删除操作的线性表 * 队列是一种先进先出(First In First Out)的线性表,简称FIFO,允许插 * 入的一端称为队尾,允许删除的一端称为队头 * @author wl * */ public class SequenceQueue { private Object[] elementData;//用数组来保存队列的元素 private int fron