链式实现的堆栈

链式实现的堆栈

/*_############################################################################
_##
_## 链式实现的堆栈
_## Author: xwlee
_## Time: 2006.12.31
_## Chang'an University
_## Development condition: win2003 Server+VC6.0
_##
_## link_stack.cpp 文件
_##########################################################################*/
#include “stack.h”
#include
#include
#include

#define FALSE 0

typedef struct STACK_NODE{
STACK_TYPE value;
struct STACK_NODE *next;
}stacknode;

// 指向堆栈中第一个结点的指针,初始化为空.
static stacknode *stack;

// create_stack函数
int create_stack( size_t size )
{
return 1;
}

// destroy_stack函数
int destroy_stack( void )
{
while( !is_empty() )
pop();
return 1;
}

// push函数
void push( STACK_TYPE value )
{
stacknode *new_node;

new_node = ( STACK_NODE * )malloc( sizeof(stacknode) );
if( new_node == NULL)
{
printf(“push is false.\n”);
exit(0);
}
new_node->value = value;
new_node->next = stack;
stack = new_node;
}

// pop函数
void pop( void )
{
stacknode *first_node;
if( is_empty() ) // 若堆栈已空,条件成立.
{
printf(“stack already empty.\n”);
exit(0);
}
first_node = stack;
stack = first_node->next;
free( first_node );
}

// top函数
STACK_TYPE top( void )
{
if( is_empty() ) // 若堆栈已空,条件成立.
{
printf(“stack already empty.\n”);
exit(0);
}
return stack->value;
}

// is_empty函数
int is_empty( void )
{
return stack == NULL;
}

// is_full函数
int is_full( void )
{
return FALSE; // 由于链式堆栈不会填满,所以函数始终返回假
}