栈
堆栈又名栈(stack),它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。——来自百度百科
栈就像一个水井,元素只能先进后出
栈顶(Top): 栈顶是允许进行插入(进栈、压栈、入栈)和删除(出栈、弹栈、退栈)操作的一端。
栈底(Bottom): 栈底是栈的另一端,固定且不允许进行插入和删除操作。
空栈(Empty Stack): 不含任何数据元素的栈称为空栈。
进栈(Push): 也称为压栈或入栈,是栈的插入操作。
出栈(Pop): 也称为弹栈或退栈,是栈的删除操作。
栈满(Full Stack): 当栈的存储空间已满,无法再进行进栈操作时,称栈为满栈。
栈空(Stack Empty): 当栈中不含任何元素时,称栈为空栈。
队列
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。——来自百度百科
队就像在食堂排队一样,只有先排队的人才能先吃饭,先进先出
队列(Queue): 队列是一种只允许在表的一端进行插入,而在另一端进行删除的线性表。
队头(Front): 队头是指队列中允许删除元素的一端。
队尾(Rear): 队尾是指队列中允许插入元素的一端。
空队列: 不包含任何元素的队列称为空队列。
进队(Enqueue): 也称为入队,是队列的插入操作。
出队(Dequeue): 也称为离队,是队列的删除操作。
队列满: 当队列的存储空间已满,无法再进行进队操作时,称队列为满队列。
链表
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,操作复杂。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是O(logn)和O(1)。——来自百度百科
每个元素由指针链接在一起,就像一条链子一样
结点(Node): 链表中的基本单元,每个结点包含两部分信息:一是数据域(Data Field),用于存储数据元素;二是指针域(Pointer Field),用于存储指向下一个结点的指针(或引用)。
首元结点(First Element Node): 链表中存储第一个数据元素的结点,即链表的第一个有效结点。
头结点(Head Node): 有时在链表的第一个有效结点之前会额外增设一个结点,这个结点称为头结点。头结点的数据域一般不存放有效数据(有些情况下也可以存放链表的长度等信息),其指针域存储指向首元结点的指针。头结点对于链表来说不是必须的,但在处理某些问题时,给链表添加头结点会使问题变得简单。
头指针(Head Pointer): 指向链表中的第一个结点,这个结点可以是首元结点,也可以是头结点(如果链表有头结点的话)。
末尾结点(Last Node): 链表中存储最后一个数据元素的结点,即链表的最后一个有效结点。
尾指针(Tail Pointer): 指向链表中的最后一个结点(即末尾结点)的指针。
空链表(Empty List): 不包含任何结点的链表称为空链表。