10.1-1
push(s,4) s:4
push(s,1) s:4,1
push(s,3) s:4,1,3
pop(s) s:4,1
push(s,8) s:4,1,8
10.1-2
第一个栈从数组的下标0开始向后增加,第二个栈从数组的末尾n-1开始向前增加。当两者的下标相遇时二者的总和为n,停止向栈中增加元素。
10.1-3
定义好判断队列满及空的函数,在每次插入以及删除的时候判断一下即可。
判断函数如下:
def queue_empty(Q):
if Q.head==Q.tail:
return true
else return false
def queue_full(Q):
if Q.head==Q.tail+1 or (Q.head==1 and Q.tail ==Q.length):
return true
else:
return false
10.1-6
使用栈来模拟队列。栈的特点是先进后出,队列的特点是先进先出。可以使用两个栈,A和B,其中A用来弹出元素,B用来插入元素,当A为空时弹出B中的一个元素插入到A中。这样A中 的元素最多为1个,可以保证先进先出的特点。
10.1-7
使用两个队列来模拟先进后出的栈,将一个队列标记为活跃队列,插入元素时插入到活跃队列。弹出元素时,将活跃队列中的元素依次弹出至只留一个元素,并依次插入到另一个队列中,并将其标记为活跃,原活跃队列标记为非活跃,并弹出其剩下的元素。