Hoy alguien me hizo una pregunta, de la siguiente manera:
significa que un orden dado de 654321 pila, la pila de determinar si se cumple lo siguiente.
Ideas de resolución de problemas
Y utilizando el elemento de memoria de pila es seguir una pasada en primero en salir (LIFO), como se muestra a continuación, podemos utilizar una caja medio abierta representa una pila, la pila se denomina extremo abierto, cuyo extremo se dedica a la de empuje (push) y la pila de operación (pop).
Para una secuencia dada que se determinen, tales como donde la opción A 453 126, se puede deducir realizado secuencialmente en este orden de secuencia,
- El primero es el primer elemento 4, podemos utilizar este elemento "4" pila original en dos, a saber, un primer paso, la izquierda es el peso original de la pila, el derecho a st_tmp, prestar atención a la dirección de apertura st_tmp opuesto.
- Entonces primero determinamos si la poligonal actual st la parte superior del elemento de pila "4", si es para que salga, y atravesar el siguiente elemento "5", como un segundo paso,
- En la misma operación que llegamos a la tercera etapa. Esta vez para atravesar el elemento "3", esta vez en la parte superior izquierda de la pila no significa elemento st "3", por lo que tenemos que encontrar el fin de la parte superior de la pila de st_tmp st y empuje hacia la izquierda y luego salir, este paso se puede simplificar dirigir estallar hacia fuera.
- Cuando se atraviesa a la cuarta etapa del "1", nos encontramos con que el lado izquierdo de la parte superior de la pila st st_tmp derecho la parte superior de la pila no, en este momento vamos a st_tmp empuje sucesiva la parte superior de la pila a la izquierda hasta encontrar la parte superior de la pila es igual a st_tmp en este punto el elemento de desplazamiento "1" hasta el momento. Si en este momento, por desgracia estallar de todos los elementos st_tmp son también encontró ningún elemento "1", lo que indica que la secuencia no es la secuencia correcta
- Afortunadamente, se encontró aún elementos "1" y el pop a cabo, como el sexto paso
- Los siguientes pasos son similares a la operación, si la última pop éxito a cabo todos los elementos de st y st_tmp, lo que indica que la secuencia es correcta, es decir, la secuencia original se puede obtener 654.321 pila a través de una serie de empuje paso / pop.
la implementación del código
Código se implementa de la siguiente manera, donde no sólo se puede realizar la determinación 654321, 4321 también para lograr otro número de dicha determinación, sólo es necesario para las variables del cambio n
puede, no sólo el número, lo mismo se aplica para cualquier pila como 343453, etc., sólo se necesita cambiar la inicialización de la pila puede ser.
class StackUnderflow(ValueError):
'''自定义栈相关的异常类
'''
pass
class SStack:
'''基于顺序表实现的栈类
'''
def __init__(self):
self._elems = [] # 用list对象 _elems存储栈中元素
def is_empty(self):
return self._elems == []
def top(self): # 取得最后压入的元素,即栈顶
if self._elems == []:
raise StackUnderflow("in SStack.pop()")
else:
return self._elems[-1]
def push(self, elem): # 压栈
self._elems.append(elem)
def pop(self): # 出栈
if self._elems == []:
raise StackUnderflow("in SStack.pop()")
return self._elems.pop()
def elems(self):
elems = self._elems
return elems
st = SStack()
flag = True
# n = int(input("栈元素个数:"))
n = 6 # n也可以改为其他的
for i in range(n, 0, -1):
st.push(i)
st_tmp = SStack()
input_series = input("输入待判断序列")
series_list = list(map(int, input_series))
print(series_list)
while not st.top() == series_list[0]: # 以待判断序列首元素为界,将原栈一分为二
st_tmp.push(st.top())
st.pop()
for serie in series_list:
if (not st.is_empty()) and serie == st.top():
st.pop()
else:
if st_tmp.is_empty():
flag = False
else:
while not serie == st_tmp.top():
st.push(st_tmp.top())
st_tmp.pop()
if st_tmp.is_empty():
break
if st_tmp.is_empty():
flag = False
else:
st_tmp.pop()
if flag == False:
break
print(flag)
posdata
Si usted piensa que este artículo útil, la bienvenida a los pulgares de recogida + para proporcionar un flujo constante de los bloggers más texto de potencia. También la recepción la atención sobre el número personal de público, el código de dos dimensiones de la siguiente manera: