对于大多数的程序员来说,在学习数据分析等技术的时候需要先了解关于数据结构以及算法等知识点,下面我们就给大家简单介绍一下什么是数据结构?什么是算法?大部分数据结构和算法教材,在开篇都会给这两个概念下一个明确的定义。
但是,这些定义都很抽象,对理解这两个概念并没有实质性的帮助,反倒会让你陷入死抠定义的误区。
毕竟,我们现在学习,并不是为了考试,所以,概念背得再牢,不会用也就没什么用。
虽然我们说没必要深挖严格的定义,但是这并不等于不需要理解概念。
下面我就从广义和狭义两个层面,来帮你理解数据结构与算法这两个概念。
从广义上讲,数据结构就是指一组数据的存储结构。
算法就是操作数据的一组方法。
图书馆储藏书籍你肯定见过吧?为了方便查找,图书管理员一般会将书籍分门别类进行“存储”。
按照一定规律编号,就是书籍这种“数据”的存储结构。
那我们如何来查找一本书呢?有很多种办法,你当然可以一本一本地找,也可以先根据书籍类别的编号,是人文,还是科学、计算机,来定位书架,然后再依次查找。
笼统地说,这些查找方法都是算法。
从狭义上讲,也就是我们专栏要讲的,是指某些著名的数据结构和算法,比如队列、栈、堆、二分查找、动态规划等。
这些都是前人智慧的结晶,我们可以直接拿来用。
我们要讲的这些数据结构和算法,都是前人从很多实际操作场景中抽象出来的,经过非常多的求证和检验,可以高效地帮助我们解决很多实际的开发问题。
那数据结构和算法有什么关系呢?为什么大部分书都把这两个东西放到一块儿来讲呢?这是因为,数据结构和算法是相辅相成的。
数据结构是为算法服务的,算法要作用在特定的数据结构之上。
因此,我们无法孤立数据结构来讲算法,也无法孤立算法来讲数据结构。
比如,因为数组具有随机访问的特点,常用的二分查找算法需要用数组来存储数据。
但如果IT培训http://www.kmbdqn.cn/选择链表这种数据结构,二分查找算法就无法工作了,因为链表并不支持随机访问。
数据结构是静态的,它只是组织数据的一种方式。
如果不在它的基础上操作、构建算法,孤立存在的数据结构就是没用的。
给你写了答案如下,有问题再追问。
B
A
C
确切性
3
infexOf
队头指针指向队尾
对
对
顺序表:查找方便,但插入困难;
链表:查找困难,但插入方便。
// 最大值public static int getMax(int n, int[] arr) {//n是数组最后一个元素的index
if(n == 0)
return arr[0]
if(arr[n] > getMax(n - 1, arr))
return arr[n]
return getMax(n - 1, arr)
} // 平均值
public static int getAverage(int n, int[] arr) {//n是数组最后一个元素的index
if(n == 1)
return arr[0]
return (arr[n] + getAverage(n - 1, arr) * (n - 1)) / n
} //删除节点
public static Node rmNode(Node head, Node node) {
Node temp = head
while(temp.next != null) {
if(temp.next == node) {
temp.next = node.next
break
}
else
temp = temp.next
}
return head
} // 数组元素逆置
public static int[] inverseArray(int[] arr) {
int start = 0
int end = arr.length - 1
for( start < arr.length / 2 start++, end--) {
int temp = arr[start]
arr[start] = arr[end]
arr[end] = temp
}
return arr
于之前面试android的时候考到了很多关于java的知识,所以这次重温数据结构知识就打算用java来学习,毕竟android是以java为基础的,而且我现在学习的j2ee架构也是以java为基础的。java中的类就是对现实世界的对象的一种抽象,例如人就是一个类别,人有名字,联系电话,住址等成员属性,人拥有说话,吃饭,走路等成员方法。类就是这样,定义了一种对象,它有什么,会做什么。
继承——子类就是父类的一种特定类别。例如学生就是人的子类,学生属于人,是特定的一类人。所以我们让学生继承人,这样学生可以拥有人的属性和方法,也就是说,学生也有了名字,联系电话,住址等成员属性,拥有说话,吃饭,走路等成员方法。但是学生还有特定的一些方法(读书,上课),或者特定的一些属性(学号,年级),这些可以添加在子类中。
因为每个子类都属于父类,例如每个学生都属于人,所以可以用父类来引用子类的对象:People p = new Student()反过来不行。
java中一个类只能继承一个父类,也就是单继承。
但一个类可以实现多个接口,间接地实现了多继承。接口就是一系列方法的声明,没有实现。于之前面试android的时候考到了很多关于java的知识,所以这次重温数据结构知识就打算用java来学习,毕竟android是以java为基础的,而且我现在学习的j2ee架构也是以java为基础的。
java中的类就是对现实世界的对象的一种抽象,例如人就是一个类别,人有名字,联系电话,住址等成员属性,人拥有说话,吃饭,走路等成员方法。类就是这样,定义了一种对象,它有什么,会做什么。
继承——子类就是父类的一种特定类别。例如学生就是人的子类,学生属于人,是特定的一类人。所以我们让学生继承人,这样学生可以拥有人的属性和方法,也就是说,学生也有了名字,联系电话,住址等成员属性,拥有说话,吃饭,走路等成员方法。但是学生还有特定的一些方法(读书,上课),或者特定的一些属性(学号,年级),这些可以添加在子类中。
因为每个子类都属于父类,例如每个学生都属于人,所以可以用父类来引用子类的对象:People p = new Student()反过来不行。
java中一个类只能继承一个父类,也就是单继承。
但一个类可以实现多个接口,间接地实现了多继承。接口就是一系列方