什么是数据结构
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
数据结构有很多种,一般来说,按照数据的逻辑结构对其进行简单的分类,包括线性结构和非线性结构两类。
线性结构:
1、线性结构是非空集。
2、线性结构有且仅有一个开始结点和一个终端结点。
3、线性结构所有结点都最多只有一个直接前趋结点和一个直接后继结点。
非线性结构
1、非线性结构是非空集。
2、非线性结构的一个结点可能有多个直接前趋结点和多个直接后继结点。
——百度百科
链表
链表是一种数据元素按照链式存储结构进行存储的数据结构,这种存储结构具有在物理上存在非连续的特点。链表由一系列数据结点构成,每个数据结点包括数据域和指针域两部分。其中,指针域保存了数据结构中下一个元素存放的地址。链表结构中数据元素的逻辑顺序是通过链表中的指针链接次序来实现的。
正在链表中,数据的添加和删除都比较方便,但是访问比较耗费时间。
在链表中,数据一般分散储存在内存中,并没有顺序,只能依靠指针找到下一个数据。所以数据访问只能从表头一个个查找下去。
由于依靠指针链接下一个数据,所以链表添加数据时,只需改变添加位置前后指针即可;而删除数据,只需改变被删除数据的前一个数据指针。
链表表示:
链表添加数据
链表删除数据
*当链表尾部使用指针并指向链表头部数据时,链表就变成环形,称为“循环链表”或“环形链表”。
数组
数组是一种聚合数据类型,它是将具有相同类型的若干变量有序地组织在一起的集合。数组可以说是最基本的数据结构,在各种编程语言中都有对应。一个数组可以分解为多个数组元素,按照数据元素的类型,数组可以分为整型数组、字符型数组、浮点型数组、指针数组和结构数组等。数组还可以有一维、二维以及多维等表现形式。
与链表不同,数组访问数据十分简单,而添加和删除数据比较耗费时间。
数组按顺序储存在内存的连续空间内,每个数据的内存地址都可以通过数组的下标计算出来,所以我们可以借此直接访问是数据。
而添加数据时,需要确保数组空间足够,然后再将添加位置后面的数据从尾部开始,一个个依次后移。删除数据时,需要将后面的数据一个个依次往前面移动,填补删除数据的空白。
数组结构
数组添加数据
数组删除数据
栈
栈是一种特殊的线性表,它只能在一个表的一个固定端进行数据结点的插入和删除操作。栈按照后进先出的原则来存储数据,也就是说,先插入的数据将被压入栈底,最后插入的数据在栈顶,读出数据时,从栈顶开始逐个读出。栈在汇编语言程序中,经常用于重要数据的现场保护。栈中没有数据时,称为空栈。
栈,“后进先出”的结构成为lsat in first out,简称LIFO。与链表和数组一样,栈的数据也是线性排列,在栈中,添加和删除只能在一端进行,数据的访问也只能访问到顶端数据,想要访问中间数据就必须通过出栈操作,将需要访问的数据移到栈顶。
队列
队列和栈类似,也是一种特殊的线性表。和栈不同的是,队列只允许在表的一端进行插入操作,而在另一端进行删除操作。一般来说,进行插入操作的一端称为队尾,进行删除操作的一端称为队头。队列中没有元素时,称为空队列。队列和栈类似,也是一种特殊的线性表。和栈不同的是,队列只允许在表的一端进行插入操作,而在另一端进行删除操作。一般来说,进行插入操作的一端称为队尾,进行删除操作的一端称为队头。队列中没有元素时,称为空队列。
队列,“先进先出”的结构成为first in first out,简称FIFO。队列数据的添加和删除分别在两端进行,访问中间数据只能通过出队操作把需要访问的数据移至首位才能进行访问。
堆
堆是一种特殊的树形数据结构,一般讨论的堆都是二叉堆。堆的特点是根结点的值是所有结点中最小的或者最大的,并且根结点的两个子树也是一个堆结构。
堆中的每个节点最多有两个子节点,节点的顺序2为从上到下,从左到右。并且,子节点必定大于父节点,因此数据中的最小值被储存在根节点中。
往堆中添加数据时,一般把新数据放在最下面一行靠左,再同其父节点进行比较,直至满足“子节点必定大于父节点”。
从堆中去除数据时,取出最上面的数据,堆始终保持最上面的数据最小,然后将最下面最右的数据放至根节点,再与子节点进行比较,直至满足“子节点必定大于父节点”。
堆结构
堆中添加数据
堆中取出数据
来源:CSDN
作者:瓦砾
链接:https://blog.csdn.net/weixin_39810306/article/details/103755550