Dynamic13. Дан указатель \(P_1\) на вершину стека. Используя тип TStack (см. задание Dynamic11), описать функции StackIsEmpty(S) логического типа (возвращает TRUE, если стек S пуст, и FALSE в противном случае) и Peek(S ) целого типа (возвращает значение вершины непустого стека S, не удаляя ее из стека). В обеих функциях переменная S является входным параметром типа TStack. С помощью этих функций, а также функции Pop из задания Dynamic12, извлечь из исходного стека пять элементов (или все содержащиеся в нем элементы, если их менее пяти) и вывести их значения. Вывести также значение функции StackIsEmpty для результирующего стека и, если результирующий стек не является пустым, значение и адрес его новой вершины.

Решение на Python 3:

import random

def StackIsEmpty(S):
return len(S) == 0

def Peek(S):
return S[-1]

N = random.randrange(0,10)
print("N = ",N)

stack = []
for i in range(0,N):
stack.append(random.randrange(0,10))

print("Stack:", stack)
print("Stack is Empty:", StackIsEmpty(stack))

for i in range(0,5):
if StackIsEmpty(stack):
break
print()
print("Stack pop #{0}".format(i+1))
print("Stack before:", stack)
print("Value of the Stack's top: ",stack[-1])
stack.pop()
print("Stack after:", stack)

print()
print("Stack:", stack)
if not StackIsEmpty(stack):
print("Address of the Stack's top: ",id(stack[-1]))
print("Value of the Stack's top: ",stack[-1])