引入

数据结构是带有结构特性的数据元素的集合。

在面向过程编程中,我们通常使用顺序、选择、循环三种结构以及变量来进行编程。但是有些时候,这三种方法加上单一的变量在解答某些问题时显得相形见绌,所以这个时候就需要一些辅助的结构来帮助运算,这种结构就是数据结构。

举例

数据结构在数据的存储和查找时总得较多,比如编程序存储一些数据时,不可能把这些数据存放在固定的空间里,因为这样会很浪费存储空间,这时就需要用到数据结构里的链表,动态存储。

分类

  1. 逻辑结构

    指数据对象中数据元素之间的相互关系

  2. 物理结构

    指数据的逻辑结构在计算机中的存储形式

四大逻辑结构

  1. 集合结构
    只同属于同一个集合,各元素无其它关系(只在一起没啥关系)
2.线性结构

​ 各元素关系只属于一对一的线性关系(一个接着一个一条线关系)

3.树形结构

​ 元素存在一对多的关系(类似于金字塔结构)

4.图形结构

​ 各个元素间多对多的关系(各元素间有复杂关系)

常见数据结构

图片.png

1、数组(线性表):常用的数组有一二三维数组,数据集中有序排列在一块区域

​ 优:便于查找

​ 缺:不便于插入删除,添加元素(因为要移动其它元素)

2、链表:这种结构中以节点形式存储数据,一个节点包括数据位和地址位,数据位存储数据,地址位存储下一个数据的地址。物理存储单元上非连续的、非顺序的存储结构,数据元素的逻辑顺序是通过链表的指针地址实现

​ 优:不便于查找

​ 缺:便于插入删除

3、 栈:栈是一种特殊的线性表,仅能在线性表的一端操作,栈顶允许操作,栈底不允许操作。 栈的特点是:先进后出,或者说是后进先出,从栈顶放入元素的操作叫入栈。调用完后立即释放。(由系统自动分配释放)

​ 优:读取速度快,而且数据可以共享。

​ 缺:存在于栈中的数据大小及周期必须是确定的,缺乏灵活性。

4、堆:就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动收回。(可以说由程序员自身决定创建和释放)

​ 优:可以动态分配内存大小,生存期也不必告诉编译器,因为它是在运行中动态分配内存的。

​ 缺:缺点就是由于是在运行时动态分配内存的,所以读取速度较慢。

5、 队列:队列和栈类似,也是一种特殊的线性表。和栈不同的是,队列只允许在表的一端进行插入操作,而在另一端进行删除操作。一般来说,进行插入操作的一端称为队尾,进行删除操作的一端称为队头。队列中没有元素时,称为空队列。(可以说先进先出,后进后出)

​ 优:有序以便于查找等

​ 缺:灵活度不够

6、 树:树是典型的非线性结构,它是包括,2个结点的有穷集合K。在树结构中,有且仅有一个根结点,该结点没有前驱结点。在树结构中的其他结点都有且仅有一个前驱结点,而且可以有两个后继结点,m≥0。

​ 优:查找,插入,删除都快

​ 缺:算法复杂

7、哈希表(散列表)

​ 优:如果关键字已知则存取极快,插入快

​ 缺:删除慢,如果不知道关键词则存取很慢,对存储空间使用不充分

8、是另一种非线性数据结构。在线性表中我们把数据元素叫元素,树中将数据元素叫结点,在图数据元素称之为顶点,而边是顶点的有序偶对。如果两个顶点之间存在一条边,那么就表示这两个顶点具有相邻关系。

​ 优:能对现实世界建模

​ 缺:算法慢且复杂

总结

常见数据结构优缺点汇总

图片.png

图片.png