C++二级-栈与队列
1.1栈的基本概念
栈:只允许在一端进行插入或删除操作的线性表。栈是一种线性表,但是限定这种线性表只能在一端进行插入和删除操作。
栈顶:线性表允许进行插入和删除的那一段。
栈底:固定的,不允许进行插入和删除的另一端。
空栈:不包含任何元素的空表。
1.2栈的基本操作
栈的基本操作包括入栈和出栈,在进行入栈和出栈操作时,应注意栈是“先进后出”或“后进后出”的线性表。
(1)入栈:向一个栈插入新元素称作入栈。
(2)出栈:从一个栈删除元素称作出栈。
1.3栈的存储结构
栈的存储结构可以分为顺序存储和链式存储。顺序存储的栈称为顺序栈,链式存储的栈称为链栈。
1.3.1顺序栈
顺序栈:利用一组地址连续的存储单元存放自栈底到栈顶的数据元素,同时附设一个指针(top)指示当前栈顶位置。
空栈条件:顺序栈的数组下标如果从0开始,栈空的条件是top=-1。
栈满条件:顺序栈的数组下标如果从0开始,栈满的条件是top=maxsize-1。
计算方法:如果bottom>=1,栈内的元素个数为|top-bottom|+1,如果bottom=top=0,则表示空栈。(top表示栈顶指针,bottom表示栈底指针)
上溢:若顺序栈满栈时,再进行入栈操作,就会产生上溢。
下溢:若顺序栈空栈时,再进行出栈操作,就会产生下溢。
1.3.2链栈
链栈:采用链式存储的栈称为链栈。
优点:便于多个栈共享存储空间和提高其效率,并且链栈不存在栈满上溢的情况。
2.1队列的基本概念
队列:队列是一种特殊的线性表,只允许在表的一端进行插入,在表的另一端进行删除。
队头:队列中指定了用来删除数据的一端,用头指针(front)指向队头元素的前一个位置。
队尾:队列中指定了用来插入数据的一端,用尾指针(rear)指向队尾元素。
空队列:队列中没有元素时,称为空队列。
2.2队列的基本操作
队列的基本操作包括入队和出队,在进行入队和出队操作时,应注意队列是“先进先出”的线性表。
(1)入队:在队尾插入一个新元素。
(2)出队:在队头退出一个元素。
2.3队列的存储结构
队列的存储结构可以分为顺序存储和链式存储。队列的顺序存储结构一般采用循环队列的形式,队列的链式存储称为链式队列。
2.3.1循环队列
循环队列:将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,即把存储队列元素的表从逻辑上看成一个环,称为循环队列。
运算:元素个数=元素个数(尾指针)-front(头指针)
- (a)rear-front为正数时,便是循环队列的元素个数
- (b)rear-front为负数时,需要加上循环队列的容量
- (c)rear-front为零时,队列可能队满或者队空
2.3.2链式队列
链式队列:队列的链式存储称为链式队列,它实际上是一个同时带有队头指针和队尾指针的单链表。头指针指向队头的结点,尾指针指向队尾结点,即单链表的最后一个结点。
队空条件:front=NULL && rear=NULL(当front=rear时,可能是同时指向尾结点也可能是同时指向空)