Dynamic10. Дан указатель \(P_1\) на вершину непустого стека. Создать два новых стека, переместив в первый из них все элементы исходного стека с четными значениями, а во второй — с нечетными (элементы в новых стеках будут располагаться в порядке, обратном исходному; один из этих стеков может оказаться пустым). Вывести адреса вершин полученных стеков (для пустого стека вывести NIL). Операции выделения и освобождения памяти не использовать.

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

import random

N = random.randrange(0,10)
stack = []
for i in range(N):
D = random.randrange(1,11)
stack.append(D)
print("Stack: ", stack)
print("Number of stack items: ", len(stack))
print("id of last item (P1): ",end="")
if len(stack)>0:
print(id(stack[-1]))
else:
print("null")


stack_odd = []
stack_even = []

print()
print("Moving items from stack:")
K = 0
while stack:
try:
D = stack[-1]
if D%2 == 1:
stack_odd.append(D)
else:
stack_even.append(D)
stack.pop()
print("Moved item: ", D)
except:
print("Retrieving error")

print()
print("Stack after retrieving: ", stack)
print("Number of stack items: ", len(stack))
print()
print("Evens Stack after retrieving: ", stack_even)
print("Number of stack items: ", len(stack_even))
print("id of last item (P_even): ",end="")
if len(stack_even)>0:
print(id(stack_even[-1]))
else:
print("null")
print()
print("Odds Stack after retrieving: ", stack_odd)
print("Number of stack items: ", len(stack_odd))
print("id of last item (P_odd): ",end="")
if len(stack_odd)>0:
print(id(stack_odd[-1]))
else:
print("null")