Реализация стека на основе односвязного списка - C (СИ)
Формулировка задачи:
typedef int Data; typedef struct Stack * pStack; pStack CreateStack(Data val); int Push(pStack This, Data val); void Pop(pStack This); Data GetTop(pStack This); void DeleteStack(pStack This); struct Stack { Data value; struct Stack * prev; };
pStack CreateStack(Data val) { pStack pst; pst = (pStack) malloc(sizeof(struct Stack)); if (pst == NULL) return NULL; pst->prev = NULL; pst->value = val; return pst; } int Push(pStack This, Data val) { pStack pst; if (This == NULL) return 0; pst = (pStack) malloc(sizeof(struct Stack)); if (pst == NULL) return 0; pst->prev = This; pst->value = val; This = pst; return 1; } void Pop(pStack This) { pStack pst; if (This == NULL) return; pst = This; This = This->prev; free(pst); } Data GetTop(pStack This) { if (This != NULL) return This->value; return -1; } void DeleteStack(pStack This) { while (This != NULL) Pop(This); }
Решение задачи: «Реализация стека на основе односвязного списка»
textual
Листинг программы
int CMyStack::Pop() { if (isEmpty()) { return -1; } int temp = top->d; Node *pv = top; top = top->p; delete pv; return temp; }
Объяснение кода листинга программы
- CMyStack::Pop() - это метод, который реализует функцию
Pop
стека. - if (isEmpty()) - это проверка на пустоту стека. Если стек пуст, метод возвращает -1.
- int temp = top->d; - это сохранение значения, хранящегося на вершине стека, в переменной temp.
- *Node pv = top;** - это присвоение указателя на узел, находящийся на вершине стека, переменной pv.
- top = top->p; - это обновление указателя на следующий узел в стеке.
- delete pv; - это освобождение памяти, выделенной под узел, находящийся на вершине стека.
- return temp; - это возврат значения, хранящегося в переменной temp, то есть значения, хранящегося на вершине стека, перед его удалением.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д