第三章 栈和队列
一:栈和队列的基本概念
- 栈的定义:只能在一端进行插入删除的线性表
(1)栈顶(动态变化):进行插入(入栈)和删除(出栈)
(2)栈底:固定不变 - 栈的特点:先进后出
- 栈的存储结构:顺序栈、链栈
- 进栈判断是否栈满;出栈判断是否栈空
- 队列的定义:仅允许在表的一端进行插入,在表的另一端进行删除
(1)队头:删除(出队)->出队后,其后继元素成为新的队头元素
(2)队尾:插入(入队)->入队后成为新的队尾元素 - 队列特点:先进先出
- 队列的存储结构:顺序对、链队
- 进队判断是否队满,出队判断是否队空
二:栈和队列的存储结构、算法与应用 - 顺序栈:三个状态、两个操作
三个状态:
(1)栈空:st.top=-1
(2)栈满:st.top=maxsize-1(下标从0开始)
(3)非法状态:上溢(栈满后继续入栈)、下溢(栈空后继续出栈)
两个操作:
(1)进栈:++(st.top);st.data[st.top]=x
(2)出栈:x=st.data[st.top];–(st.top) - 链栈:两个状态、两个操作
两个状态:
(1)栈空:lst->next==NULL
(2)栈满:不存在
两个操作:进栈、出栈
栈的应用:递归调用、子程序调用、表达式求值 - 顺序队列(循环队列):rear(队尾)、front(队头)
两个状态:
(1)队空:qu.rear==qu.front
(2)队满:(qu.rear+1)%maxsize=qu.front
两个状态:进队、出队
初始化队列算法:qu.rear=qu.front=0 - 链队列:两个状态、两个操作
两个状态:
(1)队空:qu.rear=NULL或者qu.front=NULL
(2)队满:不存在
两个操作:进队、出队(头尾指针可能都需要修改)