Стек на самом деле достаточно прост для реализации в виде односвязного списка из-за его ограниченных операций push и pop.На самом деле намного проще, если вы вставляете вставленные элементы в head списка.Поскольку это домашнее задание, я предоставлю псевдокод.
Чтобы инициализировать стек, просто создайте:
top -> null
с этим кодом:
def init (stk):
stk->top = null # just initialise to empty.
Pushingэлемент фактически вставляет его в начало списка.Таким образом, когда вы нажимаете 3, 4 и 5, вы получаете:
+---+
top -> | 3 | -> null
+---+
+---+ +---+
top -> | 4 | -> | 3 | -> null
+---+ +---+
+---+ +---+ +---+
top -> | 5 | -> | 4 | -> | 3 | -> null
+---+ +---+ +---+
со следующим кодом:
def push (stk, val):
item = new node # Create the node.
item->value = val # Insert value.
item->next = stk->top # Point it at current top.
stk->top = item # Change top pointer to point to it.
И тогда popping просто удаляет этот первый узел.
def pop (stk):
if stk->top == null: # Catch stack empty error.
abort with "stack empty"
first = stk->top # Save it for freeing.
val = first->value # Get the value from the top.
stk->top = first->next # Set top to the top's next.
free first # Release the memory.
return val # Return the value.