Java数据结构与算法-数组

  1 public class TestMyArray{
  2
  3     public static void main(String[] args) {
  4
  5         MyArray array = new MyArray(6);
  6         array.insert(10);
  7         array.insert(12);
  8         array.insert(8);
  9         array.insert(17);
 10         array.insert(6);
 11         array.insert(15);
 12         array.display();
 13         System.out.println(array.search(12));
 14
 15         System.out.println(array.get(1));
 16
 17         array.delete(1);
 18         array.delete(3);
 19         array.display();
 20
 21     }
 22
 23 }
 24
 25 /**
 26  * 使用自定义类封装数组 添加类方法实现操作
 27  *
 28  */
 29 class MyArray {
 30     private long[] array;
 31     //表示有效数据的长度
 32     private int elements;
 33     public MyArray() {
 34         array = new long[50];
 35     }
 36
 37     public MyArray(int maxSize) {
 38         array = new long[maxSize];
 39     }
 40
 41     /**
 42      * 添加数据
 43      */
 44     public void insert(long value){
 45         array[elements] = value;
 46         elements++;
 47     }
 48
 49     /**
 50      * 显示数据
 51      */
 52     public void display(){
 53         System.out.print("[" + array[0]);
 54         for(int i= 1; i < elements; i++){
 55             System.out.print("," + array[i]);
 56         }
 57         System.out.println("]");
 58     }
 59
 60     /**
 61      * 查找数据
 62      */
 63     public int search(long value){
 64         int i = 0;
 65         for(; i < elements; i++){
 66             if(value == array[i]){
 67                 break;
 68             }
 69         }
 70         if(i == elements){
 71             return -1;
 72         } else {
 73             return i;
 74         }
 75     }
 76     /**
 77      * 查找数据,根据索引来查
 78      */
 79     public long get(int index){
 80         indexOK(index);
 81         return array[index];
 82     }
 83
 84     /**
 85      * 删除数据
 86      */
 87     public void delete(int index){
 88         indexOK(index);
 89         elements--;
 90         for(int i = index; i < elements; i++){
 91             array[i] = array[i+1];
 92         }
 93     }
 94
 95     /**
 96      * 更新数据
 97      */
 98     public void change(int index, int newValue){
 99         indexOK(index);
100         array[index] = newValue;
101     }
102
103     /**
104      * 角标越界
105      */
106     public void indexOK(int index){
107         if(index >= elements || index < 0){
108             throw new ArrayIndexOutOfBoundsException();
109         }
110     }
111 }
  1 package cn.array;
  2
  3 /**
  4  * 有序数组
  5  */
  6 public class TestMyOrderArray{
  7
  8     public static void main(String[] args) {
  9
 10         MyOrderArray array = new MyOrderArray(6);
 11         array.insert(10);
 12         array.insert(12);
 13         array.insert(8);
 14         array.insert(17);
 15         array.insert(6);
 16         array.insert(15);
 17         array.display();
 18         System.out.println(array.search(12));
 19
 20         System.out.println(array.get(1));
 21
 22         array.delete(1);
 23         array.delete(3);
 24         array.insert(3);
 25         array.display();
 26
 27     }
 28
 29 }
 30
 31 /**
 32  * 使用自定义类封装数组 添加类方法实现操作
 33  *
 34  */
 35 class MyOrderArray{
 36     private long[] array;
 37     //表示有效数据的长度
 38     private int elements;
 39     public MyOrderArray() {
 40         array = new long[50];
 41     }
 42
 43     public MyOrderArray(int maxSize) {
 44         array = new long[maxSize];
 45     }
 46
 47     /**
 48      * 添加数据
 49      */
 50     public void insert(long value){
 51         int i ;
 52         for(i = 0; i < elements; i++){
 53             if(array[i] > value){
 54                 break;
 55             }
 56         }
 57
 58         for(int j = elements ; j > i ; j--){
 59             array[j] = array[j - 1];
 60         }
 61
 62         array[i] = value;
 63         elements++;
 64     }
 65
 66     /**
 67      * 显示数据
 68      */
 69     public void display(){
 70         System.out.print("[" + array[0]);
 71         for(int i= 1; i < elements; i++){
 72             System.out.print("," + array[i]);
 73         }
 74         System.out.println("]");
 75     }
 76
 77     /**
 78      * 查找数据
 79      */
 80     public int search(long value){
 81         int i = 0;
 82         for(; i < elements; i++){
 83             if(value == array[i]){
 84                 break;
 85             }
 86         }
 87         if(i == elements){
 88             return -1;
 89         } else {
 90             return i;
 91         }
 92     }
 93     /**
 94      * 查找数据,根据索引来查
 95      */
 96     public long get(int index){
 97         indexOK(index);
 98         return array[index];
 99     }
100
101     /**
102      * 删除数据
103      */
104     public void delete(int index){
105         indexOK(index);
106         elements--;
107         for(int i = index; i < elements; i++){
108             array[i] = array[i+1];
109         }
110     }
111
112     /**
113      * 更新数据
114      */
115     public void change(int index, int newValue){
116         indexOK(index);
117         array[index] = newValue;
118     }
119
120     /**
121      * 角标越界
122      */
123     public void indexOK(int index){
124         if(index >= elements || index < 0){
125             throw new ArrayIndexOutOfBoundsException();
126         }
127     }
128 }
 1 /**
 2      * 二分法查找数据
 3      */
 4     public int binarySearch(long value){
 5         int middle = 0;
 6         int low = 0;
 7         int pow = elements;
 8
 9         while(true){
10             middle = (pow + low) / 2;
11             if(array[middle] == value){
12                 return middle;
13             }else if(low > pow){
14                 return -1;
15             }else{
16                 if(array[middle] > value){
17                     pow = middle - 1;
18                 }else {
19                     low = middle + 1;
20                 }
21             }
22
23         }
24
25     }
时间: 2024-10-23 20:16:32

