栈和队列
栈和队列是动态集合
栈实现的是一种后进先出(LIFO,last in first out)
队列实现的是一种先进先出(FIFO)
栈(stack)
栈的操作有两个,一个是压入(PUSH),一个是弹出(POP)
对空栈执行POP操作,会导致一个错误——栈下溢(underflow)
如果栈顶元素超出栈的大小,那么则导致另外一个错误——栈上溢(overflow)
队列(QUEUE)
队列的操作也有两个,入队(ENQUEUE)和出队(DEQUEUE)
队列有两个属性,一个是Q.head,另外一个是Q.tail。
Q.head指向队头元素,Q.tail指向下一个新元素即将插入的位置。
队列中存放的位置有Q.head,Q.head+1.......Q.tail-1,并在最后的位置缠绕,形成一个环形。
当Q.head=Q.tail,队列为空,执行出队,出现错误下溢
当Q.head=Q.tail+1时,队列为满(考虑到环形结构),执行入队,出现错误上溢