堆栈实现
- 实际上是单链表实现,栈顶在链表头,PUSH和POP都在头操作。不可以在链表尾操作,因为链表尾无法找到上一个节点。
- 优点:无需事先分配内存。
初始化
typedef struct SNode *Stack;
struct SNode
{
int data;
Stack next;
};
创建堆栈
Stack CreateStack()
{
Stack s;
s = (Stack)malloc(sizeof(struct SNode));
s->next = NULL;
return s;
}
检测非空
int IsEmpty(Stack S)
{
return (S->next == NULL);
}
PUSH
void Push(int item, Stack S)
{
Stack TmpCell;
TmpCell = (Stack)malloc(sizeof(struct SNode));
TmpCell->data = item;
TmpCell->next = S->next;
S->next = TmpCell;
return;
}
POP
- 创建一个指针指向原头结点,将第二个结点作为新的头结点,free原头结点
int Pop(Stack s)
{
Stack FirstCell;
int TopElem;
if (IsEmpty(s))
{
cout << "The stack is empty";
return NULL;
}
else {
FirstCell = s->next;
s->next = FirstCell->next;
TopElem = FirstCell->data;
free(FirstCell);
return TopElem;
}
}