ADT堆栈的链表实现

来源:互联网 发布:centos关闭防火墙端口 编辑:程序博客网 时间:2024/05/16 01:24

堆栈,插入和删除只能在队列头进行。实现方式主要使用单向链表。

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;}}


0 0