Стек фактически достаточно прост для реализации как отдельный список из-за его ограниченных операций push и pop. На самом деле это намного проще, если вы вставляете толкаемые элементы в головку . Поскольку это домашнее задание, я предоставил псевдокод.
Чтобы инициализировать стек, это просто создание:
top -> null
с этим кодом:
def init (stk):
stk->top = null # just initialise to empty.
Раздвигая элемент фактически вставив его в начала списка. Таким образом, когда вы нажимаете 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.
И поппинг затем просто удаление, что первый узел.
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.
Выполняет ли реализация вашего стека одиночный или двусвязный список? –
это отдельный список. – Johnrad
Какой конец «назад»? Стеки имеют вершины и днища, а не спины и фронты. –