码迷,mamicode.com
首页 > 编程语言 > 详细

研磨数据结构与算法-01开山

时间:2015-09-17 21:44:54      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:算法

实现一个简单是List集合:

public class MyArray {

        //List本身底层就是一个数组,只是在这暂时定义成long类型

private long[] arr;

//表示有效数据的长度

private int elements;

//对象创建时为数组创建50长度

public MyArray() {

arr = new long[50];

}

//也可以自定义初始化数组长度

public MyArray(int maxsize//传入需要多少长度的数组) {

arr = new long[maxsize];

}

/**

* 添加数据

*/

public void insert(long value) {

                //添加赋值

arr[elements] = value;

               //增加有效数据长度

elements++;

}

/**

* 显示数据  遍历有效数据输出显示

*/

public void display() {

System.out.print("[");

for(int i = 0; i < elements; i++) {

System.out.print(arr[i] + " ");

}

System.out.println("]");

}

/**

* 查找数据 根据值在数组中查找下标

*/

public int search(long value) {

int i;

for(i = 0; i < elements; i++) {

if(value == arr[i]) {

break;

}

}

if(i == elements) {

return -1;

} else {

return i;

}

}

/**

* 查找数据,根据索引来查  根据下标查找数据值

*/

public long get(int index) {

if(index >= elements || index < 0) {

                         //如果传入的索引下标值不对 抛出异常

throw new ArrayIndexOutOfBoundsException();

} else {

return arr[index];

}

}

/**

* 删除数据

*/

public void delete(int index) {

if(index >= elements || index < 0) {

                       //如果传入的索引下标值不对 抛出异常

throw new ArrayIndexOutOfBoundsException();

} else {

for(int i = index; i < elements; i++) {

                                //从需要删除的数据开始,由后往前依次覆盖

arr[index] = arr[index + 1];

}

elements--;

}

}

/**

* 更新数据

*/

public void change(int index, int newvalue) {

if(index >= elements || index < 0) {

                        //如果传入的索引下标值不对 抛出异常

throw new ArrayIndexOutOfBoundsException();

} else {

                        //更新数据

arr[index] = newvalue;

}

}

}

带排序:


public class MyOrderArray {

private long[] arr;

//表示有效数据的长度

private int elements;

public MyOrderArray() {

arr = new long[50];

}

public MyOrderArray(int maxsize) {

arr = new long[maxsize];

}

/**

* 添加数据

*/

public void insert(long value) {

int i;

for(i = 0; i < elements; i++) {

if(arr[i] > value) {

break;

}

}

for(int j = elements; j > i; j--) {

arr[j] = arr[j - 1];

}

arr[i] = value;

elements++;

}

/**

* 显示数据

*/

public void display() {

System.out.print("[");

for(int i = 0; i < elements; i++) {

System.out.print(arr[i] + " ");

}

System.out.println("]");

}

/**

* 查找数据

*/

public int search(long value) {

int i;

for(i = 0; i < elements; i++) {

if(value == arr[i]) {

break;

}

}

if(i == elements) {

return -1;

} else {

return i;

}

}

/**

* 二分法查找数据

*/

public int binarySearch(long value) {

int middle = 0;

int low = 0;

int pow = elements;

while(true) {

middle = (pow + low) / 2;

if(arr[middle] == value) {

return middle;

} else if(low > pow) {

return -1;

} else {

if(arr[middle] > value) {

pow = middle - 1;

} else {

low = middle + 1;

}

}

}

}

/**

* 查找数据,根据索引来查

*/

public long get(int index) {

if(index >= elements || index < 0) {

throw new ArrayIndexOutOfBoundsException();

} else {

return arr[index];

}

}

/**

* 删除数据

*/

public void delete(int index) {

if(index >= elements || index < 0) {

throw new ArrayIndexOutOfBoundsException();

} else {

for(int i = index; i < elements; i++) {

arr[index] = arr[index + 1];

}

elements--;

}

}

/**

* 更新数据

*/

public void change(int index, int newvalue) {

if(index >= elements || index < 0) {

throw new ArrayIndexOutOfBoundsException();

} else {

arr[index] = newvalue;

}

}

}

测试:



public class TestMyArray {

public static void main(String[] args) {

MyArray arr = new MyArray();

                arr.insert(13);

                arr.insert(34);

                arr.insert(90);

    

                arr.display();

                System.out.println(arr.search(190));

    

                System.out.println(arr.get(1));

    

                arr.change(0, 12);

arr.display();

MyOrderArray arr = new MyOrderArray();

arr.insert(90);

arr.insert(30);

arr.insert(80);

arr.insert(10);

arr.display();

System.out.println(arr.binarySearch(30));

}

}


本文出自 “8159085” 博客,转载请与作者联系!

研磨数据结构与算法-01开山

标签:算法

原文地址:http://8169085.blog.51cto.com/8159085/1695805

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!