数据结构入门
数据结构,主要就是学习“如何存储具有复杂关系的数据更有助于后期对数据的再利用”。
数据结构大致包含以下几种存储结构:线性表(可细分为顺序表、链表、栈和队列)、树结构(普通树,二叉树,线索二叉树等)和
图存储结构。
1、线性表
线性表结构存储的数据往往是可以依次排列的,具备“一对一”关系的数据就可以使用线性表来存储。线性表并不是一种具体的存储结构,它包含顺序存储结构和链式存储结构,是顺序表和链表的统称。
1.1 顺序表
类似于数组。顺序表结构的底层实现借助的就是数组。但是数据结构是研究数据存储方式的一门学科,它囊括的都是各种存储结构,而数组只是各种编程语言中的基本数据类型,并不属于数据结构的范畴。
使用顺序表(底层实现靠数组)时,需要提前申请一定大小的存储空间,这块存储空间的物理地址是连续的。
1.2 链表
使用链表存储数据时,是随用随申请,因此数据的存储位置是相互分离的,换句话说,数据的存储位置是随机的。为了给各个数据块建立“依次排列”的关系,链表给各数据块增设一个指针,每个数据块的指针都指向下一个数据块(最后一个数据块的指针指向 NULL)。
1.3 栈和队列
栈和队列隶属于线性表,是特殊的线性表,因为它们对线性表中元素的进出做了明确的要求。栈中的元素只能从线性表的一端进出(另一端封死),且要遵循“先入后出”的原则,即先进栈的元素后出栈。
队列中的元素只能从线性表的一端进,从另一端出,且要遵循“先入先出”的特点,即先进队列的元素也要先出队列。
2、树存储结构
树存储结构适合存储具有“一对多”关系的数据。
3、图存储结构
图存储结构适合存储具有“多对多”关系的数据。
4、算法时间复杂度和空间复杂度
算法,即解决问题的方法。同一个问题,使用不同的算法,虽然得到的结果相同,但是耗费的时间和资源是不同的。算法是解决某个问题的想法、思路;而程序是在心中有算法的前提下编写出来的可以运行的代码。
4.1 好算法的标准
对于一个算法,必须能够解决对应的问题(称为准确性)。其次,通过这个算法编写的程序要求在任何情况下不能崩溃(称为健壮性)。如果准确性和健壮性都满足,接下来,就要考虑最重要的一点:通过算法编写的程序的运行效率。
运行效率体现在两方面:算法的运行时间。(称为“时间复杂度”);运行算法所需的内存空间大小。(称为“空间复杂度”)。
好算法的标准就是:在符合算法本身的要求的基础上,使用算法编写的程序运行的时间短,运行过程中占用的内存空间少,就可以称这个算法是“好算法”。