数据结构:栈和队列

来源:互联网 发布:javascript精粹 编辑:程序博客网 时间:2024/06/16 14:13

栈的特点,并用日常例子来比拟?

答:栈(stack)中,被删除的是最近插入的元素:栈实现的是一种后进先出(last-in,first-out,LIFO)策略,就如同餐桌上摞起来待清洗的盘子,最后摞在顶端的盘子,会最先放入水槽中被清洗。


如何检测栈是否为空?

答:当S.top=0时栈中不包含任何元素,即栈是空的(empty),利用查询操作STACK-EMPTY。


什么叫栈下溢?

答:如果试图对一个空栈执行弹出操作,则称栈下溢(underflow)。


什么叫栈上溢?

答:如果栈的元素已满,即S.top超过n时,则称栈上溢(overflow)。


伪代码实现空栈检测,栈内压入元素,栈内弹出元素(前提:不考虑栈的上溢问题。)

答:

STACK-EMPTY(S)1 if S.top==02   return TRUE3 else return FALSEPUSH(S,x)1 S.top=S.top+12 S[S.top]=xPop(S)1 if STACK-EMPTY(S)2    error"underflow"3 else S.top=S.top-14     return S[S.top+1]

以上三种栈的执行时间为多少?

三种栈执行的时间都为O(1).


队列的特点,并用一个例子来比拟?

答:队列(queue)具有先进先出的特性类似于收银台前排队结账的一队顾客,队列有对头(head)和队尾(tail),当有一个元素入队时,它被放在队尾的位置,就像一个新来的顾客排在队伍的末端的位置,而出队的元素则总是在队头的那个,就像排在队伍前面等待最久的那个顾客一样。


什么时候队列是满的?

答:Q.head指向队头元素,Q.tail则指向下一个新元素将要插入的位置,当Q.head=Q.tail+1时,队列是满的。


什么时候队列是空的?

答:Q.head指向队头元素,Q.tail则指向下一个新元素将要插入的位置,当Q.head=Q.tail时,队列是空的。


伪代码实现入队(ENQUEUE)和出队(DEQUEUE)操作?

答:

ENQUEUE(Q,x)1 Q[Q.tail]=x2 if Q.tail==Q.length3     Q.tail=14 else Q.tail=Q.tail+1DEQUEUE(Q)1 x=Q[Q.head]2 if Q.head=Q.length3      Q.head =14 else Q.head=Q.head+15 return x


以上出队和入队的执行时间是多少?

答:出队和入队的操作时间都为O(1).

0 0
原创粉丝点击