算法和数据结构(一)
一、入门
数据结构是为了让我们采用更高效的方式存储数据,这样我们的增删改查效率才会更高,因此我们大致可以得出一个概念,数据结构基本有着如下几个功能:1、插入一条新数据2、查询一条特定数据3、删除特定数据4、迭代的访问各个数据
平时编程中接触到的最简单最常见数组其实正是数据结构的鼻祖,可以说每一门编程语言中数组都是很重要的一种数据结构。我们就从数组说起数据结构。
在java中,数组是用来存放同一种类型的数据(object类型除外)
我们在熟悉了数组的基本用法后,让我们来写一点东西,封装一个类,实现一个数据结构的四个基本功能,下面上代码
package discovery; import lombok.Data; /** * Author :zhanghong * Date :2019-02-16 18:08. */ @Data public class MyArray { //定义一个数组 private int[] array; //定义有效长度 private int elems; //定义最大长度 private int length; //构造固定长度的数组 public MyArray(){ elems=0; length=50; array=new int[length]; } //构造指定长度的数组 public MyArray(int length){ elems=0; length=50; array=new int[length]; } //获取有效长度 public int GetSize(){ return elems; } //遍历显示元素 public void display(){ for(int i=0;i<elems;i++){ System.out.println(array[0]+" "); } System.out.println(); } //根据下标查找显示单个元素 public int getelement(int i){ if(i<0||i>elems){ System.out.println("数组下边越界"); } return array[i]; } //根据值返回数组下标 public int getindex(int e){ int i; for(i=0;i<elems;i++){ if(array[i]==e){ break; } } if(i==elems){ return -1; } return i; } //添加元素 public Boolean add(int e){ if(elems==length){ return false; }else { array[elems]=e; elems++; return true; } } //删除元素 根据值删除(如果删除的元素不是数组的最后一个元素,则需要循环把下一个元素值赋给上一个,最后有效长度-1) public Boolean delete(int e){ int index= getindex(e); if(index==-1){ return false; }else { if(index==elems-1){ elems--; }else { for(int i=index;i<elems-1;i++){ array[i]=array[i+1]; } elems--; } return true; } } //更新数组元素 public Boolean update(int oldvalue,int newvalue){ int index=getindex(oldvalue); if(index==-1){ return false; }else { array[index]=newvalue; return true; } } }
运行一下看结果
package discovery; /** * Author :zhanghong * Date :2018-08-13 15:00. */ public class Run { public static void main(String[] args) { // MyThread t1 = new MyThread(); // MyThread t2 = new MyThread(); // MyThread t3 = new MyThread(); // t1.start(); // t2.start(); // t3.start(); MyArray myArray=new MyArray(4); myArray.add(1); myArray.add(2); myArray.add(3); myArray.add(4); myArray.display(); int i=myArray.getelement(0); System.out.println(i); myArray.delete(4); myArray.display(); myArray.update(3,33); myArray.display(); } }
由此可见 数组是可以实现一个数据结构的基本功能的
但是我们也可以总结一下数组的一些特点:
- 插入很快,因为是无序的不需要对数据进行排序,只需要直接放到数组末尾即可,这样的特点是满足不了插入到指定位置的需求,有一定局限性
- 查找效率一般,根据数组下标查找是很快,但是实际开发中我们更多的是根据具体值的查找,我们发现在数组中查找值是需要遍历的,没查找一次都遍历一次,如果数据够大,那么效率就会很差
- 删除数据效率也不高,没删除一个数据,如果不是特殊情况(数据恰好在数组末尾),则需要循环赋值前移
- 最后就是他的扩展性,数组是需要确定数组大小的,一但确定了扩展性就很差,太长浪费资源,太短就会不够用
综上,数组方便易用,插入数据也很快,但是删除、查找效率不高,扩展性很差,因此我们需要更有效的数据结构,事实上也确实存在更加有效的数据结构,这是建立在复杂的算法之上的,因此,下一篇我将着重先复习一些经典的、基础的算法
加油!
posted on 2019-02-16 19:31 啊九九九九九九九九九九 阅读(84) 评论(0) 编辑 收藏 举报