Реализация стека на основе односвязного списка - 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, то есть значения, хранящегося на вершине стека, перед его удалением.