您的位置:首页 > 其它

用链表实现通用堆栈

2011-06-30 16:53 190 查看
用链表实现通用堆栈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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: