用链表实现通用堆栈http://blog.csdn.net/douzixinxin/archive/2006/02/24/608035.aspx
#include <assert.h>
#include <stdlib.h>
typedef struct Stack//定义结构体
{
int num;
struct Stack *next;
}Stack;
/*尾节点:链表堆栈中最后一个入栈的节点*/
static Stack *stack;//指向尾节点的指针
int isempty()//判断是否链式堆栈是否为空
{
return stack == NULL;
}
int isfull()//该情况不存在
{
return 0;
}
void push(Stack *newStack)//结构体入栈,加入链表尾节点
{
Stack *temp = (Stack *)malloc(sizeof(Stack));
assert( !isfull() );//链表堆栈是否满
assert( temp != NULL );//新节点空间分配是否失败
temp->num = newStack->num;//新节点初始化
temp->next = stack;//新节点指向旧的尾节点
stack = temp;//链表堆栈指针指向尾节点
}
void pop()//删除尾节点
{
Stack *temp;
assert( !isempty() );//链表堆栈是否空
temp = stack;//保存旧的尾节点
stack = temp->next;//链表堆栈指针指向次尾节点
free(temp);//释放旧的尾节点。注意:一定要释放,否则容易引起内存泄露
}
Stack f_top()//返回尾节点,但并不删除
{
assert( !isempty() );//链表堆栈是否为空
return *stack;//返回尾节点,但并不删除
}
void del_stack()//删除整个链表堆栈,释放内存空间
{
while( !isempty() )
pop();
}