数据结构之栈与队列重点

栈和队列
栈和队列都是一种操作受限的线性表。而栈分为顺序栈、链栈和共享栈。队列则分为循环队列、链式队列和双端队列。数组是线性表的一种推广,包括一维数组和多维数组。

:只允许在一端进行插入或删除操作的线性表。其特点是后进先出。顺序栈是利用一组地址连续的存储单元存放自栈底到栈顶的数据元素,同时附设一个指针用来指示当前栈顶的位置。进栈时,栈顶指针先加1,再送值到栈顶元素。出栈时,先取元素,再将栈顶元素减1。栈空条件是s.top==-1,栈满条件是s.top==MaxSize-1;栈长是s.top+1.共享栈是利用栈底位置相对不变,共享一个一维数据空间的栈结构。栈的链式存储便于栈共享存储空间和提高其效率,且不存在栈满上溢的情况并规定所有操作只能在单链表的表头进行。

队列:只允许在表的一端插入,而在表的另一端删除。其特点是先进先出。队列的顺序结构分配连续单元存放队列中的元素,并附设两个指针front,rear分别指示表头和表尾元素的位置。初始状态是Q.front==Q.rear==0;进队时,先送值到队尾元素,再将指针加1.出队时,先取队头值,再将队头指针加1.但是队列满的情况不好判定。因为如果Q.rear==MaxSize,也可能仅有一个元素。所以即存在假溢出的情况。而循环队列中,如果还是让Q.front==Q.rear不能判定栈满还是栈空。因此加入了tag元素,若tag等于0,若因删除导致Q.front==Q.rear则队空。若tag等于1,若因插入导致Q.front==Q.rear则队满。链式队列适合数据元素变动比较大的情形,不存在队满和溢出的情况。而双端队列则表示两端都可以入队和出队。

你可能感兴趣的:(算法学习)