2.链栈
link_stack.h
#include "link_stack.h"
#include <stdlib.h>
#include <stdio.h>
typedef struct _SNode
{
char _data;
struct _SNode * _next;
}SNode;
typedef struct _Stack
{
SNode * top;
}Stack;
void initStack(Stack * ps);
int isStackEmpty(Stack * ps);
void push(Stack *ps, char ch);
char pop(Stack *ps);
void clearStack(Stack * ps);
link_stack.c
#include "link_stack.h"
#include <stdlib.h>
#include <stdio.h>
void initStack(Stack * ps)
{
ps->top = NULL;
}
int isStackEmpty(Stack * ps)
{
return ps->top == NULL;
// if(ps->top == NUll)
// return 1;
// else
// return 0;
}
void push(Stack *ps, char ch) //头插法的链表
{
// Stack *cur = (Stack*)malloc(sizeof(Stack));
// cur->top->_data = ch;
// cur->top->_next = ps->top->_next;
// ps->top->_next = cur;
SNode *cur = (SNode *)malloc(sizeof(SNode));
cur->_data = ch;
//精辟啊。新来的是哥
cur->_next = ps->top;
ps->top = cur;
}
char pop(Stack *ps)
{
SNode* t = ps->top;
char ret = t->_data;
ps->top = ps->top->_next;
free(t);
return ret;
}
void clearStack(Stack * ps)
{
SNode *t;
while(!isStackEmpty(&ps))
{
t = ps->top;
ps->top = ps->top->_next;
free(t);
}
}