您的位置:首页 > 其它

ADT堆栈的链表实现

2014-12-25 00:28 183 查看
堆栈,插入和删除只能在队列头进行。实现方式主要使用单向链表。

typedef struct stack_node_tag
{
struct stack_node_tag *next;
int data;
}stack_list_t;

typedef stack_list_t stack_elem_t;

typedef struct stack_tag
{
stack_list_t *head;
int count;
}stack_t;

stack_t *stack_init(stack_t *s)
{
if( s == NULL )
{
s = (stack_t *)malloc( sizeof(stack_t) );
s->head = NULL;
s->count = 0;
return s;
}
}

int stack_destroy(stack_t *s)
{
if( s != NULL )
{
stack_list_t *p = s->head;

while( p != NULL )
{
stack_list_t *t = p;
p = p->next;
free(t);
}

free(s);
}
}

stack_elem_t *stack_elem_alloc( int n )
{
stack_elem_t *t = (stack_elem_t *)malloc(sizeof(stack_elem_t));
t->data = n;
t->next = NULL;
return t;
}

void stack_push(stack_t *s, stack_elem_t *e)
{
assert( s!= NULL );

e->next = s->head;
s->head = e;
s->count++;
}

int stack_pop(stack_t *s)
{
assert( s!= NULL );

if( s->head != NULL )
{
s->count--;
if(s->count < 0)
{
s->count = 0;
}

stack_elem_t *t = s->head;
s->head = s->head->next;
int data = t->data;

return data;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: