数据结构分类:线性结构和非线性结构

线性结构包括:数组,链表,队列,栈;

非线性结构包括:树,图,表;

数组是查询快,插入和删除慢,因为需要对元素移动空间

链表是元素可以不连续内存中,是以索引将数据联系起来的,插入和删除快,查询慢

队列

特点:先进先出,

使用场景:多线程阻塞队列管理非常有用

数组与链表的区别

数组连续,链表不连续(从数据存储形式来说)

数组内存静态分配,链表动态分配

数组从栈中分配内存。链表从堆中分配内存。

1.集合

数据结构中的元素之间除了“同属一个集合” 的相互关系外,别无其他关系;

2.线性结构

数据结构中的元素存在一对一的相互关系;

3.树形结构

数据结构中的元素存在一对多的相互关系;

4.图形结构

数据结构中的元素存在多对多的相互关系。

算法

1)插入排序(直接插入排序、希尔排序)

2)交换排序(冒泡排序、快速排序)

3)选择排序(直接选择排序、堆排序)

4)归并排序

5)分配排序(基数排序)

所需辅助空间最多:归并排序

所需辅助空间最少:堆排序

平均速度最快:快速排序

不稳定:快速排序,希尔排序,堆排序。

直接插入排序

(1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排

好顺序的,现在要把第n 个数插到前面的有序数中,使得这 n个数

也是排好顺序的。如此反复循环,直到全部排好顺序。

简单选择排序

(1)基本思想:在要排序的一组数中,选出最小的一个数与第一个位置的数交换;

然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一

个数比较为止。

.冒泡排序

(1)基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对

相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的

数比较后发现它们的排序与排序要求相反时,就将它们互换。

.快速排序

(1)基本思想:选择一个基准元素,通常选择第一个元素或者最后一个元素,通过一趟扫描,

将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素,此时基准元素在其

排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分。