1.定义
用单链表来实现的栈,定义也就跟单链表一样了,有一个数据成员和一个指针成员。
typedef int eletype;
typedef struct node
{
eletype data;
struct node *next;
}Stack;
2.新建栈
完成的操作就是分配空间,注意指针指向结尾NULL。
Stack *CreateStack()
{
Stack *S;
S = malloc(sizeof(Stack));
if (S == NULL) {
printf("Out of space\n");
return NULL;
}
//while (S->next != NULL)
// Pop(S);
S->next = NULL;
return S;
}
3.删除栈
跟删除单链表类似,要先保存next指针指向的位置再free当前空间。
void DeleteStack(Stack *S)
{
Stack *tmp, *current;
current = S;
while (current != NULL) {
tmp = current->next;
free(current);
current = tmp;
}
}
4.入栈
分配空间,调整next指针。
void Push(Stack *S, eletype data)
{
Stack *tmp;
tmp = malloc(sizeof(Stack));
if (tmp == NULL) {
printf("Out of space\n");
return;
}
else {
tmp->data = data;
tmp->next = S->next;
S->next = tmp;
}
}
5.出栈
调整next指针,释放空间。
void Pop(Stack *S)
{
Stack *first;
if (S->next == NULL) {
printf("Empty stack\n");
return;
}
else {
first = S->next;
S->next = S->next->next;
free(first);
}
}