数据结构 3 线性表,栈,队列
线性表是由N个数据元素组成的有序序列。
它在计算机中有顺序存储结构和链式存储结构。
顺序存储结构:把逻辑上相邻的数据元素存储在物理上相邻的存储单元中,也就是一组连续的存储单元。
优点:知道某个元素的存储位置,通过计算就能知道其他元素的存储位置。
缺点:新增和删除需要调整其他数据元素的存储地址,麻烦。
链式存储结构:逻辑上相邻的数据元素不一定存储在物理上相邻的存储单元中,每个存储单元出了数据元素外还存有下一个数据元素所在的地址。
优点:新增和删除时,不需要调整其他数据元素,只需要修改相应的地址,比如在 1|a|2,2|b|3,3|c|null的a和b元素中插入一个d,只需要1a|4,2|b|3,c|null,4d|2这样就行了。
缺点:存取时必须从链表首节点进入,一个一个往下找,查询慢。
栈是一种特殊的线性表。
插入和删除操作都只能在栈顶进行,也就是,后进先出。
其实我们编程,程序执行的顺序,就是栈的入栈和出栈顺序
当我们main方法里调用func1时,会把方法main和它的参数压到栈底,再压入方法func1和它的参数,fun2同理,出栈就是方法实际执行的过程。这也是为什么,main的局部变量a,b传给了func1,假如func1中修改了它们,但是执行完func1后执行c=a+b时,发现a.b都还是原来的值,因为在函数调用栈中,它们根本不在一个内存位置(当然我们加上ref 关键字,就可以让func1的参数a,b引用main的参数a,b,实现改变)。
队列也是一种特殊的线性表
只允许在一端插入,在另一端删除,也就是先进先出。
双端队列仍然是一种线性表
栈和队列能实现的功能双端队列都能实现。
我们redis的队列类型,就是双端队列。
另外我们常用的string字符串和数组,都是线性表。