<算法导论>练习10.1

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
使用两个队列来模拟先进后出的栈,将一个队列标记为活跃队列,插入元素时插入到活跃队列。弹出元素时,将活跃队列中的元素依次弹出至只留一个元素,并依次插入到另一个队列中,并将其标记为活跃,原活跃队列标记为非活跃,并弹出其剩下的元素。

你可能感兴趣的:(算法导论)