Java数据结构与算法-数组的相关文章

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

数组的用处是什么呢?--当你需要将30个数进行大小排列的时候,用数组这样的数据结构存储是个很好的选择,当你是一个班的班主任的时候,每次要记录那些学生的缺勤次数的时候,数组也是很有用.数组可以进行插入,删除,查找等. 1)创建和内存分配 Java中有两种数据类型,基本类型和对象类型,也有人称为引用类型,Java中把数组当成对象,创建数组时使用new操作符. int array[] = new int[10]; 既然是对象,那么array便是数组的一个引用,根据Java编程思想(一) -- 一切都是

Java数据结构和算法之数组与简单排序

一.数组于简单排序 数组 数组(array)是相同类型变量的集合,可以使用共同的名字引用它.数组可被定义为任何类型,可以是一维或多维.数组中的一个特别要素是通过下标来访问它.数组提供了一种将有联系的信息分组的便利方法. 一维数组 一维数组(one‐dimensional array )实质上是相同类型变量列表.要创建一个数组,你必须首先定义数组变量所需的类型.通用的一维数组的声明格式是: type var‐name[ ]; 获得一个数组需要2步: 第一步,你必须定义变量所需的类型. 第二步,你必

Java数据结构与算法之数组

数组特点: 1.大小固定 2.同一数据类型 3.下标访问 4.数据项可重复 Java数据类型:基本类型(int和double)和对象类型.在许多编程语言中,数组也是基本类型.但在Java中把它们当作对象来对待,因此在创建数组时必须使用new操作符. 有序数组与无序数组比较:最主要的好处是查找速度比无序数组快多了.不好的方面是在插入操作中由于所有靠后的数据都需要移动以疼开空间,所以速度较慢.有序数组和无序数组数据中的删除操作都很慢,这是因为数据项必须向前移动来填补已删除数据项的空洞. 数据访问:从

《Java数据结构和算法》- 数组

Q: 数组的创建? A: Java中有两种数据类型,基本类型和对象类型,在许多编程语言中(甚至面向对象语言C++),数组也是基本类型.但在Java中把数组当做对象来看.因此在创建数组时,必须使用new操作符: int [] objArray = null; // defines a reference to an array objArray = new int[100]; // creates the array, and sets objArray to refer to it 或使用等价的

Java数据结构和算法之递归

四.递归 递归是函数调用自身的一种特殊的编程技术,其应用主要在以下几个方面:   阶乘 在java当中的基本形式是: Public  void  mothed(int n){//当满足某条件时: Mothed(n‐1): } 递归二分查找 Java二分查找实现,欢迎大家提出交流意见.  /** *名称:BinarySearch *功能:实现了折半查找(二分查找)的递归和非递归算法. *说明: *     1.要求所查找的数组已有序,并且其中元素已实现Comparable<T>接口,如Integ

Java数据结构与算法之集合

线性表.链表.哈希表是常用的数据结构,在进行Java开发时,SDK已经为我们提供了一系列相应的类来实现基本的数据结构.这些类均在java.util包中. 一.Collection接口 Collection是最基本的集合接口,一个Collection代表一组Object.一些Collection允许相同元素而另一些不行.一些能排序而另一些不行.Java  SDK不提供直接继承自Collection的类,Java  SDK提供的类都是继承自Collection的"子接口"如List和Set

Java数据结构和算法之链表

三.链表 链结点 在链表中,每个数据项都被包含在'点"中,一个点是某个类的对象,这个类可认叫做LINK.因为一个链表中有许多类似的链结点,所以有必要用一个不同于链表的类来表达链结点.每个LINK对象中都包含一个对下一个点引用的字段(通常叫做next)但是本身的对象中有一个字段指向对第一个链结点的引用. 单链表 用一组地址任意的存储单元存放线性表中的数据元素. 以元素(数据元素的映象)  + 指针(指示后继元素存储位置)  = 结点(表示数据元素 或 数据元素的映象) 以"结点的序列&q

java数据结构与算法之顺序表与链表深入分析

转载请注明出处(万分感谢!): http://blog.csdn.net/javazejian/article/details/52953190 出自[zejian的博客] 关联文章: java数据结构与算法之顺序表与链表设计与实现分析 java数据结构与算法之双链表设计与实现 ??数据结构与算法这门学科虽然在大学期间就已学习过了,但是到现在确实也忘了不少,因此最近又重新看了本书-<数据结构与算法分析>加上之前看的<java数据结构>也算是对数据结构的进一步深入学习了,于是也就打算

Java数据结构和算法(一)——开篇

这篇文章里面不讲技术,抽空讲讲技术和通俗之间有一种奇特的关系,还有驱动力学习的东西. 1)技术与通俗 大学里面那本严蔚敏的数据结构不厚,内容丰富,但是复杂问题的讲解方面篇幅这样就少了,比较难理解,c也不是很擅长,但是基本的思路还是有的. 简单的链表,数组,堆栈,队列,图,几个排序算法. 后面看到知乎涛吴的回答,当时很震撼,这里引用一下他的回答: 如果说 Java 是自动档轿车,C 就是手动档吉普.数据结构呢?是变速箱的工作原理.你完全可以不知道变速箱怎样工作,就把自动档的车子从 A 开到 B,而