1.栈和队列的基础知识
栈(stack)是一种只能在同一端进行插入或删除操作的线性表。 表中允许进行插入、删除操作的一端称为栈顶(top),表的另一端 称为栈底(bottom)。
栈的插入操作通常称为进栈或入栈(push),栈的删除操作通常称为 退栈或出栈(pop)。
栈的主要特点:
•后进先出,即后进栈的元素先出栈。
•每次进栈的元素都作为新栈顶元素,每次出栈的元素只能是当前栈顶元素。
•栈也称为后进先出表或者先进后出表。
ADT Stack {
数据对象:
D={ai | 0≤i≤n-1,n≥0,元素ai为E类型}
{
数据关系:
R={r}
r={<ai,ai+1> | ai,ai+1∈D, i=0,…,n-2}
基本运算:
empty():判断栈是否为空,若空栈返回真;否则返回假。
push(e):进栈操作,将元素e插入到栈中作为栈顶元素。
pop():出栈操作,返回栈顶元素。
gettop():取栈顶操作,返回当前的栈顶元素。
}
队列(queue)是一种只能在不同端进行插入或删除操作的线性表。 进行插入的一端称做队尾(
rear),进行删除的一端称做队头或队首 (front)。
队列的插入操作通常称为进队或入队(push),队列的删除操作通常 称为出队或离队(pop)。
队列的主要特点:
先进先出,即先进队的元素先出队。
每次进队的元素作为新队尾元素,每次出队的元素只能是队头的 元素。
队列也称为先进先出表。
ADT Queue
{
数据对象:
D={ai | 0≤i≤n-1,n≥0}
数据关系:
R={r}
r={<ai,ai+1> | ai,ai+1∈D, i=0,…,n-2}
基本运算:
empty():判断队列是否为空,若队列为空,返回真,否则返回假。 push(e):进
队,将元素e进队作为队尾元素。
pop():出队,从队头出队一个元素。
gethead():取队头,返回队头元素而不出队。
}
在规定队列中最多只有m-1个元素时,设置队空条件仍然是
rear==front。当队列有m-1个元素时一定满足(rear+1)%MaxSize==front。
这样,循环队列在初始时置front=rear=0,其四要素如下:
队空条件:rear==front。
队满条件:(rear+1)%MaxSize==front(相当于试探进队一次,若rear达
到front,则认为队满了)。
元素e进队:rear=(rear+1)%MaxSize,将元素e放置在该位置。
元素出队:front=(front+1)%MaxSize,取出该位置的元素。
2.相应练题
#LeetCode1047
#LeetCode150
#LeetCode225